俄罗斯方块设计报告 联系客服

发布时间 : 星期五 文章俄罗斯方块设计报告更新完毕开始阅读5bc6a47602768e9951e738d4

图 3-3键盘接口功能图

如上述流程图所示程序运行时有一个消息队列,当用户按下一个键的时就给窗体发送了一个消息,此时接收处理消息有两种函数可以调用,一种是GetMessage()函数,另外一种是PeekMessage()函数,两个函数的功能在本质上没什么区别,GetMessage函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回,而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。

当按下一个键时,先判断其是否已经越界了,若发生越界或游戏结束时就不移动方块,然后判断其按下的具体是哪个键。

3.4俄罗斯方块最高分纪录流程

俄罗斯方块的最高分存贮在一个系统配置文件当中,第一次运行时将其最高分设置为一,当第一次运行完毕时,将当前的分数和最高分比较,如果当前最高分比存储的最高分要大,则将当前玩家所玩的成绩设置为最高分,第二次运行时直接读取最高分,并将其显示在游戏界面上,当游戏结束时比较下最高分,使最高分永远都保持在最大分数的状态。

游戏的最高分的纪录如下图3-4所示:

开始读取最高分游戏运行结束大于最高分?YESNO将当前分数赋值给最高分自动结束

图 3-4游戏的最高分纪录图

如图所示是俄罗斯方块的处理流程,从开始判断时候到底底部,到达则做销行操作,然后生成下一个下坠物,将新的下坠无代替旧的下一个下坠物,将旧的下坠无当做当前的下坠物。下到底部判断是否做销行操作,然后判断游戏时候借宿,未结束则继续新一轮的生产方块,若方块到达了底部,占满空间则游戏结束。

第四章 概要设计

4.1键盘消息的产生和发送

键盘作为输入设备,是WINDOWS应用程序的一个十分重要的输入手段。当用户按下或释放一个键时,键盘KEYBOARD.DRV中的键盘中断处理程序对所击键进行编码,并调用WINDOWS的用户模块USER.EXE中的有关程序来生成键盘消息。最终发送到硬功程序的消息队列中等待处理,而处理这些消息则是由应用程序的窗口过程来具体完成的。

键盘上每一个由意义的键都对应着一个唯一的标识值,称之为扫描码。当用户按下或释放某键时,都会产生扫描码,但扫描码是依赖于具体设备的,为达到设备无关性的要求,在应用程序中,往往使用的是与具体设备无关的虚拟码,虚拟码是由WINDOWS系统定义的与设备无关的键的标识。

设备驱动程序截取键的扫描码后,把他翻译成虚拟码,这样,由于键盘的输入,就产生了一条消息,它含有扫描码,虚拟码以及其他与击键有关的消息,设备驱动程序就把这些消息放到系统的消息队列中去,WINDOWS从系统消息队列中取出这条消息。再把它发送到相应的线程消息队列中去,最后,由窗口过程从线程消息队列中取出键盘消息队列,进行必要的后续处理。

键盘消息分成两类,即按键消息和字符消息。每当用户按下或松开一个键时,就产生了一个按键消息。WM_KEYDOWN和WM_KEYUP当一个按键的组合产生一个可以显示的字符,但只有当键盘驱动程序把键盘映射成ASCII后才能产生WM_CHAR消息。同样,字符消息也可以分成两类即:系统的和非系统的。字符消息处理如下图4.1所示:

WinMain系统队列消息循环设备驱动程序应用程序队列WNDPROC其他应用程序DefWndProc 图 4.1字符消息处理图

操作系统在接收到键盘输入后,还要决定哪一个应用程序将响应入Windows操作系统把消息发送给有\输入焦点(input focus)的窗口\由于某些应用程序有好几个窗口,键盘还必须由该应用程序的众多窗口共享,但当按下某一个键时,却只有一个窗口过程能接收到该键盘消息,接收这个键盘消息的窗口输入就称为有\输入焦点\的窗口,该窗口应是活动窗口,或者活动窗口的子窗口,有\输入焦点\的子窗口是所有输入消息的接收目标。窗口函数通过捕获WM_SETFOCUS和WM_KILLFOCUS消息以确定当前窗口是否具有输入焦点。 WM_SETFOCUS表明窗口在接收输入焦点,而WM_KILLFOCUS表示窗口失去焦点.在WinMain函数的消息循环中包含了TranslateMessage函数,他的主要功能是把按键消息转化为字符消息,但只有当键盘驱动程序把字符映射成ASCII码后才能产生

WM_CHAR消息。同样,字符消息也可以分成两类:系统的和非系统的。如下4.1表所示:

表 4.1字符消息分类

消息 WM_CHAR WM_DEADCHAR WM_SYSCHAR WM_SYSDEADCHAR 类型 非系统 非系统 系统 系统 含义 非系统字符 非系统死字符 系统字符 系统死字符

在Windows操作系统中,使用光标(cursor)来指示当前鼠标的位置,用插字符(caret)指示当前正文位置。插字符是应用程序共享系统资源,因此Windows桌面上只有一个差字符。

按键消息一般分成两类:系统按键消息和非系统按键消息。系统按键消息对应于使用了Alt键与相关输入的组合产生的消息。这些键一般由Windows系统内部直接处理,应用程序一般不处理。如果应用程序处理这些一般系统键消息,还要调用DefWindowsProc()函数,以便不影响Windows对他们的处理,非系统消息则对应于那些不使用A lt键组合的按键消息。

4.2 Win32下游戏编程的框架结构

基于Win32下的游戏编程不同于基于MFC编程,MFC许多的模块是已经封装好的程序员只需直接使用就可以了,而Win32没有进行封装需要程序自己动手编写所需要的模块,这也给程序员很多自由发挥的机会,当一个游戏运行的时候运行在一个窗口上面运行时的方式可以是全屏也可以是一个窗口的模式,基于WIN32下的游戏编程主要包括以下过程。

① WinMain函数:程序的入口函数。

② InitCommonControls函数:初始化通用控件类库。