c飞机大战实训报告附带码_第1页
c飞机大战实训报告附带码_第2页
c飞机大战实训报告附带码_第3页
c飞机大战实训报告附带码_第4页
c飞机大战实训报告附带码_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1.概括2实训项目简介.2实训功能说明.2基本功能.2附带功能.22.有关技术.3Windows准时器技术3透明贴图实现技术.3CObList链表4获得矩形地区.4使用AfxMessageBox显示游戏过程中的提示信息4内存开释.4CImageList办理爆炸成效4对话框的应用.43.整体设计与详尽设计.4系统模块区分.4主要功能模块.5系统对象类图.5系统主程序活动图.5系统部分流程图.54.编码实现.8绘制游戏背景位图程序.8飞机大战游戏对象的绘制程序.8飞机大战游戏对象战机地点的动向控制.8飞机大战游戏对象之间的碰撞实现.9游戏界面输出目前信息.95.项目程序测试.9战机挪动及子弹发射模块测试.9敌机及炸弹模块测试.20爆炸模块测试.206.实训中碰到的主要问题及解决方法.107.实训领会.111.概括实训项目简介本次实训项目是做一个飞机大战的游戏,应用MFC编程,达成一个界面简短流利、游戏方式简单,玩起来易于上手的桌面游戏。该飞机大战项目运用的主要技术即是MFC编程中的一些函数、链表思想以及贴图技术。实训功能说明基本功能1)设置一个战机拥有必定的速度,经过键盘,方向键可控制战机的地点,空格键发射子弹。2)界面中敌机出现的地点,以及敌机炸弹的发射均为随机的,敌机与敌机炸弹均拥有必定的速度,且跟着关卡难度的增大,数目和速度均增添。3)关于随机产生的敌机和敌机炸弹,若超出矩形地区,则开释该对象。4)增添爆炸成效,包含战机子弹打中敌机爆炸、敌机炸弹打中战机爆炸、战机与敌机相撞爆炸以及战机子弹与敌机炸弹相撞爆炸四种爆炸成效。且爆炸发生后敌机、子弹、炸弹均消逝,战机生命值减一。附带功能1)为游戏界面增添了背景图片,并在战机发射子弹、战机击中敌机、敌机击中战机、以及战机敌机相撞时均增添了背景音效。2)为游戏设置了不一样的关卡,每个关卡难度不一样,敌机与敌机炸弹的速度跟着关卡增大而加速,进入第二关此后敌机从上下方均会随机出现,且随机发射炸弹。3)第一关卡敌机从上方飞出,速度必定,战机每打掉向来敌机则增添一分,每积十分,则为战机增添一个生命值,当战机得分超出50分则可进入下一关;进入第二、三关时敌机速度加速,分别从上下双方飞出,此时战机每得分20、30分,才会增添一个生命值,得分超出100、150分则进入下一关、通关。(4)在游戏界面输出目前游戏进行信息,包含目前得分、目前关卡以及击中敌机数目。5)增添了鼠标控制战机地点这一成效,战绩的地点跟着鼠标的挪动而挪动,而且点击鼠标左键可使得战机发射子弹。6)实现了暂停游戏的功能,玩家可经过键盘上的‘Z’键,对游戏进行暂停。7)经过对话框的弹出可提示玩家能否查察游戏说明、能否进入下一关、能否从头开始等信息,使得玩家可自己选择。有关技术Windows准时器技术Windows准时器是一种输入设施,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。程序将时间间隔告诉Windows,而后Windows给您的程序发送周期性发生的WM_TIMER信息以表示时间到了。本程序中使用多个准时器,分别控制不一样的功能。在MFC的API函数中使用SetTimer( )函数设置准时器,设置系统间隔时间,在OnTimer( )函数中实现响应准时器的程序。透明贴图实现技术绘制透明位图的重点就是创立一个“掩码”位图

(maskbitmap)

,这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在详尽介绍实现过程以前先介绍下所使用的绘图函数以及函数参数所代表的功能;绘制过程需要使用到BitBlt( )函数。整个功能的实现过程以下:

整个创立一张大小与需要绘制图像同样的位图作为“掩码”位图;将新创立的“掩码”位图储存至掩码位图的设施描绘表中;把位图设施描绘表的背景设置成“透明色”,不需要显示的颜色;复制粘贴位图到“掩码”位图的设施描绘表中,这个时候“掩码”位图设施描绘表中寄存的位图与位图设施描绘表中的位图同样;把需要透明绘制的位图与对话框绘图相应地区的背景进行逻辑异或操作绘制到对话框上;把“掩码”位图与这个时候对话框相应地区的背景进行逻辑与的操作;重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应地区的背景进行逻辑异或操作绘制到对话框上;(8)最后把系统的画笔还给系统,删除使用过的GDIObject,开释非空的指针,最后把新建的设施描绘表也删除。CObList链表MFC类库中供给了丰富的CObList类的成员函数,此程序主要用到的成员函数以下:结构函数,为CObject指针结构一个空的列表。GetHead( ),接见链表首部,返回列表中的首元素(列表不可以为空)。AddTail( ),在列表尾增添一个元素或另一个列表的全部元素。RemoveAll( ),删除列表中全部的元素。GetNext( ),返回列表中尾元素的地点。GetHeadPosition( ),返回列表中首元素的地点。RemoveAt( ),从列表中删除指定地点的元素。GetCount( ),返回列表中的元素数。在文件中申明各游戏对象与游戏对象链表:(1)资源视图下,增添Dialog对话框。而后增添使用到的控件,并改正控件的ID便于后边的使用。(2).为对话框增添类,在对话框模式下,点击项目,增添类。(3).在类视图中,为对话框类增添成员变量(控件变量)。设置变量的名称、种类、

以最值等信息。(4).在资源视图菜单中,选择相应的菜单项,右击增添时间监听程序,设置函数办理程序名称。(5).在办理程序函数中增添相应的信息。整体设计与详尽设计系统模块区分该飞机大战游戏程序分为游戏背景位图绘制模块、各游戏对象绘制模块、游戏对象之间的碰撞模块、爆炸成效产生模块、游戏界面输出玩家得分关卡信息模块。此中在游戏对象绘制模块中,

战机是独一对象,在游戏开始时产生该对象,

给予其固定的生命值,当其与敌机对象、敌机炸弹碰撞时使其生命值减一,直至生命值为零,

便删除战机对象。敌机对象与敌机炸弹对象的绘制中采纳准时器技术,

准时产生。爆炸对象初始化为空,当游戏过程中即时发生碰撞时,在碰撞地点产生爆炸对象,增添到爆炸链表中。主要功能模块系统对象类图CGameObject是各个游戏对象的抽象父类,继承自CObject类,其余的类:战机类、敌机类、爆炸类、子弹类、炸弹类、文字类都继承了此类。每个游戏对象类中既继承了来自父类CGameObject的属性,又有自己的特有属性和方法。系统主程序活动图系统部分流程图该飞机大战游戏履行流程图:炮弹碰撞敌机玩家得分否进入下一关是游戏初始化

开始初始化游戏否子弹碰撞战机是战机生命减少否生命值为0是结束游戏结束利用准时器准时产生敌机并绘制敌机流程图开始是战机战亡准时器准时产生敌机并增添到敌机链表中否监听敌机链表中是否有敌机是结束游戏获得敌机在链表中的地点是判断敌机是否出界否移除链表绘制敌机产生子弹结束编码实现绘制游戏背景位图程序CDC*pDC=GetDC( );<||enemy->GetPoint( ).x>||enemy->GetPoint( ).y<||enemy->GetPoint( ).y>{(posEn_t);deleteenemy;}+17,enemy->GetPoint( ).y+30,enemy->GetMotion( ));(ball);}<||ball->GetPoint( ).x>||ball->GetPoint( ).y<||ball->GetPoint( ).y>{(posball_t);deleteball;}<myplane->SetPoint(myplane->GetPoint( ).x,;elsemyplane->SetPoint(myplane->GetPoint( ).x,(myplane->GetPoint( ).y-speed));},myplane->GetPoint( ).y,1);(BombOne);CBomb*BombTwo=newCBomb(myplane->GetPoint( ).x+35,myplane->GetPoint( ).y,1);(BombTwo);PlaySound((LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle( ),SND_RESOURCE|SND_ASYNC);},myplane->GetPoint( ).y,1);PlaySound((LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle( ),SND_RESOURCE|SND_ASYNC);(BombOne);CBomb*BombTwo=newCBomb(myplane->GetPoint( ).x+35,myplane->GetPoint( ).y,1);(BombTwo);}}飞机大战游戏对象之间的碰撞实现本飞机大战游戏中的碰撞考虑了飞机子弹打中敌机、敌机炸弹打中战机、战机与敌机相撞、敌机炸弹与战机子弹相撞四种状况,依据游戏对象的矩形地区能否有交错,而确认二者能否相撞,而产生爆炸对象,增添到爆炸链表中。以战机与敌机相撞为例:if(myplane!=NULL&&is_Pause==0){POSITIONenemyPos,enemyTemp;for(enemyPos=( );(enemyTemp=enemyPos)!=NULL;){enemy=(CEnemy*)(enemyPos);+18,enemy->GetPoint( ).y+18);PlaySound((LPCTSTR)IDR_WAVE,AfxGetInstanceHandle( ),SND_RESOURCE|SND_ASYNC);(explosion);项目程序测试战机挪动及子弹发射模块测试用例预期结果实质结果问题描绘改正方案点击A键或鼠标左移战机向左挪动战机向左挪动点击D键或鼠标右移战机向右挪动战机向右挪动点击W键或鼠标上移战机向上挪动战机向上挪动点击S键或鼠标上移战机向下挪动战机向下挪动敌机及炸弹模块测试用例预期结果实质结果问题描绘改正方案玩家得分<50(未敌机只从上方飞出,速度固定敌机只从上方飞经过第一关)出,速度固定玩家得分>50(通敌机从上下双方向均可飞出,敌机从上下双方过第一关后)且速度不停增添向均可飞出,且速度不停增添爆炸模块测试用例预期结果实质结果问题描绘改正方案战机子弹打中敌机敌机地点处爆炸,敌敌机地点处爆炸,敌机机消逝,战机生命-1消逝,战机生命-1敌机炸弹打中战机战机地点处爆炸,战战机地点处爆炸,战机机生命-1生命-1敌机战机相撞敌机地点处爆炸,敌敌机地点处爆炸,敌机机消逝,战机生命-1消逝,战机生命-1战机子弹与敌机炸敌机炸弹处爆炸,子敌机炸弹处爆炸,子弹弹相撞弹与炸弹均消逝消逝与炸弹均消逝消逝战机生命值==0战机消逝,GameOver战机消逝,GameOver或许过关或许过关实训中碰到的主要问题及解决方法(1)因为对C++的面向对象的思想和逻辑思路不熟习,不理解此中的封装之类的以及多态的思想,以致开始真实的进入实训接触到项目时没有开发思路,经过逐渐查问书本整理C++面向对象编程思路,才逐渐理清项目的开发步骤。(2)本飞机大战的游戏要求使用链表实现各游戏对象的储存和开释,因为链表知识掌握的不坚固,使用起来老是出现这样那样的错误,给整个游戏开发带来了很大的阻碍,经过不停的调试改正,最后使程序正确运转。3)在绘制各样游戏对象—敌机和敌机炸弹时,开始使用随机函数,画出敌机时而很少,老是打不到预约的成效,此后经过改正使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论