康小武:游戏(坦克大战)软件的开发
游戏开始显示启动画面进入游戏界面用户操作系统响应否生命数是否为0是游戏结束 图4-1 游戏(坦克大战)软件开发的总体流程图
4.2 功能实现
4.2.1 启动画面
添加启动画面:游戏开始的时候有一个启动画面,主要给用户提供一个友好界面,一个好的启动界面,可以让用户对坦克游戏有一个比较好的印象;同时也给用户一个缓冲的时间,不会一下就进入游戏。画面如图4-2所以。
26
中原工学院信息商务学院毕业设计(论文)
图4-2 启动画面
主要设计思路如下: 1. 插入组件
先插入Splash screen:点工程-添加到工程-Components and Controls Gallery-选Visual C++ Components选Splash screen点Insert然后默认确定、确定??
2. 修改位图
插入自己的位图:在Resources Files中的Bitmap,引入,选择一个你准备好的位图,确定,把位图ID改成IDB_SPLASH1。
3. 修改ID 修改
ID:在
CSplashWnd
类里面的
Create()函数
m_bitmap.LoadBitmap(IDB_SPLASH)中的IDB_SPLASH换成IDB_SPLASH1。
4. 修改图片显示方式
修改图片显示大小:先在Create( )函数里改CreateEx()中的第7、8参数的数值,然后在onPaint( )函数里用StretchBlt()函数来修改显示图片大小。
为了显示出动画的效果在onpaint()用循环,加入个API函数Sleep( ),并且改StretchBlt()里参数的大小,这样就会有动画的效果啦。 4.2.2 计时器
添加计时器:这个游戏用计时器来实现坦克、子弹、爆炸显示等情况,计时器可以很精确的显示任何一点小小的改变,便于控制,使游戏变得更流畅,玩起来感觉更好。主要设计思路如下:
1. 计时器
当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是
27
康小武:游戏(坦克大战)软件的开发
计时器的标识,也就是名字。nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL。KillTimer函数是清除一个计时器。计时器属于系统资源,使用完应及时销毁。
比如:SetTimer(1,1000,NULL);//1秒触发一次定时器 KillTimer(1); //把上面定义的计时器销毁 2.计时器添加方法
在ClassWizard里,选择需要计时器的类,添加WM_TIMER消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。
3.在程序里实现
为CTankView 类添加消息相应函数OnTimer()点击查看-建立类向导,选择Message Maps选项卡,在ClassName框里选CTankView,然后在Messages:里选WM_ONTIMER。点击“Add Function”,再点“Edit Code”。那么你就可以在OnTimer()函数里写代码了。 4.2.3 键盘消息
添加键盘响应函数:这个游戏的控制主要是通过键盘为主,鼠标点击为辅助。主要设计思路如下:
1. 键盘消息
当用户敲击键盘上的键时,会向应用程序发送消息,从而在键盘消息响应函数中完成用户要求的工作。Windows规定,键盘消息总是传送给带有输入焦点的窗口,因为这个窗口代表的是正在活动的应用程序。
WM_KEYDOWN是任意键(包括字符键)被按下时都产生该消息。如果被按下的是字符键,在产生WM_KEYDOWN消息的同时还产生字符消息
2. MFC中WM_KEYDOWN消息
MFC中定义了WM_KEYDOWN的消息响应函数是:
Void OnKeyDown(UINT nChar,UINT nPepCnt,UINT nFlags);参数nChar传递按键的字符。如果被按的是字符键,则该参数是字符对应的ASCII码,否则是键对应的虚拟键码;参数nRepCnt传递的是按键的重复次数;而参数nFlags传递的是按键的一些位信息,它是一个32位的数。
3. 添加消息响应函数
28
中原工学院信息商务学院毕业设计(论文)
在CTankView 类添加消息相应函数OnKeyDown()方法是点查看-建立类向导,选中Message Maps选项卡,在ClassName框里选CTankView,然后在Messages里选WM_ONKEYDOWN。点击“Add Function”,再点“Edit Code”。那么你就可以在OnKeyDown()函数里添加代码了。 4.2.4 鼠标消息
添加鼠标响应函数:通过鼠标对游戏进行一些辅助性的操作。 功能设计思路: 1. 鼠标消息
当用户移动鼠标或者按动鼠标的按钮时都会产生事件,并且系统都会在捕获这些时间后向应用程序发送相应的消息,如果应用程序中存在着这个消息的响应函数,程序则会调用这个函数完成相应的任务,否则就把这个消息交割系统进行默认处理。鼠标消息分为客户区和非客户区消息,本程序用到的是客户区鼠标消息WM_LBUTTONDOWN,按下鼠标左键。
2. MFC中的WM_ONLBUTTONDOWN消息 MFC中鼠标左键按下的消息响应函数的原型为:
Afx_msg void OnLButtonDown(UINT nFlags,CPoint point);其中point是产生鼠标消息时光标在窗口客户区的位置,nFlags参数可以使用的掩码有:MK_CONTROL,MK_SHIFT,MK_RBUTTON等,其中MK_CONTROL,表示鼠标按下的同时,Ctrl也可同时按下。
3. 添加鼠标响应消息
为程序添加鼠标响应消息:为CtankView类添加鼠标左键相应函数OnLButtonDown()方法是点查看-建立类向导,选中Message Maps选项卡,在ClassName框里选CTankView,然后在Messages里选WM_ONLBUTTONDOWN。点击“Add Function”,再点“Edit Code”接下来就可以添加代码。 4.2.5 游戏开始暂停
开始游戏:启动画面过后,进入了游戏的界面,此时游戏是停止的,需要用户点击开始图形按钮,或者按开始/暂停键(默认F1)让游戏开始运行。设置游戏开始/暂停开关是为了让用户更好的操作游戏,方便用户。开始界面如图4-3所示。
29
康小武:游戏(坦克大战)软件的开发
图4-3 开始界面
功能设计思路: 1. 定义变量
定义一个BOOL变量,来记录游戏的开始/暂停,另外定义一个UINT类型变量,来记录按键
2. 添加消息响应函数
在CTankView 类添加消息相应函数OnKeyDown()方法是点查看-建立类向导,选中Message Maps选项卡,在ClassName框里选CTankView,然后在Messages里选WM_ONKEYDOWN。点击“Add Function”,再点“Edit Code”。那么你就可以在OnKeyDown()函数里添加代码了。
3. 在OnKeyDown中加代码
30