c++飞机大战实训报告 附带码(4)

2019-03-04 13:19

信息科学与工程学院软件实践实训报告

{ }

//鼠标控制战机,发射战机子弹

void CPlaneGameView::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnLButtonDown(nFlags, point); if( is_Pause == 0) {

CBomb *BombOne=new CBomb( myplane->GetPoint().x, myplane->GetPoint().y,1); PlaySound((LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnMouseMove(nFlags, point); if(is_Pause == 0)

myplane->SetPoint(point.x,point.y);

|SND_ASYNC);

ListBomb.AddTail(BombOne); CBomb

*BombTwo=new

CBomb(

myplane->GetPoint().x+35,

myplane->GetPoint().y,1); }

}

ListBomb.AddTail(BombTwo);

4.4 飞机大战游戏对象之间的碰撞实现

本飞机大战游戏中的碰撞考虑了飞机子弹打中敌机、敌机炸弹打中战机、战机与敌机相撞、敌机炸弹与战机子弹相撞四种情况,根据游戏对象的矩形区域是否有交叉,而确认两者是否相撞,而产生爆炸对象,添加到爆炸链表中。以战机与敌机相撞为例:

if(myplane != NULL&& is_Pause== 0) {

POSITION enemyPos,enemyTemp;

16

信息科学与工程学院软件实践实训报告

for(enemyPos= ListEnemy.GetHeadPosition();(enemyTemp=enemyPos)!=NULL;) {

enemy =(CEnemy *) ListEnemy.GetNext(enemyPos); //获得敌机的矩形区域

CRect enemyRect = enemy->GetRect(); //获得战机的矩形区域

CRect myPlaneRect = myplane->GetRect(); //判断两个矩形区域是否有交接 CRect tempRect;

if(tempRect.IntersectRect(&enemyRect,myPlaneRect)) { }//if

CExplosion *explosion = new CExplosion( enemy->GetPoint().x+18 , enemy->GetPoint().y + 18);

PlaySound((LPCTSTR)IDR_WAVE,AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC); ListExplosion.AddTail(explosion); //战机生命值减一 lifeNum_Me--; //删除敌机

ListEnemy.RemoveAt(enemyTemp); delete enemy; if(lifeNum_Me == 0) { }//if break;

//删除战机对象 delete myplane; myplane=NULL;

}//for

17

信息科学与工程学院软件实践实训报告

}//if

战机子弹打中敌机、敌机炸弹打中战机以及战机子弹与敌机炸弹对象的碰撞实现同上。

4.5 游戏界面输出当前信息

if(myplane != NULL&& is_Pause== 0)

{

HFONT font;

font=CreateFont(20,10,0,0,0,0,0,0,0,0,0,100,10,0); cdc.SelectObject(font); CString str;

cdc.SetTextColor(RGB(255,0,0));

str.Format(_T(\当前关卡:%d\cdc.TextOutW(10,20,str);

str.Format(_T(\当前得分:%d\cdc.TextOutW(10,40,str);

str.Format(_T(\剩余生命:%d\cdc.TextOutW(10,60,str);

}//if

if(myplane !=NULL && lifeNum_Me >0) { }

if(score_Me > 10*count_Life*pass_Num) { }

lifeNum_Me++;//生命值加1 count_Life++;//已增加生命值加1

游戏进入下一关,以及结束游戏界面设计代码与上类似。

18

信息科学与工程学院软件实践实训报告

5. 项目程序测试

5.1战机移动及子弹发射模块测试

用例 点击A键或鼠标左移 点击D键或鼠标右移 点击W键或鼠标上移 点击S键或鼠标上移 预期结果 战机向左移动 战机向右移动 战机向上移动 战机向下移动 实际结果 战机向左移动 战机向右移动 战机向上移动 战机向下移动 问题描述 修改方案 5.2敌机及炸弹模块测试 用例 玩家得分<50(未通过第一关) 玩家得分>50(通过第一关后) 预期结果 实际结果 问题描述 修改方案 敌机只从上方飞出,速度固定 敌机只从上方飞出,速度固定 敌机从上下两方向均可飞出,敌机从上下两方且速度不断增加 向均可飞出,且速度不断增加 5.3爆炸模块测试 用例 战机子弹打中敌机 预期结果 敌机位置处爆炸,敌机消失,战机生命-1 敌机炸弹打中战机 敌机战机相撞 战机位置处爆炸,战机生命-1 敌机位置处爆炸,敌机消失,战机生命-1 战机子弹与敌机炸弹相撞 战机生命值==0

敌机炸弹处爆炸,子实际结果 敌机位置处爆炸,敌机消失,战机生命-1 战机位置处爆炸,战机生命-1 敌机位置处爆炸,敌机消失,战机生命-1 敌机炸弹处爆炸,子弹 问题描述 修改方案 弹与炸弹均消失消失 与炸弹均消失消失 战机消失,GameOver或者过关 战机消失,GameOver或者过关 19

信息科学与工程学院软件实践实训报告

6. 实训中遇到的主要问题及解决方法

(1)由于对C++的面向对象的思想和逻辑思路不熟悉,不明白其中的封装之类的以及多态的思想,致使开始真正的进入实训接触到项目时没有开发思路,通过逐步查询书籍整理C++面向对象编程思路,才逐步理清项目的开发步骤。

(2)本飞机大战的游戏要求使用链表实现各游戏对象的存储和释放,由于链表知识掌握的不牢固,使用起来总是出现这样那样的错误,给整个游戏开发带来了很大的障碍,通过不断的调试修改,最终使程序正确运行。

(3)在绘制各种游戏对象—敌机和敌机炸弹时,开始使用随机函数,画出敌机时而很少,总是打不到预定的效果,后来经过修改使用定时器产生敌机和敌机炸弹,使整个游戏更加人性化。

7. 实训体会

(1)在本次飞机大战游戏项目的开发过程中遇到很多问题,大部分是因为对MFC编程的不熟悉以及链表掌握不牢固所导致的。

(2)MFC编程中有很多可以直接调用的函数,由于之前缺乏对这方面编程的经验,以至于本次项目开发过程中走了很多弯路。

(3)通过寻求老师和同学的帮助,解决了开发中遇到的很多问题,也提升了自己调试错误的能力。

(4)通过本次实训,使我熟悉了MFC编程技术、巩固了链表的使用方法并加深了对面向对象编程思想的理解,对以后程序的编写打下了良好的基础。

20


c++飞机大战实训报告 附带码(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:四川省自贡市2010届高三二诊(英语)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: