C++实训报告

上传人:mg****2 文档编号:123175788 上传时间:2020-03-08 格式:DOC 页数:27 大小:288.50KB
返回 下载 相关 举报
C++实训报告_第1页
第1页 / 共27页
C++实训报告_第2页
第2页 / 共27页
C++实训报告_第3页
第3页 / 共27页
C++实训报告_第4页
第4页 / 共27页
C++实训报告_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C++实训报告》由会员分享,可在线阅读,更多相关《C++实训报告(27页珍藏版)》请在金锄头文库上搜索。

1、.实 训 报 告飞机大战游戏设计与开发姓名* 专业名称: 数学专业班 级: * 学 号: *信息科学与工程学院二零一三年十一月.目 录1.概述22. 相关技术 22.1获取矩形区域函数22.2添加爆炸效果函数22.3弹出对话框函数32.4字体的个性化输出函数42.5键盘控制战机位置和发射子弹的函数42.6设置定时器42.7双缓冲技术52.8内存释放技术53.需求分析53.1功能需求分析53.2 数据需求分析63.3 行为需求分析64. 总体设计与详细设计 64.1系统模块划分84.2主要功能模块84.3扩展功能设计思路95. 编码实现 9 6. 测试情况说明 246.1主要模块测试情况(白盒)

2、 246.2 主要功能测试情况(黑盒)247. 实训中遇到的主要问题及解决方法 258. 实训体会 25 1. 概述飞机大战游戏是基于Windows桌面的射击类游戏。做为一个游戏首先要保证游戏本身的规则,而这个版本的一个重要的功能就是其2D的展现形式。飞机大战游戏作为PC中一款桌面游戏,界面简洁流畅、游戏方式简单,玩起来易于上手。其实现的功能为:实现游戏对象的爆炸特效、声音特效、文字提示功能和界面背景,其主要是遵循一定的游戏规则进行游戏。游戏中的主要角色可分为如下几个基本部分:战机、敌机、战机的导弹、敌机的子弹。其主要遵循的游戏规则为:战机数量为1;由玩家通过键盘控制(方向键控制位置、空格键发

3、射导弹)战机;导弹释放存在间隔,有一定的运行速度;导弹遇到敌机发生爆炸,敌机被炸毁,玩家得分;由计算机控制敌机自动向战机发动攻击;敌机数量随机,计算机生成敌机时随机选择位置;敌机从游戏区域的上下两端进入;敌机行驶期间,不左右移动,不反向移动;敌机发射炸弹对战机进行攻击,运行线路为直线,方向为从下至上,或从下至上,不可左右移动,敌机炸弹击中战机,战机生命值减1。该游戏有关卡,战机生命值减为0,游戏结束,选择是否重新开始;战机仍有生命值时,并且得到要求的分数可进入下一关。2. 相关技术此次实训的飞机大战游戏其中的技术主要就是一些函数(获取矩形区域函数、添加爆炸效果函数、弹出对话框函数、字体的个性化

4、输出函数、键盘控制战机位置和发射子弹的函数)、设置定时器、内存释放和双缓冲技术。2.1获取矩形区域函数CRect CBomb:getRect(void)return CRect(CPoint(Pos.x,Pos.y),CPoint(Pos.x+55,Pos.y+20);CRect bombRect = bomb-getRect();CRect CEnemy:getRect(void)return CRect(CPoint(Pos.x,Pos.y),CPoint(Pos.x+35,Pos.y+35);CRect enemyRect = enemy-getRect();CRect tempRect

5、;tempRect.IntersectRect(&bombRect,enemyRect)/判断两个矩形是否有交接2.2添加爆炸效果函数PlaySound(LPCTSTR)IDR_WAVE2,AfxGetInstanceHandle(),SND_RESOURCE|SND_ASYNC);/此函数用于将ID为IDR_WAVE1的音频在执行此语句时进行播放。2.3弹出对话框函数if(AfxMessageBox(LGAME OVER!重新开始?,MB_YESNO)=1)/清空敌机链表ListEnemy1.RemoveAll();ListEnemy2.RemoveAll();/清空敌机炸弹链表ListBa

6、ll1.RemoveAll();ListBall2.RemoveAll();/清空战机子弹链表ListBomb1.RemoveAll();ListBomb2.RemoveAll();/清空爆炸链表ListExplosion.RemoveAll();/添加新的战机对象/*myplane = new CMyPlane;*/myscore=0;lifeNum = 20;SetTimer(1,100,NULL);/ifelseexit(1);/此函数主要是弹出对话框供用户进行选择,当用户点击确定按钮时执行此函数的内的语句进行继续运行。2.4字体的个性化输出函数HFONT font;font=Creat

7、eFont(20,10,0,0,0,0,0,0,0,0,0,100,10,0);MemDC.SelectObject(font);CString str;MemDC.SetTextColor(RGB(239,7,7);MemDC.SetBkColor(RGB(0,0,0);str.Format(_T(游戏得分:%d),myscore);MemDC.TextOut(10,10,str);str.Format(_T(剩余生命:%d),lifeNum);MemDC.TextOut(10,30,str);str.Format(_T(当前关卡:%d),passnum);MemDC.TextOut(10,

8、50,str);2.5键盘控制战机位置和发射子弹的函数if (GetKeyState(VK_LEFT)rect.left)myplane.move(1);if (GetKeyState(VK_RIGHT)0)if(myplane.Pos.xrect.right-50)myplane.move(2);if (GetKeyState(VK_UP)rect.top)myplane.move(3);if (GetKeyState(VK_DOWN)0)if(myplane.Pos.yrect.bottom-50)myplane.move(4);if (GetKeyState(VK_SPACE)SetTi

9、mer(1,100,0); /设置每100毫秒刷新一次2.7双缓冲技术关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。/定义一个位图对象CBitmap MemBitmap;CDC MemDC;/这时还不能绘图,因为没有位图的设备描述表是不能绘图的/只有选入了位图的设备描述表才有地方绘图,画到指定的位图上MemDC.CreateCompatibleDC(pDC);/下面建立一个与屏幕设备描述表(或者内存设备描述表)兼容的位图MemBitmap.CreateCompatibleBitmap(pDC,rec

10、t.right,rect.bottom);CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);/将位图选入到内存设备描述表MemDC.StretchBlt(0,0,rect.Width(),rect.Height(),&cdc_BackGround,0,0,bimap2.bmWidth,bimap2.bmHeight,SRCCOPY);/绘图完成后的清理pDC-BitBlt(rect.left,rect.top,rect.right,rect.bottom,&MemDC,0,0,SRCCOPY);MemBitmap.DeleteObject();Me

11、mDC.DeleteDC();2.8 内存释放技术在此次实训项目中有太多的对象的生成和运用,造成了内存的极度的紧张,当游戏进行到一定的程度的时候就会出现内存溢出现象。解决此问题的技术就是内存释放。内存释放技术的实现主要是通过释放各个满足一定条件的对象和链表来实现的,/爆炸后删除子弹ListBomb1.RemoveAt(bombTemp);delete bomb;/删除敌机ListEnemy1.RemoveAt(enemyTemp);delete enemy;3. 需求分析3.1功能需求分析游戏基本规则飞机对战规则游戏特效界面背景特效游戏对象特效声音特效文字提示3.2数据需求分析 战机数量为1,敌机数量随机随机产生,当战机被击中时生命值减1,战机与敌机相撞生命值减1,战机击中敌机分数加1,战机生命值减到0时,游戏结束,生命值大于0并且分数到达一定要求时进入下一关。上方敌机、下方敌机、上方敌机的炸弹、下方敌机的炸弹、战机的两排导弹均以链表存储

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 设计及方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号