飞机大战实训报告.docx

上传人:lao****ou 文档编号:870346 上传时间:2024-07-02 格式:DOCX 页数:17 大小:93.92KB
下载 相关 举报
飞机大战实训报告.docx_第1页
第1页 / 共17页
飞机大战实训报告.docx_第2页
第2页 / 共17页
飞机大战实训报告.docx_第3页
第3页 / 共17页
飞机大战实训报告.docx_第4页
第4页 / 共17页
飞机大战实训报告.docx_第5页
第5页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《飞机大战实训报告.docx》由会员分享,可在线阅读,更多相关《飞机大战实训报告.docx(17页珍藏版)》请在第一文库网上搜索。

1、程序设计综合实践实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目:飞机大战游戏的设计与实现二、实习时间:18周19周实习地点:三、实习任务:1 .基本功能要求:&机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术等技术实现战机(玩家)和敌机(计算机)对战功能2 .扩展功能:在完成基本功能基础上可以增加双人对战、游戏积分制、声音效果、多种子弹类型、客机类型、游戏关卡设计、多种类型敌机、游戏中间结果存贮等功能四、小组分工说明:自己完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日1 .概述41 .1实训项目简介42 .2实训项目功能说明42 .相

2、关技术52.1 透明贴图技术52.2 获取矩形区域并判断两个矩形区域是否相撞52.3鼠标控制我方战机52.4Windows定时器.术62.5COb1iSt链表62.6对话框的应用72.7双缓冲技术73.需求分析73.1功能需求分析71.1 2数据需求分析.73.3 行为需求分析73.4 其他需求74.总体设计与详细设计84.1 系统模块划分84.2 主要功能模块84.2.1系统主要类图84.2.2飞机大战游戏设计执行流程图81.3 扩展功能设计思路91.4 软件结构设计体会95 .编码实现101. 1绘制游戏背景位图的程序105. 2各个游戏对象的绘制106. 3我方战机位置的动态控制127.

3、 4各个游戏对象碰撞的实现138. 5游戏界面输出当前游戏信息156 .测试情况说明176 .1主要模块测试情况177 .2主要功能测试情况187 .实训中遇到的主要问题及解决方法19198 .实训收获与体会1 .概述1.1 实训项目简介本次实训项目是应用MFC编程完成一个界面简洁、运行流畅、操作简单、易于上手的飞机大战。该飞机大战项目运用的主要技术是MFC编程中的一些函数、链表、贴图技术。1.2 实训项目功能说明1.3 .1基本功能(1)设定我方战机有速度初值,可通过键盘方向键控制我方战机位置,空格键控制我方战机发射导弹。(2)游戏界面中敌机出现的位置、敌机导弹的发射是随机的,敌机有不同的速

4、度。(3)敌机以及敌机发射的导弹,一旦超出游戏界面边界,则删除出界对象。(4)敌机导弹击中我方战机、我方战机导弹击中敌机、我方战机与敌机碰撞均会产生爆炸效果。并且产生爆炸效果后,敌机、敌机导弹、我方战机、我方战机导弹消失,我方战机生命值减一,得分加五分。1.2.2附加功能(1)为游戏界面添加了背景图片。(2)为游戏设置积分制,每击落一架敌机或与敌机相撞得分加5分。(3)敌机从游戏界面上界和下界随机飞出。(4)为游戏设置关卡制,每得分增加IOO分自动进入下一关,每进入新的一关,通过减缓我方战机速度来逐渐增加游戏难度。(5)添加无敌模式,当得分达到IoOO分后,按“Z”键即可开启无敌模式。开启无敌

5、模式后,我方战机生命值增加到999,并且被敌方战机击中或与敌方战机相撞生命值不减少,击落敌机分数继续增加。(6)游戏界面显示当前游戏信息,游戏界面左上角分别显示“我的分数、战机生命值、开启无敌模式还需杀敌的数量、关数,右上角显示”是否开启了无敌模式”,当达到开启无敌模式的条件后,右上角显示“按Z键开启无敌模式”,开启无敌模式后,右上角变为“无敌模式已开启”,右下角显示开启无敌模式需达到的条件,当每进入新的一关,游戏界面中心显示“玩的不错,进入第X关”。(7)增加尿标左键控制我方战机发射导弹的功能。(8)当我方战机炸毁后,弹出对话框提示玩家是否重新开始游戏。2 .相关技术2.1 透明贴图技术绘制

6、透明位图的关键就是创建一个“掩码”位图(maskbitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。(1) DDB可以用MFC中的CBit1naP来表示,而DDB一般储存在资源文件中,在加载时只需通过资源ID号就可以将图形装入。(2) BOO1CBitmap:I1oadBitmap(UINTnIDResource)可以装入指定DDB,但是在绘制时必须借助另一个和当前绘图DC兼容的内存DC来进行。(3) 通过CDC:BitB1TO绘制图形,同时指定光栅操作的类型。2.2 获取矩形区域并判断两个矩形区域是否相撞首先,使用CReCt定义一个对象,然后使用GetReCt(&对

7、象名)函数,获取界面的矩形区域rect.Wid1hO为矩形区域的宽度,rect.Heigh1O为矩形区域的高度。使用InterSeCtRCCt(&,&)函数来判断两个源矩形是否有重合的部分。如果有不为空,则返回非零值;否则,返回0。2. 3鼠标控制我方战机WM_1BUTT0ND0WN(鼠标左键被按下)对应的函数为On1BUttOnDOWn(UINTnF1ags,CPointpoint)当鼠标左键被按下时,我方战机两翼开始发射导弹。voidCP1aneGameView:On1ButtonDown(UINTnF1ags,CPointpoint)(/TODO:在此添加消息处理程序代码和/或调用默认值

8、CView:IOn1ButtonDown(nF1ags,point);if(is_Pause=0)(CBomb*BombOne=newCBomb(myp1ane-GetPoint().x+10,myp1ane-GetPointO.y+35,1);1istBomb.AddTai1(BombOne);CBomb*BombTwo=newCBomb(myp1ane-GetPoint().x+70,myp1ane-GetPointO.y+35,1);1istBomb.AddTai1(BombTwo);)2.4 Windows定时器技术Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间

9、隔后就通知应用程序一次。程序将时间间隔告诉Windows,然后WindoWS给您的程序发送周期性发生的WUjriMER消息以表示时间到了。本程序中使用多个定时器,分别控制不同的功能。在MFC的AP1函数中使用SetTinICr()函数设置定时器,设置系统间隔时间,在OnTimer()函数中实现响应定时器的程序。2.5 COb1iSt链表MFC类库中提供了丰富的COb1ist类的成员函数,在CP1aneGameView.h文件中声明各游戏对象与游戏对象链表:(1)创建各游戏对象:创建各游戏对象CMyP1ane*myp1ane;CEnemy*enemy;CBomb*bomb;CBa11*ba11;

10、CExp1osion*exp1osion;(2)创建储存各游戏对象的游戏链表:创建存储游戏对象的对象链表COb1ist1istEnemy;COb1ist1istMo;COb1ist1istBomb;COb1ist1istBa11;COb1ist1istPeop1e;COb1ist1istExp1osion;2. 6对话框的应用当我方战机炸毁时,弹出是否重新开始游戏的对话框。对话框的应用过程如下:(D资源视图下,添加Dia1Og对话框。然后添加使用到的控件,并修改控件的ID。(2)为对话框添加类,在对话框模式下,点击项目,添加类。(3)在类视图中,为对话框类添加成员变量(控件变量)。设置变量的名

11、称、类型、最值等信息。(4)在资源视图菜单中,选择相应的菜单项,右击添加时间监听程序,设置函数处理程序名称。(5)在处理程序函数中添加相应的信息。2.7双缓冲技术当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。双缓冲实现过程如下:1、在内存中创建与画布一致的缓冲区2、在缓冲区画图3、将缓冲区位图拷贝到当前画布上4、释放内存缓冲区3 .需求分析 3.1功能需求分析基本功能:键盘控

12、制战机移动、发射导弹,战机、敌机爆炸拓展功能:游戏界面背景,鼠标控制战机发射导弹,积分制,过关制,对话框弹出,无敌模式 3.2数据需求分析我的分数、战机生命值、击落敌机数目、关数实时显示。 3.3行为需求分析键盘方向键控制战机移动,空格键控制战机发射导弹,鼠标左键控制战机发射导弹,键位之间互不冲突,战机移动不卡顿。 3.4其他需求游戏界面简洁,游戏操作简单易于上手。4 .总体设计与详细设计4.1 系统模块划分游戏系统模块模块名称功能简介应用程序对象游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取我方战机对象战机类敌机对象敌机类我方战机导弹对象我方战机导弹类敌机炸弹对象敌机炸弹

13、类爆炸对象爆炸类4.2 主要功能模块4.2.1系统主要类图4.2.2飞机大战游戏设计执行流程图(开始).除实现最基本的人工智能对战功能之外,还增加人性化的设计,使游戏的可玩性更高。4.3扩展功能设计思路1、为游戏添加背景,是游戏更加美观。2、为使画面更能实时显示当前游戏信息,为游戏界面添加“我的分数”、“战机生命”、“关数”等实时变化的信息。3、为使游戏更具可玩性,为游戏添加无敌模式。4.4软件结构设计体会软件结构设计部分是软件工程开发过程的重要部分,设计内容的好坏关系到整个软件的优劣,在这次飞机大战项目开发中,对结构设计中出现的种种问题以及解决方法,加深了对软件结构设计方法的理解,熟悉了对其

14、的应用,从宏观和细节处展示了整个软件的体系结构,使整个软件更具层次感。if(GetKeyState(VK-RIGHT)GetPointO.xrect.right)myp1ane-SetPoint(rect.1eft,myp1ane-GetPoint().y);e1semyp1ane-SetPoint(myp1ane-GetPoint().x+speed),myp1ane-GetPoint().y);)ifif(GetKeyState(VK_SPACE)GetPoint().x+10,myp1ane-GetPointO.y+35,1);1istBomb.AddTai1(BombOne);我方战机右侧炸弹CBomb*BombTwo=newCBomb(myp1ane-GetPoint().x+70,myp1ane-GetPoint().y+35,1);1istBomb.AddTai1(BombTwo);)5.4各个游戏对象碰撞的实现本飞机大战游戏中的碰撞考虑了飞机子弹打中敌机、敌机炸弹打中战机、战机与敌机相撞、三种情况,根据游戏对象的矩形区域是否有交叉,而确认两者是否相撞,而产生爆炸对象,添加到爆炸链表中。如果我方战机炸弹打中敌机if(myp1ane!=NU11/*&isPause=0*/)(POSIT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服