# 基于QT实现的飞机大战游戏
# 一、课程设计内容与目标
通过类的继承等来实现一个飞机小游戏,首先实现控制台版的飞机游戏,然后修改与显示相关的部分代码完成从控制台到图形界面的迁移过程。
飞机游戏中要实现以下几个基本要素:
- 玩家飞机发射子弹攻击敌机
- 敌机可以发射子弹攻击玩家
- 玩家飞机可以自由移动,敌机可以定向移动
- 玩家飞机与敌机只有在真正边界相撞时才算相撞,且相撞时双方均要受到一定伤害
在课程设计一中,我实现了上述的基本功能,并提供了向图形界面的接口函数,在课程设计一中,玩家飞机和敌机均可以通过简单的代码修改任意更改形态
在课程设计二中,我添加了程序启动界面(就是此实验报告的封面),欢迎界面、背景音乐、暂停、玩家飞机技能、补给掉落、boss 等功能,游戏界面如下图:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/831c9185fbe69df5012995549cfa9509.writebug)
在此游戏中,右下角的 SCORE 为玩家当前击落的敌机数,绿色进度条为玩家飞机当前的血条,下面的蓝色进度条为玩家飞机当前的技能条。玩家可以使用消耗技能值实现一技能,如按 Q 可以三连发(如上图),按 E 可以一次性击落当前所有敌机,按 R 可以一次性消掉当前所有子弹。
# 二、类层次关系和实现
本次实验中,我总共设计了如下几个两个基类 Plane 和 Bullet。Plane 派生出MyPlane和 EnemyPlane 两个子类。还有一个 Control类管理全局。两次课程设计中主要使用的类没有发生变化,只是类之间的关系稍有变化。
## 2.1 第一次课程设计(控制台版)
第一次课程设计(控制台版)中各类关系如下:
> 箭头关系说明(个人理解,未必准确):
>
> 1. 黑色填充箭头:表示的是对类的实例化
> 2. 白色填充箭头:表示的是从属关系,上属于下
> 3. 无箭头实线:基类与子类之间的派生关系,上基类,下派生类
![](http://www.writebug.com/myres/static/uploads/2021/10/19/4c8d9d4da7573e48c6d8654f307bd76f.writebug)
如图,Plane 类中聚集了 Bullet 类的实例 bullets 数组,用于记录该飞机发出去的子弹;Plane 类派生出两个子类,MyPlane 与 EnemyPlane,分别是玩家飞机与敌机。这两个类均聚集在 Control 类中,由 Control 类对所有飞机的状态进行管理。由于 Control 与 Plane、MyPlane、EnemyPlane 关系密切,故我将 Control类设置为这几个类的友元。
在这个版本中,我通过一个循环来检测用户的按键输入和定时动作,如下:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/8ae402ffa6c7d6c4ab0943f363af154b.writebug)
keyboardHandle是我自己写的一个函数,用于根据用户的不同按键获取用户输入。
## 2.2 第二次课程设计(图形界面版)
第二次课程设计(图形界面版)中对类的关系进行了一些优化。因为 Plane和 Bullet 类都有一些共同的属性,所以设计了一些共同的基类 Object,以实现一些共同的性质,如 synScreen,delScreen 等。第二次课程设计是用的是 Qt 的QGraphicsScene、QGraphicsItem、QGraphicsView 三组件,其中 Control 继承自QGraphicsScene,Plane 与 Bullet 继承自 QGraphicsItem,在 main 函数中创建QGraphicsView与QGraphicsScene 相关联,主要操作都在 Control中完成。
> 类结构关系以及箭头含义说明(个人理解,未必准确):
>
> 1. Object : public QGraphicsPixmapItem
> 1. vector<Object*> lifesupplys;
> 2. Bullet : public Object
> 1. vector<Bullet*> mybullets;
> 2. vector<Bullet*> enemybullets;
> 3. Plane : public Object
> 4. MyPlane : protected Plane
> 1. MyPlane *myplane;
> 5. EnemyPlane : protected Plane
> 1. vector<EnemyPlane*> enemyplanes;
> 6. Control: public QGraphicsScene
类结构图如下:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b81d3a3906df20dee2e7df2da156cae1.writebug)
第二次课程设计中,Bullet 类不再聚集在 Plane 类中,而是直接实例化为两个数组,聚集在 Control中,便于管理。Object 类均需要使用图片来初始化,所以都是 Qt 提供的 QGraphicsPixmapItem 类的子类。而 Control 类抽象成为QGraphicsScene 类的子类,用于管理 Scene 中的各个 Item。
除此之外,为了丰富游戏内容,还在增加了其他的一些组件,用以实现游戏启动界面、欢迎界面、背景音乐、血条、技能条、游戏暂停、游戏结束等功能。
类名及相关游戏组件如下:
- QGraphicsTextItem 游戏标题、提示信息等
- QGraphicsWidget 游戏按钮、遮罩面板(用于在游戏暂停时达到场景变暗的效果)
- QGraphicsRectItem 血条、技能条。
此外,检测玩家按键输入和定时动作的方式也使用了 QObject 提供的消息机制来实现,使用了如下事件函数:
- timeEvent() 用于接收计时器消息,实现飞机、子弹定时移动,敌机的定时生成
- keyPressEvent() 用于接收键盘控制,实现玩家控制
# 三、课程设计一和二的关联与衔接
课程设计一为了向课程设计二过渡,设计了一些共同的接口函数,在迁移过程中仅需修改参数即可。
在过渡中优化了一部分类的设计,比如发现 Bullet、Plane、LifeSupply 都有共同的属性,故让这三个类均继承自 Object 类。
Object 类与显示相关的函数变动如下表:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/18595cf665938c86296ae7c2451ec50f.writebug)
delScreen 用于将子弹在屏幕上抹去,synScreen 用于将子弹显示在屏幕上,hit 用于子弹与飞机相撞时降低子弹生命值,生命值降为 0 时抹去子弹。
Bullet 类只需要改动一个函数:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/fdb202d274019f462830ce05f0460ded.writebug)
其中 char \*\*screen 为控制台版中 Control 类的一个成员变量,用于保存要在屏幕上显示的所有字符;在图形界面版中 Control类继承自 QGraphicsScene,本身就保存了所有要显示的信息,所以可以直接将 Control类指针传进去。
Plane 类也只需改动一个函数:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/917a1802d1c7d032c01044dc0aac9cc8.writebug)
crash用于飞机与飞机或子弹相撞时降低生命值,生命值降为0时抹去飞机。
Control类变化较多,因为 Qt中有一些现成的库函数,所以有些地方可以直接使用库函数,变化如下:(参数略去)
![](http://www.writebug.com/myres/static/uploads/2021/10/19/1f0cbc310839d2ed0ec16aa1b560dcb3.writebug)
另外,为了更好地适应图形界面,也对一些功能做出了修改,比如控制台版本的子弹相撞可以消掉,但是图形界面中玩家飞机子弹与敌机子弹不能消掉。
除此之外,为了丰富游戏,增强游戏可玩性和趣味性,还添加了其他的函数以实现:游戏启动界面、游戏欢迎界面及帮助、游戏暂停、背景音乐、玩家技能、随机掉落补给等等功能。
# 四、实验成果展示
## 4.1 第一次课程设计(控制台版)
控制台版的飞机大战较为简陋,但是可拓展性较好。敌机和玩家飞机的形状可以直接通过更改代码中定义的一个静态数组来改变,且碰撞也是按照实际形状来检测的。玩家可以通过一些按键来控制右侧栏中一系列参数:生命值、子弹威力、子弹速度等等。玩家子弹和敌机子弹相撞时会同时销毁。运行效果如下图 :
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e7520a3070f6ade1cb4a270386594c0f.writebug)
## 4.2 第二次课程设计(图形界面版)
没有合适的资源?快使用搜索试试~ 我知道了~
本科毕设项目:基于C++和Qt的飞机大战游戏.zip
共182个文件
bmp:54个
png:23个
o:22个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 112 浏览量
2023-10-24
11:23:01
上传
评论 1
收藏 241.64MB ZIP 举报
温馨提示
matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab算法,毕设、课设程序,全部源码均已进行严格测试,可以直接运行! matlab
资源推荐
资源详情
资源评论
收起资源包目录
本科毕设项目:基于C++和Qt的飞机大战游戏.zip (182个子文件)
ImageMagick-Fix-PNG.bat 286B
img_phenix.bmp 4MB
img_bullet_laser.bmp 4MB
img_bullet.bmp 4MB
img_bg_level_4.bmp 2.8MB
img_bg_level_3.bmp 2.8MB
img_bg_level_2.bmp 2.8MB
help.bmp 1.86MB
background6.bmp 1.37MB
background2.bmp 1.37MB
background5.bmp 1.37MB
start.bmp 927KB
boss.bmp 879KB
backGround.bmp 804KB
background5.bmp 768KB
background7.bmp 768KB
background3.bmp 768KB
background2.bmp 768KB
background1.bmp 768KB
img_plane_main.bmp 768KB
me.bmp 492KB
background4.bmp 418KB
background6.bmp 418KB
BOS.bmp 258KB
enemyUp.bmp 158KB
title.bmp 130KB
plan2.bmp 120KB
enemyDown.bmp 106KB
bomb.bmp 95KB
me1.bmp 84KB
protect.bmp 80KB
Boer.bmp 57KB
blood.bmp 42KB
bomb1.bmp 40KB
explosion.bmp 34KB
explosion.BMP 34KB
explosion.BMP 34KB
ballup.bmp 9KB
diji.bmp 9KB
yyyy.bmp 6KB
feii.bmp 6KB
balldown.bmp 6KB
子弹3副本.bmp 4KB
feiji1.bmp 4KB
enemy.bmp 4KB
me.bmp 3KB
bombuup.bmp 3KB
朝.bmp 3KB
feiji.bmp 3KB
生命.bmp 2KB
zidan.bmp 1KB
bombUp.bmp 1KB
bombDown.BMP 1KB
bitmap14.bmp 1KB
ball.BMP 1KB
Control.cpp 52KB
qrc_resources.cpp 23KB
qrc_resources.cpp 22KB
moc_Control.cpp 4KB
moc_Control.cpp 4KB
Object.cpp 2KB
main.cpp 1KB
Plane.cpp 844B
Bullet.cpp 711B
EnemyPlane.cpp 434B
MyPlane.cpp 346B
Makefile.Debug 340KB
Makefile.Debug 340KB
x通信181-葛丰盛-2018280122-毕业论文.docx 603KB
151220162张帅-飞机游戏实验报告.docx 598KB
关于本科毕业论文撰写的规范要求.docx 25KB
~$本科毕业论文撰写的规范要求.docx 162B
~$1220162张帅-飞机游戏实验报告.docx 162B
warofplanes.exe 44.12MB
warofplanes.exe 37.92MB
installer.exe 30.81MB
superMaliJoke.gif 821KB
superMaliJoke.gif 821KB
loading.gif 10KB
moc_predefs.h 9KB
moc_predefs.h 9KB
Control.h 9KB
Bullet.h 1KB
EnemyPlane.h 870B
Object.h 746B
Plane.h 523B
MyPlane.h 353B
warofplanesicon.ico 9KB
PlaneWar.ico 9KB
warofplanesicon.ico 9KB
warofplanesicon1.ico 7KB
helpIcon_2.ico 399B
边缘判断待优化.jpg 55KB
warofplanes.jpg 15KB
qq.jpg 2KB
feiji7.jpg 2KB
Makefile 35KB
Makefile 35KB
README.md 11KB
README.md 157B
共 182 条
- 1
- 2
资源评论
- 2301_810578732023-12-28这个资源总结的也太全面了吧,内容详实,对我帮助很大。
天天501
- 粉丝: 617
- 资源: 5906
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功