c++飞机大战实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训报告
飞机大战游戏设计与开发姓名:陆再旺
专业名称:___数字媒体技术___________班级:______2011级__________________学号:___1114____________
信息科学与工程学院
二零一三年十二月
目录
1. 项目概述 (3)
2. 相关技术 (3)
透明贴图技术 (3)
CObList技术 (3)
获取矩形区域函数 (3)
键盘控制战机位置函数 (3)
设置定时器 (4)
双缓冲技术 (4)
内存释放技术 (4)
3.总体设计与详细设计 (5)
规则子系统 (5)
游戏对象子系统 (5)
3.3 系统模块划分 (6)
主要功能模块 (7)
4. 编码实现 (7)
5. 实训中遇到的主要问题及解决方法 (11)
6. 实训体会 (14)
1.项目概述
此次实训主要是做一个飞机大战的游戏,其需要实现的功能为:实现游戏对象的爆炸特效,文字提示功能和界面背景特效,遵循游戏规则进行游戏;。
游戏中的重要角色可分为如下几个部分:战机,敌机,战机的导弹,敌机的子弹,游戏规则为:玩家通过键盘控制用一个战机去击毁从上下两端进入的尽可能多的敌机从而获得分数。敌机数量随机,进入画面对战机进行攻击,两者或战机导弹与敌机相遇是发生爆炸,战机生命结束即游戏结束。
2. 相关技术
透明贴图函数
函数原型:
LoadImage(CImageList& imageList, UNIT bmpID, COLOR crMask,int cx,int cy,int nInitial)
总体设计与详细设计
有三个主要的部分组成,分别是规则子系统、游戏对象子系统。
系统的总体结构图如下:
规则子系统
该子系统主要是实现飞机大战各项游戏规则。实现了需求中的游戏规则。
组成结构如下图所示:
这个系统包含1个重要的模块,人工智能,它实现了敌机对战机的攻击以及游戏对象碰撞监测规则,其实实现的是代表计算机方玉玩家进行对战。
攻击规则
敌机在战机上方或下方时发射炸弹,炸弹从下至上或从上至下射向战机
攻击时发出声音
碰撞规则
导弹或炸弹本身的矩形区域和敌机或战机的矩形区域相交时,表示导弹或炸弹
射中了战机或敌机
战机被炸毁,游戏结束。
敌机被炸毁,战机10分,出现文字提示。
爆炸时产生声音
游戏对象子系统
该子系统包含了各个游戏对象的实现,它实现了需求中的部分规则以及游戏特效。
本子系统的组织结构图如下:
游戏对象子系统
应用程序对象游戏对象
本子系统的组织结构图如下:
游戏对象子系统
应用程序对象游戏对象
应用程序对象
游戏程序的加载
游戏对象的绘制
游戏规则的调用
玩家的键盘事件获取
游戏对象
敌机图像加载
敌机贴图
位置存储
系统模块划分
游戏规则子系统
模块名称功能简述
人工智能人机对战规则的实现
游戏子系统
模块名称功能简述
应用程序对象游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取游戏对象各个游戏对象的抽象父类
战机对象战机类
敌机对象敌机类
导弹对象导弹类
炸弹对象炸弹类
爆炸对象爆炸类
文字对象文字类
主要功能模块
主要功能模块主要就是那些类的功能模块,主要有:
1.各个游戏对象的贴图模块
2.敌机数量、方向、速度、及子弹的数量、方向、和速度控制模块
3.战机的导弹数目,方向和速度控制模块
4.战机的键盘控制
5.敌机、子弹、和战机、导弹的碰撞检测及爆炸模块
6.背景添加模块
7.游戏得分和生命值及游戏结束控制
4. 编码实现
创建各种游戏对象类(以敌机对象为例):
文件名:
#pragma once
#include<>
#include""
#include""
class CEnemy :public CGameObject
{public:
CEnemy(void);
~CEnemy(void);
BOOL Draw(CDC* pDC,BOOL bPause);
static BOOL LoadImage();
CRect GetRect()
{return CRect(m_ptPos,CPoint+ENEMY_HEIGHT,+ENEMY_HEIGHT));}
int GetMontion() const
{ return m_nMotion;}
<=0)
(0);
else
(-1);
}
if(GetKeyState(VK_RIGHT)&0x80)
{
if().x+50>=())
(0);
else
(1);
}
if(GetKeyState(VK_UP)&0x80)
{
if().y<=0)
(0);
else
(-1);
}
if(GetKeyState(VK_DOWN)&0x80)
{
if().y+60>=())
(0);
else
(1);
}
if(GetKeyState(VK_SPACE)&0x80)
{
(new CBomb().x,().y+20));
(new CBomb().x+20,().y));
(new CBomb().x+40,().y+20));
}
文字显示函数
static int Life=25;eft,().top));<-9||pBall->GetPoint().y>()) {
(lastpos);
delete pBall;
}