飞机大战实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1. 概述..................................................
1. 概述
这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。
实现的主要功能:
1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。
2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射子
弹数量增加。
3.战机起始十条命,可以通过过关和吃到道具增加血量。
4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss
会有分数加成。
5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高
等级。
2. 相关技术
碰撞检测
用CRect类的GetRect()函数可以获得当前对象的矩形区域, IntersectRect()并用此函数判断二者是否碰撞。
CObList链表
这个程序使用CObList链表来存储各效果。CobList类似于一个双向链表,POSITION 类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。
本程序中主要用到的函数有:
GetHeadPosition():获取链表首元素的POSITION;
AddTail():将新的元素添加到链表最后;
GetNext( POSITION& rPosition ):使rPosition指向下一个元素。
设置定时器
SetTimer()函数来设置定时器。
背景滚动
为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。
内存释放技术
这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。
3. 总体设计与详细设计
系统模块划分
主要功能模块
4. 编码实现
{
{
}
}
}}
ddTail(new CEnemy);
}
nCreator--;
ddTail(new Cda);
count++;
}
ddTail(new Cshengming);
count++;
}
ddTail(new Cboss);
bxt = 1;bn++;
}
if (level == 2&&bn==0&&count>=50&&count<=52) {
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;bn++;
}
if (level == 3&&bn==0&&count>=75&&count<=77) {
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;bn++;
}
if (level == 4&&bn==0&&count>=100&&count<=102) {
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;bn++;
}
if (level == 5&&bn==0&&count>=150&&count<=152) {
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;
bn++;
}
if (level>5&&count%200==0&&bn==0)
{
m_ObjList[enboss].AddTail(new Cboss);
bxt = 1;bn++;
}
if (m_pMe == NULL)
return;
ddTail(new CBomb + 20, + 10));
}
if (level == 2 && wu == 0)
{
m_ObjList[enBomb].AddTail(new CBomb + 10, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 30, + 30));
}
if (level == 3 && wu == 0)
{
m_ObjList[enBomb].AddTail(new CBomb + 10, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 30, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 20, + 30)); }
if (level >= 4 && wu == 0)
{
m_ObjList[enBomb].AddTail(new CBomb + 10, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 30, + 30));
m_ObjList[enBomb].AddTail(new CBomb + 20, + 30));
m_ObjList[enBomb].AddTail(new CBomb , + 30));
m_ObjList[enBomb].AddTail(new CBomb + 40, + 30));