logo资料库

程序设计综合实践报告 - 飞机大战.doc

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
1. 概述
2. 相关技术
2.1 透明贴图函数
2.2 CObList链表
2.3获取矩形区域函数
2.4添加背景音乐函数
2.5弹出对话框函数
2.6屏幕滚动函数
2.7键盘控制战机位置的函数
2.8设置定时器
2.9双缓冲技术
2.11 内存释放技术
3. 总体设计与详细设计
3.1 系统模块划分
3.2 主要功能模块
3.3 扩展功能设计思路
4. 编码实现
4.1游戏各项数值初始化
4.2定时器
4.3滚动背景
4.4键盘控制函数
4.5文字显示
4.6敌机对象定时产生子弹代码
4.7爆炸效果代码
4.8判断两个物体是否相交代码
4.9显示导弹代码
4.10重新开始或者结束游戏游戏代码
4.11 boss类代码
4.12 追踪子弹类代码
4.13 保护膜类代码
4.14 加速大招类代码
4.15 爆炸类代码
4.16 战机类代码
4.17 敌机类代码
4.18 敌机子弹类代码
4.19 战机导弹类代码
4.20 生命补给箱类代码
5. 实训中遇到的主要问题及解决方法
6. 实训体会
目 录 程序设计综合实践报告.......................................... 错误!未定义书签。 1. 概述........................................................................................................ 3 2. 相关技术................................................................................................3 2.1 透明贴图函数.............................................................................3 2.2 CObList 链表................................................................................4 2.3 获取矩形区域函数........................................................................4 2.4 添加背景音乐函数........................................................................4 2.5 弹出对话框函数............................................................................4 2.6 屏幕滚动函数................................................................................5 2.7 键盘控制战机位置的函数............................................................5 2.8 设置定时器....................................................................................5 2.9 双缓冲技术....................................................................................5 2.11 内存释放技术.............................................................................5 3. 总体设计与详细设计............................................................................6 3.1 系统模块划分...............................................................................7 3.2 主要功能模块...............................................................................7 3.3 扩展功能设计思路.......................................................................8 4. 编码实现................................................................................................8 4.1 游戏各项数值初始化....................................................................8 4.2 定时器............................................................................................8 1
4.3 滚动背景........................................................................................8 4.4 键盘控制函数................................................................................9 4.5 文字显示......................................................................................10 4.6 敌机对象定时产生子弹代码..................................................... 10 4.7 爆炸效果代码..............................................................................11 4.8 判断两个物体是否相交代码......................................................11 4.9 显示导弹代码..............................................................................11 4.10 重新开始或者结束游戏游戏代码........................................... 12 4.11 boss 类代码..............................................................................12 4.12 追踪子弹类代码.......................................................................13 4.13 保护膜类代码...........................................................................14 4.14 加速大招类代码.......................................................................15 4.15 爆炸类代码...............................................................................16 4.16 战机类代码...............................................................................16 4.17 敌机类代码...............................................................................18 4.18 敌机子弹类代码.......................................................................19 4.19 战机导弹类代码.......................................................................19 4.20 生命补给箱类代码...................................................................20 5. 实训中遇到的主要问题及解决方法................................................. 21 6. 实训体会..............................................................................................22 2
1. 概述 此次实训主要是用 MFC 做一个飞机大战的小型电脑游戏,我实现的主要功能为:实现游 戏对象的技能特效,保护膜特效,爆炸特效、背景音乐特效、生命属性掉落物和 boss 及其 boss 技能特效,背景滚动特效,关卡,游戏结束返归弹框,其主要是遵循一定的游戏规则 进行游戏。 游戏中的主要角色可分为如下几个基本部分:战机、敌机、战机的导弹、敌机的子弹。 Boss,boss 追踪导弹、生命补给箱、保护膜其主要遵循的游戏规则为:战机数量为 1;由玩 家通过键盘控制(方向键控制位置、空格键发射导弹、ctrl 键开启保护膜,shift 使用加速 技能)战机;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机被炸毁, 导弹消失,玩家得分;自身撞击敌机自身与敌机均爆炸;由计算机控制敌机自动向战机发动 攻击;敌机数量随机但随关卡增加,发射子弹速度随机,随关卡难度增加;敌机从游戏区域 的上端进入,左右位置随机;敌机行驶期间,不左右移动,不反向移动;子弹运行线路为直 线,或从下至上,不可左右移动。纵向由发射位置起至游戏区域结束;炸弹遇到战机时发生 爆炸,战机生命减一,到 0 炸毁结束,炸弹消失,游戏结束;中途会有掉落物增加生命值, 可左右移动,上下速度随机,boss 循环出现,到屏幕中央开始发射追踪导弹,一直向我方 逼近,可射击导弹,导弹不会自己消失,boss 追踪炸弹运行时有速度限制。 2. 相关技术 此次实训的飞机大战游戏其中的技术主要就是一些函数、内存释放,背景滚动和双缓冲 技术。 2.1 透明贴图函数 此次实训中用于贴图的函数: static CImageList m_Images; CGameObject::LoadImage(m_Images, IDB_boss, RGB(0, 0, 0), BOSS_WIDTH, BOSS_HEIGHT, 1); //此函数主要用于将图片放入图像链表 imageList 中。 return m_Images.Draw(pDC, 0, m_ptPos, ILD_NORMAL); // 此 函 数 主 要 是 讲 img_Bomb1 链表中的图像显示在 pDC 这个句柄中。其中主要就是 CImageList 图像列表。它 是相同大小图像的一个集合,每个集合中均以 0 为图像的索引序号基数,图像列表通常由大 3
图标或位图构成,其中包含透明位图模式。可以利用 WINDOWS32 位应用程序接口函数 API 来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。 2.2 CObList 链表 CObList Enemylist; //主要是定义一个 CObList 类的一个链表对象用于存储所有的 此种相关的对象,易于后续的添加删除和提取数据。 POSITION posEN = Enemylist.GetHeadPosition(), tmp_posEN = NULL;//定义指针, 读取头结点 while (posEN != NULL) CEnemy *ene = (CEnemy *)Enemylist.GetNext(posEN);//指针读取下一个结 点 2.3 获取矩形区域函数 CRect rc; //定义 GetClientRect(&rc); //获取其矩形区域 获取结果课为:rc.Width() //矩形区域 rc.Height() //矩形区域的高度 CRect tmpRect; tmpRect.IntersectRect(&bRect,eRect))//判断两个矩形是否有交接 2.4 添加背景音乐函数 PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC | SND_LOOP);; //此函数用于将 ID 为 IDR_WAVE1 的音频在执行此语句时进行播 放并循环。 2.5 弹出对话框函数 if (AfxMessageBox(L"GAME OVER! whether to retry?", MB_YESNO) == 6)//此函 数主要是弹出对话框供用户进行选择,当用户点击确定按钮时执行此函数的{}内的语句进行 继续运行。 4
2.6 屏幕滚动函数 ppDC.BitBlt(0, run, rect.Width(), rect.Height() - run, &cdcbk, 0, 0, SRCCOPY); ppDC.BitBlt(0, 0, rect.Width(),run, &cdcbk, 0, rect.Height()-run, SRCCOPY);//滚屏 2.7 键盘控制战机位置的函数 void CPlaneFightView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)// 用于键盘控制其位置 其中 GetKey(int nVirtKey) 用于使键盘更加的灵活课进行粘连。 2.8 设置定时器 定时器告诉 WINDOWS 一个时间间隔,然后 WINDOWS 以此时间间隔周期性触发程序。通常 有两种方法来实现:发送 WM_TIMER 消息和调用应用程序定义的回调函数。 SetTimer(1,150,NULL); //设置每 150 毫秒刷新一次 KillTimer(1);//释放定义的定时器 2.9 双缓冲技术 关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟 的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。 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,RGB(255,255,255)); 2.11 内存释放技术 在此次实训项目中有太多的对象的生成和运用,造成了内存的极度的紧张,当游戏进行 到一定的程度的时候就会出现内存溢出现象。解决此问题的技术就是内存释放。内存释放技 术 的 实 现 主 要 是 通 过 释 放 各 个 满 足 一 定 条 件 的 对 象 和 链 表 来 实 现 的 , pDoc->m_ObjListBomb.RemoveAt(tmp_BB);用于删除指针 5
delete bb;用于删除对象 3. 总体设计与详细设计 (介绍游戏的功能模块划分,主要类图) 总体设计主要课将其分为两大部分:规则子系统,游戏对象子系统。 系统的总体结构图如下: 规则子系统主要是实现飞机大战各项游戏规则。实现需求中的游戏规则,组成结构图如 下: 主要是实现敌机战机的攻击和反攻的游戏规则等来实现计算机方和玩家进行对战。 1、主要的攻击规则如下: 1)、敌机可以发射子弹,子弹打中战机战机如果死亡发生爆炸效果 2)、boss 机可以发射追踪子弹,必须打中子弹才能消失 3)、以上被打中生命都减一 2、主要的碰撞规则如下: 1)、导弹或者子弹本身的矩形区域和敌机或者战机的矩形区域相交时,表示其相互发生 碰撞表示其相互爆炸。根据实战规则销毁游戏对象。 2)、战机生命为 0,战机被炸,战机被销毁,游戏结束。 3)、boss 机追踪子弹被炸毁,将其进行销毁同时进行分数的相应的增加。 4)、敌机与战机机体碰撞生命值急速归零,游戏结束。 3、主要时间控制规则如下: 1)、敌机和 boss 机都是定时产生子弹,定时的时间随机。 2)、屏幕中生命补给箱如果过少,也定时产生。 游戏对象子系统主要包括:应用程序对象和游戏对象 4、应用程序对象: 1)、游戏程序的加载 2)、游戏对象的绘制 3)、游戏规则的调用 4)、玩家键盘鼠标事件的获取 5、游戏对象: 1)、各游戏对象的图像加载 6
2)、各游戏对象的贴图 3)、各游戏对象的位置存储 3.1 系统模块划分 系统模块划分主要分为如下表中的几个模块: 游戏规则子系统 模块名称 人工智能 游戏子系统 模块名称 应用程序对象 游戏对象 战机对象 敌机对象 导弹对象 炸弹对象 爆炸对象 文字对象 人机对战规则的实现 功能简述 功能简述 游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事 件获取 各个游戏对象的抽象父类 战机类 敌机类 导弹类 炸弹类 爆炸类 文字类 保护膜对象 保护膜类 生命补给箱对象 Boss 对象 追踪导弹对象 生命补给箱类 Boss 类 追踪导弹类 加速大招对象 加速大招类 3.2 主要功能模块 主要功能模块主要就是那些类的功能模块,主要有: 1、各个游戏对象的贴图模块 2、敌机数量、方向、速度以及子弹的数量、方向和速度控制模块。 3、战机的导弹的数目、方向和速度控制模块。 4、战机的键盘控制位置模块。 5、敌机、子弹和战机、导弹的碰撞检测以及爆炸模块。 6、背景添加模块。 7、战机速度控制、发射导弹速度控制模块。 8、游戏关卡游戏难易度设置和游戏关卡选择。 9、游戏得分和生命值控制以及游戏关卡进入控制和游戏结束。 10、boss 导弹的添加移动控制模块 11、大招的使用计数模块 12、保护膜的载入使用模块 7
3.3 扩展功能设计思路 本次实训由于时间问题还有些扩展功能可进行增加,主要有: 1 给自己战机增加升级功能,变为更强大的战机。 2、给游戏增加小型爆炸音效和获得物品音效。 3、增加中途暂停功能。 4. 编码实现 此次实训的主要编码主要为: 4.1 游戏各项数值初始化 int CPlaneFightView::OnCreate(LPCREATESTRUCT lpCreateStruct) 4.2 定时器 void CPlaneFightView::OnTimer(UINT_PTR nIDEvent) 4.3 滚动背景 if (run >= rect.Height()) run=0; run++; CBitmap bmp; ppDC.CreateCompatibleDC(pDC); bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); CBitmap *pOldBit = ppDC.SelectObject(&bmp); CBitmap bitbk; if(myPlane.my_level!=1) bitbk.LoadBitmapW(IDB_bk_2); else bitbk.LoadBitmapW(IDB_bk_1); BITMAP bmp2; bitbk.GetBitmap(&bmp2); CDC cdcbk; cdcbk.CreateCompatibleDC(&ppDC); CBitmap *old = cdcbk.SelectObject(&bitbk); ppDC.StretchBlt(0, 0, rect.Width(), rect.Height(), &cdcbk, 0, 0, 8
分享到:
收藏