您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 飞机大战游戏设计与实现
1程序设计综合实践报告姓名学号班级项目名称飞机大战游戏设计与实现实习地点计算机实验室实习时间2015-12-9至2015-12-19实习成绩指导教师签字信息科学与工程学院2015年12月20日2目录1.概述..................................................11.1关卡设置..........................................11.2敌机设置..........................................11.3战机设置..........................................11.4游戏设置..........................................12.相关技术..............................................22.1Windows定时器技术.................................22.2双缓冲技术........................................22.3获取矩形区域......................................23.总体设计与详细设计....................................23.1系统模块划分......................................23.2主要功能模块......................................34.编码实现..............................................44.1初始准备..........................................44.2战机对象..........................................64.3敌机对象..........................................74.4道具对象..........................................94.5主要内容.........................................104.6窗口显示信息.....................................175.实训中遇到的主要问题及解决方法.......................205.1产生中断及解决方案...............................2035.2图片闪烁问题及解决方案...........................206.实训体会.............................................2011.概述项目:飞机大战主要功能有以下几点:1.1关卡设置本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。1.2敌机设置小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。当小boss被战机的子弹击中或与战机相撞时失去5滴血。当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss消失。小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。大boss则在屏幕中随机走动不出屏幕,直至血量为0消失。1.3战机设置战机初始有五条生命,每条命的血量为50,所获得的积分以及其生命值、血条都在窗口的左上角显示。在第一、二关时,按空格键战机会出现两个向上发射的炮弹,到第三、四关的时候,按空格键战机会发射三个不同方向的炮弹。战机吃到药瓶道具时血量会增加20,但不可以超过50;吃到闪电道具时,便可放大招,放大招的次数为15。当战机被敌方的炮弹击中或与敌方相撞时,血量减少,减少为0时生命值减1,直至生命值为0。1.4游戏设置进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。根据积分情况进入不同的关卡。游戏通关时屏幕清空,并显示通关成功,按Y可重新开始游戏。当战机的血量以及生命值为0时,游戏失败,屏幕清空并显示游戏结束,按Y即可重新开始游戏。22.相关技术2.1Windows定时器技术Windows定时器是一种输入设备,它周期性地在每经过一个指定的时间间隔后就通知应用程序一次。程序将时间间隔告诉windows,然后windows给你的程序发送周期性发生的WM_YIMER消息以表示时间到了。本程序在OnCreate()函数中使用了编号为1的定时器,控制了每30毫秒刷新一次。2.2双缓冲技术在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样即可解决图片闪烁问题。本程序在绘制滚动背景以及飞机,敌机等中用到了该技术。2.3获取矩形区域用CRect定义一个对象,利用这个对象得到要用到的矩形区域,用IntersectRect函数来判断两个源矩形是不是有重合的部分。3.总体设计与详细设计3.1系统模块划分飞机大战游戏主要模块可以说是有几个重要的类组成的。首先是老师给出的CGameObject类,以及在其派生下的Bomb,Ball,Enemy,MyPlane,Explosion,AddBlood等等此处不一一列举。另外还有CObject派生的BackGround类。如下图:33.2主要功能模块主要功能是在飞机大战View类中,OnTimer函数中实现,将各个类调用,随机产生敌机,子弹的输出,爆炸的实现等等。它的实现图可以如下实现:启动程序游戏初始化初始化游戏对象初始化绘图环境绘制游戏对象碰撞运算积分判断游戏是否结束本程序所包含的功能和类模块:游戏子系统模块名称功能简述应用程序对象游戏程序的加载、游戏对象的绘制、玩家的键盘事件获取游戏对象各个游戏对象的抽象父类(CGameObject)战机对象战机类(MyPlane)敌机对象敌机类(Enemy,LittleBoss,Boss)4导弹对象导弹类(Bomb,Bomb2)炸弹对象炸弹类(Ball,BossBall)爆炸对象爆炸类(Explosion)道具对象道具类(AddBlood,AddBomb)4.编码实现4.1初始准备模块名称应用程序对象功能描述游戏程序的加载、游戏对象的绘制、玩家的键盘事件获取数据结构与算法CflyfightView::CflyfightView(){//TODO:在此处添加构造代码flag=0;flag2=0;level=1;bossblood=100;}CflyfightView::~CflyfightView(){}BOOLCflyfightView::PreCreateWindow(CREATESTRUCT&cs){//TODO:在此处通过修改//CREATESTRUCTcs来修改窗口类或样式returnCView::PreCreateWindow(cs);}//CflyfightView绘制voidCflyfightView::OnDraw(CDC*pDC){CflyfightDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;//TODO:在此处为本机数据添加代码}//CflyfightView打印BOOLCflyfightView::OnPreparePrinting(CPrintInfo*pInfo){//默认准备returnDoPreparePrinting(pInfo);}voidCflyfightView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)5{//TODO:添加额外的打印前进行的初始化过程}voidCflyfightView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:添加打印后进行的清理过程}//CflyfightView诊断#ifdef_DEBUGvoidCflyfightView::AssertValid()const{CView::AssertValid();}voidCflyfightView::Dump(CDumpContext&dc)const{CView::Dump(dc);}CflyfightDoc*CflyfightView::GetDocument()const//非调试版本是内联的{ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CflyfightDoc)));return(CflyfightDoc*)m_pDocument;}#endif//_DEBUG//CflyfightView消息处理程序intCflyfightView::OnCreate(LPCREATESTRUCTlpCreateStruct){if(CView::OnCreate(lpCreateStruct)==-1)return-1;//TODO:在此添加专用代码和/或调用基类PlaySound((LPCTSTR)IDR_WAVE1,AfxGetInstanceHandle(),SND_RESOURCE|SND_ASYNC|SND_LOOP);SetTimer(1,30,0);CMyPlane::LoadImage();CEnemy::LoadImage();CExplosion::LoadImage();CBomb::LoadImage();CBall::LoadImage();CAddBlood::LoadImage();CAddBomb::LoadImage();CBomb2::LoadImage();CLittleBoss::LoadImage();CBoss::LoadImage();6CBossBall::LoadImage();return0;}voidCflyfightView::OnKeyUp(UINTnChar,UINTnRepCnt,UINTnFlags){//TODO:在此添加消息处理程序代码和/或调用默认值if(nChar==VK_DOWN||VK_UP)myPlane.SetVerMotion(0);if(nChar==VK_RIGHT||VK_LEFT)myPlane.SetHorMotion(0);CView::OnKeyUp(nChar,nRepCnt,nFlags);}补充说明4.2战机对象模块名称战机对象功能描述战机移动、战机导弹的发射数据结构与算法shortkey=GetKeyState(VK_RIGHT);shortkey1=GetKeyState(VK_LEFT);shortkey2=GetKeyState(VK_UP);shortkey3=GetKeyState(VK_DOWN);if((key&0x80)!=0)myPlane.SetHorMotion(1);elseif((key1&0x80)!=0)myPlane.SetHorMotion(-1);elseif((key2&0x80)!=0)myPlane.SetVerMotion(-1);elseif((key3&0x80)!=0)myPlan
本文标题:飞机大战游戏设计与实现
链接地址:https://www.777doc.com/doc-2018168 .html