# MFC Aircraft-Battle 飞机大战
### 一、课设题目
以windows编程、事件驱动的程序设计为基础,使用MFC 类库实现一个带有GUI界面的飞机大战程序。
实现基本功能:
- 战场背景,飞机,武器等的图形化绘制。
- 可以操控战机移动,发射武器。
- 飞机可以通过碰撞或被武器击中而损毁。
其他功能:
- 随机产生补给包,可以为战机提升生命值。
- 战机升级,战机分数达到一定阶段后会进行升级,发射更密集和多方向的子弹,共有三种子弹模式。
### 二、基本框架
飞机大战游戏的实现基于MFC文档-视结构框架,它将数据的处理和显示分开来。
文档对象用于管理和维护数据,包括保存数据、取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示。
视图对象将文档中的数据可视化,负责从文档对象中取出数据显示给用户,并接受用户的输入和编辑,将数据的改变反映给文档对象。视图充当了文档和用户之间媒介的角色。
框架用来管理文档和视图,框架窗口是应用程序的主窗口,应用程序执行时会先创建一个最顶层的框架窗口。视图窗口是没有菜单和边界的子窗口,它必须包含在框架窗口中,即置于框架窗口的客户区内。
文档模板中存放了与文档、视图和框架相关的信息。应用程序通过文档模板创建文档对象、框架窗口对象和视图对象。另外,文档、视图和框架之间的关系也是由文档模板来管理的。
飞机大战游戏实现过程中,主要涉及到的是文档对象对数据的管理和视图对象的可视化,具体来说,文档对象负责游戏开始前一些历史数据的读入和游戏结束后数据的存储,视图对象负责游戏界面的绘制,飞机、炮弹位置的变化以及键盘、鼠标按键的响应等操作。
在底层实现上,设计如下几个类:
`CGameObject` :派生自 `CObject` 类,它是所有游戏对象的父类,所有游戏对象都继承自它
`CPlane` :派生自 `CGameObject` 类,它是游戏对象中飞机类对象的父类,本方战机类和敌机类都继承自它
`MyPlane` :派生自 `CPlane` 类,描述本方战机对象
`CEnemy` :派生自 `CPlane` 类,描述敌方战机对象
`CBullet` :派生自 `CGameObject` 类,描述子弹/炮弹对象
`CSupply` :派生自 `CGameObject` 类,描述补给包对象
它们之间的组织关系如下图所示:
![](C:\Users\tf\Desktop\大三下\高级程序设计\课程设计二\图片1.png)
在界面上,共有三种类型的界面:开始界面、游戏界面、结束界面。他们之间的逻辑关系如下图所示:
![](C:\Users\tf\Desktop\大三下\高级程序设计\课程设计二\图片2.png)
程序初始运行时进入开始界面,进行一些提示信息的显示,玩家按下空格键或鼠标左键开始游戏,进入游戏界面,游戏结束后进入结束界面,进行一些总结信息的显示,并提示玩家是否继续游戏,若是,则回到游戏界面重新开始,否则退出程序。
### 三、具体实现
#### 数据结构
`CGameObject` 类的定义如下:
```C++
class CGameObject : public CObject {
protected:
CPoint mPoint; // 游戏对象的位置
public:
CGameObject(int x = 0, int y = 0);
virtual ~CGameObject();
virtual BOOL Draw(CDC* pDC, BOOL bPause) = 0; // 绘制对象
virtual CRect GetRect() = 0; // 获得物体矩形区域
CPoint GetPoint(); // 获得左上角坐标
void SetPoint(int x, int y); // 设置坐标
protected:
static BOOL LoadImage(CImageList& imageList, UINT bmpID, COLORREF crMask, int cx, int cy, int nInitial); // 加载该游戏对象对应的图像
};
```
`CGameObject` 类是所有游戏物体对象的基类,飞机、子弹、补给包类都继承自它。它包含一个游戏对象位置数据,以及对于游戏对象的绘制和获得位置、获得区域、设置位置操作。此外还有一个加载游戏对象图像的接口,值得注意的是,由于图像对象是共有数据,因此同一个游戏对象类只需要加载一份,所以使用静态方法。
`CPlane` 类的定义如下:
```C++
class CPlane : public CGameObject {
protected:
int hp; // 生命值
int maxHp; // 生命值上限
int damage; // 伤害值
int speedX; // 横向速度
int speedY; // 纵向速度
public:
CPlane();
CPlane(int _hp, int _damage, int _speedX, int _speedY);
int getHp() const; // 获取生命值
int getSpeedX() const; // 获取横向速度
int getSpeedY() const; // 获取纵向速度
int getDamage() const; // 获取伤害值
void decreaseHp(int x); // 减少生命
void increaseHp(int x); // 增加生命
bool isAlive() const; // 是否存活
};
```
`CPlane` 类描述飞机类对象,它是本方战机类和敌方战机类的基类,它包含飞机类基本的成员对象:生命值、伤害值、速度等,在公有成员函数里提供一些获取这些值和对这些值操作的对外接口,此外提供一个判断该飞机是否存活(即生命值大于0)的接口函数。
`CMyPlane` 类的定义如下:
```C++
class CMyPlane : public CPlane {
private:
static CImageList images; // 战机图像
public:
CMyPlane(); // 构造函数
BOOL Draw(CDC* pDC, BOOL bPause); // 绘制函数
static BOOL LoadImage(); // 加载图像
CRect GetRect(); // 获取矩形区域
};
```
`CMyplane` 类描述了本方战机对象,与静态成员函数 `LoadImage` 相对应地,它有一个静态成员变量 `images` ,负责存储战机的图像列表,由于战机升级等原因,战机会有多种图像,因此把它们存储为图像列表类型 `CImageList` 。此外重写基类中的 `Draw` 、`LoadImage` 、`GetRect` 方法,分别定制绘制、加载本方战机图像以及获取图像在屏幕上的矩形区域。在 `Draw` 函数绘制战机时,直接将战机图像绘制在 `mPoint` 坐标点上即可。
`CEnemy` 类的定义如下:
```C++
class CEnemy : public CPlane {
private:
int score; // 敌机分数
int index; // 敌机种类
static CImageList enemyImages; // 敌机图像
public:
CEnemy(int w, int h, int i); // 构造函数
int getScore() const; // 获取敌机分数
int getIndex() const; // 获取敌机种类
CRect GetRect(); // 获取矩形区域
BOOL Draw(CDC* pDC, BOOL bPause); // 绘制函数
static BOOL LoadImage(); // 加载敌机图像
};
```
`CEnemy` 类描述了敌方战机类,和 `CMyPlane` 类类似,它也有静态成员变量 `enemyImages` 存储敌机图像列表,以及相应的静态成员函数 `LoadImage` 负责加载敌机图像,以及重写基类方法,此外,它还有一个成员变量 `score` ,存储本方战机击毁该敌机可获得的分数,以及一些相应的对外接口。在构造函数中,需要随机初始化敌机的初始坐标和速度,利用随机函数生成。与本方战机不同的是,本方战机的移动受玩家手动控制,而地方战机的移动需要自动移动,因此在绘制时,需要将坐标 `mPoint` 加上两个方向移动速度,再进行绘制。
`CBullet` 类的定义如下:
```C++
class CBullet : public CGameObject {
private:
bool fromMe; // 是否是本方战机子弹
int speedX; // 横向速度
int speedY; // 纵向速度
int damage; // 伤害值
int index; // 子弹种类
static CImageList myBulletImages; // 战机子弹图像
static CImageList enemyBulletImages; // 敌机子弹图像
public:
CBullet(int x, int y, int d, int sx, int sy, bool fm, int i);
int getSpeedX() const; // 获取横向速度
int getSpeedY() const; // 获取纵向速度
int getDamage() const; // 获取伤害值
bool getFromMe() const; // 获取是否本机子弹
CRect GetRect(); // �
没有合适的资源?快使用搜索试试~ 我知道了~
基于MFC实现飞机大战游戏【100012826】
共158个文件
bmp:74个
ico:22个
h:22个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 99 浏览量
2023-06-26
16:16:48
上传
评论
收藏 5.19MB ZIP 举报
温馨提示
以windows编程、事件驱动的程序设计为基础,使用MFC 类库实现一个带有GUI界面的飞机大战程序。 实现基本功能:1、战场背景,飞机,武器等的图形化绘制。2、可以操控战机移动,发射武器。3、飞机可以通过碰撞或被武器击中而损毁。
资源推荐
资源详情
资源评论
收起资源包目录
基于MFC实现飞机大战游戏【100012826】 (158个子文件)
background1.bmp 1.94MB
background1.bmp 1.94MB
boss.bmp 879KB
boss.bmp 879KB
background7.bmp 768KB
background4.bmp 768KB
background3.bmp 768KB
background2.bmp 768KB
background5.bmp 768KB
background7.bmp 768KB
background4.bmp 768KB
background3.bmp 768KB
background2.bmp 768KB
background5.bmp 768KB
background6.bmp 418KB
background6.bmp 418KB
me.bmp 247KB
me.bmp 247KB
enemyUp.bmp 158KB
enemyUp.bmp 158KB
title.bmp 130KB
title.bmp 130KB
enemyDown.bmp 106KB
enemyDown.bmp 106KB
bomb.bmp 95KB
bomb.bmp 95KB
protect.bmp 80KB
protect.bmp 80KB
me1.bmp 43KB
me1.bmp 43KB
blood.bmp 42KB
blood.bmp 42KB
bomb1.bmp 40KB
bomb1.bmp 40KB
explosion.BMP 34KB
explosion.BMP 34KB
start.bmp 34KB
start.bmp 34KB
start1.bmp 16KB
start1.bmp 16KB
ballup.bmp 9KB
ballup.bmp 9KB
balldown.bmp 6KB
balldown.bmp 6KB
menuimages_hc.bmp 6KB
Toolbar256.bmp 6KB
menuimages_hc.bmp 6KB
Toolbar256.bmp 6KB
classview_hc.bmp 5KB
classview_hc.bmp 5KB
properties_hc.bmp 3KB
properties_hc.bmp 3KB
fileview_hc.bmp 2KB
fileview_hc.bmp 2KB
sort_hc.bmp 1KB
sort_hc.bmp 1KB
bitmap1.bmp 1KB
bitmap1.bmp 1KB
menuimages.bmp 1KB
Toolbar.bmp 1KB
menuimages.bmp 1KB
Toolbar.bmp 1KB
classview.bmp 958B
classview.bmp 958B
explorer_hc.bmp 776B
explorer_hc.bmp 776B
properties.bmp 598B
properties.bmp 598B
fileview.bmp 478B
fileview.bmp 478B
sort.bmp 358B
sort.bmp 358B
explorer.bmp 238B
explorer.bmp 238B
ClassDiagram.cd 59B
AircraftBattleView.cpp 19KB
ClassView.cpp 9KB
PropertiesWnd.cpp 8KB
MainFrm.cpp 7KB
FileView.cpp 6KB
AircraftBattle.cpp 5KB
OutputWnd.cpp 5KB
AircraftBattleDoc.cpp 3KB
Scene.cpp 1KB
CEnemy.cpp 1KB
CBullet.cpp 1KB
CSupply.cpp 1KB
RestartDialog.cpp 904B
ViewTree.cpp 835B
MyPlane.cpp 799B
GameObject.cpp 759B
MyDialog.cpp 641B
CPlane.cpp 567B
MyMessageDialog.cpp 544B
stdafx.cpp 139B
et --hardq 2KB
PlaneWar.vcxproj.filters 9KB
.gitattributes 2KB
.gitignore 3KB
.gitignore 418B
共 158 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 2712
- 资源: 7668
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功