c++实训报告(飞机大战.doc
《c++实训报告(飞机大战.doc》由会员分享,可在线阅读,更多相关《c++实训报告(飞机大战.doc(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、实 训 报 告飞机大战游戏设计与开发专业名称:_ _班 级:_学 号:_信息科学与工程学院二零一一年十一月目 录1. 概述【一级标题,黑体,四号,加粗,顶头】42. 相关技术42.1 透明贴图函数(技术一的名称)42.2 CObList链表(技术二的名称)42.3获取矩形区域函数52.4添加爆炸效果函数52.5弹出对话框函数52.6字体的个性化输出函数52.7鼠标键盘控制战机位置的函数62.8 延迟函数62.9设置定时器62.10双缓冲技术62.11 内存释放技术63. 总体设计与详细设计73.1 系统模块划分83.2 主要功能模块93.3 扩展功能设计思路94. 编码实现94.1游戏初始创建
2、104.2定时器104.3背景设定104.4键盘控制函数114.5文字显示函数114.6游戏对象进行碰撞测试和碰撞销毁,文字提示函数124.7选择下一关卡以及选择完成后的执行代码134.8游戏结束代码144.9鼠标控制战机代码144.10重新开始游戏代码155. 实训中遇到的主要问题及解决方法156. 实训体会161. 概述【一级标题,黑体,四号,加粗,顶头】(介绍所做的项目,要实现的主要功能)【正文,五号,宋体,首行缩进2字符】此次实训主要是要做一个飞机大战的游戏,其需要实现的功能为:实现游戏对象的爆炸特效、声音特效、文字提示功能和界面背景特效,其主要是遵循一定的游戏规则进行游戏。游戏中的主
3、要角色可分为如下几个基本部分:战机、敌机、战机的导弹、敌机的子弹。其主要遵循的游戏规则为:战机数量为1;由玩家通过键盘控制(方向键控制位置、CTRL键发射导弹)战机;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机被炸毁,导弹消失,玩家得分;由计算机控制敌机自动向战机发动攻击;敌机数量随机,计算机生成敌机时随机选择类别;敌机从游戏区域的上下两端进入,左右位置随机;敌机行驶期间,不左右移动,不反向移动;当敌机到达战机下方时发射炸弹对战机进行攻击;运行线路为直线,方向为从下至上,或从下至上,不可左右移动。纵向由发射位置起至游戏区域结束;炸弹遇到战机时发生爆炸,战机被炸毁,炸弹消失,游
4、戏结束;炸弹运行时有速度限制。2. 相关技术此次实训的飞机大战游戏其中的技术主要就是一些函数、内存释放和双缓冲技术。2.1 透明贴图函数(技术一的名称)此次实训中用于贴图的函数:LoadImage(CImageList& imageList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial) /此函数主要用于将图片放入图像链表imageList中。img_Bomb.Draw(pDC,0,m_m_ptPos,ILD_TRANSPARENT) /此函数主要是讲img_Bomb1链表中的图像显示在pDC这个句柄中。ILD_TRANSPAREN
5、T表示是透明贴图。其中主要就是CImageList图像列表。它是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。2.2 CObList链表(技术二的名称)CObList m_ObjListball; /主要是定义一个CObList类的一个链表对象用于存储所有的此种相关的对象,易于后续的添加删除和提取数据。POSITION posball=NULL,posball_t=NULL; /定义指针posball=pDoc
6、-m_ObjListball.GetHeadPosition();/指针读取头结点pDoc-pball= (Cball *)pDoc-m_ObjListball.GetNext(posball); /指针读取下一个结点2.3获取矩形区域函数CRect rc; /定义GetClientRect(&rc); /获取其矩形区域 获取结果课为:rc.Width() /矩形区域的宽度rc.Height() /矩形区域的高度CRect tmpRect;tmpRect.IntersectRect(&bRect,eRect)/判断两个矩形是否有交接2.4添加爆炸效果函数PlaySound(LPCTSTR)ID
7、R_WAVE1,AfxGetInstanceHandle(),SND_RESOURCE|SND_ASYNC); /此函数用于将ID为IDR_WAVE1的音频在执行此语句时进行播放。2.5弹出对话框函数if(AfxMessageBox(L是否进入下一关?,MB_YESNO)=6)/此函数主要是弹出对话框供用户进行选择,当用户点击确定按钮时执行此函数的内的语句进行继续运行。2.6字体的个性化输出函数CString s;dcMem.SetTextColor(RGB(255,0,0);dcMem.SetBkMode(TRANSPARENT);hFont=CreateFont(50,20,0,0,100
8、,0,0,0,0,0,0,100,10,0);/*CreateFont(字体高度,字体宽度,字体显示角度,字体的角度,字体的磅值,斜体字体,带下划线的字体,带删除线的字体,所需的字符集,输出的精度,裁剪的精度,逻辑字体与输出设备的实际,字体之间的精度,字体间距和字体集,字体名称*/ dcMem.SelectObject(hFont); s.Format(_T(GAME OVER!);dcMem.TextOutW (400,200,s,10);2.7鼠标键盘控制战机位置的函数OnLButtonDown(UINT nFlags, CPoint point)/用于鼠标控制其位置OnKeyDown(U
9、INT nChar, UINT nRepCnt, UINT nFlags)/用于键盘控制其位置其中GetKey(int nVirtKey) 用于使键盘更加的灵活课进行粘连。2.8 延迟函数Sleep(1000); /此句表示系统将延迟1000毫秒。2.9设置定时器定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。SetTimer(1,30,NULL); /设置每30毫秒刷新一次2.10双缓冲技术关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次
10、性的将所有的虚拟缓存中的东西都放入实在的存储器中。CDC*pDC=GetDC();CDC dcMem;dcMem.CreateCompatibleDC(pDC);/依附窗口DC创建兼容内存DC依次,所有的图像文字均存入dcMem中,然后一次性的通过pDC-BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);将内存DC上的图像拷贝到前台dcMem.DeleteDC();bmp.DeleteObject();/pDC-SelectObject(Oldbrush);ReleaseDC(pDC);dcMem.FillSolidRect(rc,RG
11、B(255,255,255); 2.11 内存释放技术在此次实训项目中有太多的对象的生成和运用,造成了内存的极度的紧张,当游戏进行到一定的程度的时候就会出现内存溢出现象。解决此问题的技术就是内存释放。内存释放技术的实现主要是通过释放各个满足一定条件的对象和链表来实现的,pDoc-m_ObjListBomb.RemoveAt(mPos2);用于删除指针delete pDoc-Bomb;用于删除对象3. 总体设计与详细设计总体设计主要课将其分为两大部分:规则子系统,游戏对象子系统。系统的总体结构图如下:规则子系统主要是实现飞机大战各项游戏规则。实现需求中的游戏规则,组成结构图如下:主要是实现敌机战
12、机的攻击和反攻的游戏规则等来实现计算机方和玩家进行对战。1、主要的攻击规则如下:1)、敌机可在战机的上方或者下方进行将子弹进行射向战机,同时战机也可根据玩家的指示进行向上或者向下进行发射导弹进行反攻。2)、攻击时发出声音。2、主要的碰撞规则如下:1)、导弹或者子弹本身的矩形区域和敌机或者战机的矩形区域相交时,表示其相互发生碰撞表示其相互爆炸。根据实战规则销毁游戏对象。2)、战机生命为0,战机被炸,战机被销毁,游戏结束。3)、敌机或者子弹被炸毁,将其进行销毁同时进行分数的相应的增加,并且出现文字提示。4)、爆炸时发出声音。3、主要时间控制规则如下:1)、当游戏的持续时间超过特定的时间,游戏结束,
13、出现文字提示。2)、当游戏的关卡改变时进行游戏持续时间的一个相应的改变。游戏对象子系统主要包括:应用程序对象和游戏对象4、应用程序对象:1)、游戏程序的加载2)、游戏对象的绘制3)、游戏规则的调用4)、玩家键盘鼠标事件的获取5、游戏对象:1)、各游戏对象的图像加载2)、各游戏对象的贴图3)、各游戏对象的位置存储3.1 系统模块划分系统模块划分主要分为如下表中的几个模块:游戏规则子系统模块名称功能简述人工智能人机对战规则的实现游戏子系统模块名称功能简述应用程序对象游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取游戏对象各个游戏对象的抽象父类战机对象战机类敌机对象敌机类导弹对象导
14、弹类炸弹对象炸弹类爆炸对象爆炸类文字对象文字类其简单类图如下:3.2 主要功能模块主要功能模块主要就是那些类的功能模块,主要有:1、各个游戏对象的贴图模块2、敌机数量、方向、速度以及子弹的数量、方向和速度控制模块。3、战机的导弹的数目、方向和速度控制模块。4、战机的键盘控制和鼠标控制位置模块。5、敌机、子弹和战机、导弹的碰撞检测以及爆炸模块。6、背景添加模块。7、战机速度控制模块。8、游戏关卡游戏难易度设置和游戏关卡选择。9、游戏得分和生命值控制以及游戏关卡进入控制和游戏结束。10、游戏重新开始和游戏暂停控制模块。11、游戏音效控制模块。3.3 扩展功能设计思路本次实训由于时间问题还有些扩展功
15、能可进行增加,主要有:1给游戏增加敌机类型,丰富画面,增加难度2、给游戏进行增加boss,通过boss的添加进行游戏的关卡和难度的更加进一步的提升。主要思路是:再增加一个类让它继承敌机类,然后再敌机类的基础上进行增加其生命值和被打死后的得分。当战机得分到达一定的值以后boss出现并进行和敌机一个队伍发射另类的子弹进行攻击战机。3、完善暂停/重新开始/继续游戏等功能。4、设置关卡,关卡越往后,难度越大,增加游戏的挑战性4. 编码实现此次实训的主要编码主要为:4.1游戏初始创建if(GetKey(VK_RETURN)=1)pDoc-bStart=1;if(pDoc-bStart=0)dcMem.S
16、etTextColor(RGB(0,255,0);dcMem.SetBkMode(TRANSPARENT);hFont=CreateFont(80,40,0,0,0,0,0,0,0,0,0,100,10,0);dcMem.SelectObject(hFont); TextOut(dcMem,cx/2-200,200,L開始遊戲,4);dcMem.SetTextColor(RGB(0,255,0);hFont=CreateFont(60,30,0,0,0,0,0,0,0,0,0,100,10,0);dcMem.SelectObject(hFont); TextOut(dcMem,cx/2-300
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 报告 飞机 大战
限制150内