# 简易飞机大战
## 项目需求分析
### 项目介绍
**项目简介:**
**项目名称为简易飞机大战**,使用者可以操控一架小飞机与敌机战斗很经典的打飞机小游戏,简约而不简单 (此版本为无敌版) 游戏目标:合理操作控制飞机消灭更多的敌人,获得更高分数。
**项目发展:**
本项目初期打算设计一个简单但有趣的小游戏,于是选择了飞机大战这个小游戏,于项目发展中期建立了一套适用于本项目的解决方案,并由此为依据,在项目的后期由本项目的负责团队用时一周开发完成。终期通过测试后,宣布完工。
**项目基本展示:**
![](https://www.writebug.com/myres/static/uploads/2021/12/29/8f66bf9ad4f1e2e8dff623c20194ffe5.writebug)
**首界面** 2.游戏界面
![](https://www.writebug.com/myres/static/uploads/2021/12/29/a99a57227b1a39800e567248536c7c9a.writebug)
**网页展示**
网页初始界面
![](https://www.writebug.com/myres/static/uploads/2021/12/29/799b42c8b287d70f245c6908649c9884.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/12/29/287584130c67f4ae1e14e7114b004394.writebug)
成员界面
版权界面
![](https://www.writebug.com/myres/static/uploads/2021/12/29/6f6462a25e1cbc4af2340721810f1cae.writebug)
本程序的静态网页链接:
本程序的打包文件:(下载 Release 压缩包文件解压,运行 Plane.exe)
项目源码:
### 功能需求
使用者可以流畅的操控飞机与敌机战斗,且每击落一架敌机就能加十分。有重新开始及退出功能,通过点击按钮选项即可查看与本程序相关的信息的展示用静态网页。
## 系统分析与设计
### 本程序需解决的关键技术问题
在编写本次大作业项目时,所遇到的关键技术问题如下:
在开始游戏时,如何才能正确地切换至游戏界面。
在于游戏界面如何才能让飞机响应键盘的事件并随之移动方向,且如何 移动,移动的速度又该如何设置等。
子弹的发射如何实现,以及子弹生成后又应如何移动,且子弹不同时刻 的状态又该如何设置。
敌机的发生如何实现,以及敌机地运动又该通过怎样地方式来实现,敌 机的不同状态又该如何实现。
敌机与子弹相碰撞该如何判定,碰撞后又该执行哪些步骤。
对于内存的管理。
### 程序流程
![](https://www.writebug.com/myres/static/uploads/2021/12/29/fd1b220f2edc8590200e5eef48ea4e42.writebug)
程序运行时各函数之间的关系正如上图所表示的,在开始程序时,即将菜单区的功能与与之对应的槽函数相连接(重新开始在游戏开始时进行连接)。开始游戏后,随即画面转变至游戏界面,在游戏过程中,每一个子弹/敌机都有属于自己的定时器,用于控制其移动以及出界后,销毁自己,并从对应链表中剔除,释放内存。而子弹与敌机的发生,都由另外的定时器控制,并且碰撞的判定也由另一个定时器判定,判定后则如上图中进行操作。
### 函数关系描述
![](https://www.writebug.com/myres/static/uploads/2021/12/29/ba92320995a1bc2b2809e9d22a6945cd.writebug)
其运行时的函数与类的关系如上 UML 图与图中相应的文字描述,概括可述为:在程序开始运行时,调用主体窗口的构造函数,随即构建开始界面,开始游戏后,随即进入第二个界面,各类行为由相应的定时器函数或信号和槽函数进行控制。
## 设计与实现
### 工程文件组织结构
![](https://www.writebug.com/myres/static/uploads/2021/12/29/e68985804af09e37ff619be3555991fa.writebug)
本项目的文件结构如上图所示,由一个控制主体窗口包含所有类的 mainwindow.h 头文件和一个与之关联的 mainwindow.cpp 文件,再有整个程序开始的入口 main.cpp 文件与涵括资源文件的 src.qrc 文件,其中包含飞机图形,子弹图形,敌机图形及相关的图片文件。
### 程序设计
MainWindow(类) 为整个程序主体窗口的构造类,通过这个类得以构造出这个程序的大体框架,以及操作的菜单,是这个图形界面得以产生的主要依赖。其中,通过在 main 函数中构造出这个类的对象就得以调起该类的构造函数 MainWindow(构造函数),从而通过构造函数的运行构建起整个程序框架。
on_Start_Released(成员槽函数) 响应首页的按钮点击事件,从而执行 CreateGP 函数,构造游戏界面。
CreateGP(成员函数) 创建游戏界面,初始化飞机,以及响应键盘事件。
InitialP(成员函数) 为飞机初始化控件,并加载飞机图片,并同时开启定时器事件(子弹发射,敌机发生,碰撞判定等)。
keyPressEvent(override) 为飞机的移动设置键盘事件的响应,通过键盘控制飞机移动。
timerEvent(override) 为子弹,敌机,碰撞判定设置定时器事件(以 ID 区分事件)。
CreateScr(成员函数) 创建得分表,记录得分。
Bullet(类) 定义所有的子弹为同一个类,其内定义了子弹的控件类型,子弹的图片以及每个子弹所分配的定时器。
Enermy(类) 定义所有的敌机为同一个类,其内定义了子弹的控件类型,子弹的图片以及每个敌机所分配的定时器。
My_bullet&Enermies(list 链表) 存储所有已生成的子弹对象,敌机对象,用于判定碰撞事件,若判定为已碰撞,则从中删除。
Timer(成员槽函数) 为每个子弹/敌机的定时器所分配的槽函数,用于控制子弹/敌机的移动,出界即自动销毁对应对象,从对应 list 中删除,释放内存。
Crash(成员函数) 若已碰撞则触发该函数,销毁对象,释放内存。
Restart(成员槽函数) 若点击重新开始则触发该函数,清空所有子弹,敌机,得分重置为零。
On_Exit(成员槽函数) 退出程序。
OpenWeb(成员槽函数) 打开网页。
### 程序实现
界面的切换:
通过点击事件先销毁初始界面再调起 CreateGP 函数创建游戏界面,同时初始化飞机,设置响应点击事件。调起飞机初始化函数及的分表创建的函数。
```c++
1. /*mainwindow.cpp*/
2. //重新开始的槽函数
3. void MainWindow::on_Start_released(){
4. delete ui->Begin;
5. CreateGP();
6. }
7. //初始化背景窗口
8. void MainWindow::CreateGP(){
9. GAMEPAGE=new QFrame(ui->Center);
10. GAMEPAGE->setGeometry(0,0,800,600);
11. GAMEPAGE->setStyleSheet("QFrame{background-color: '#e4e4e4';};");
12. //连接重新开始按键至对应的槽函数
13. QObject::connect(ui->Replay,SIGNAL(triggered()),this,SLOT(Restart()));
14. //设置相应鼠标事件
15. setEnabled(true);
16. setFocusPolicy(Qt::StrongFocus);
17. GAMEPAGE->show();
18. //调用初始飞机函数
19. InitialP();
20. //调用初始得分表函数
21. CreateScr();
22. }
```
飞机的移动功能的实现:
```c++
/*mainwindow.h*/
//重写keypressEvent设置键盘事件
voidkeyPressEvent(QKeyEvent*event)override;
```
通过重写 keyPressEvent 再在 CreateGP 时设置响应键盘事件,即可通过按动键盘的方向键来移动飞机的位置,具体如下:
```c++
1. /*mainwindow.cpp*/
2. //键盘事件,控制飞机的移动,同时设置移动边界
3. void MainWindow::keyPressEvent(QKeyEvent *event){
4. //判定为上方向键,向上移动
5. if(event->key()==Qt::Key_Up){
6. if(P_Y>=0){
7. P_Y-=5;
8. Plane->setGeometry(P_X,P_Y,P_HEIGHT,P_WIDTH);
9. }
10. }
11. //判定为下方向键,向下移动
12. if(event->key()==Qt::Key_Down){
13. if(P_Y<=520){
14. P_Y+=5;
15. Plane->setGeometry(P_X,P_Y,P_HEIGHT,P_WIDT
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现简易飞机大战小游戏【100012171】
共46个文件
png:28个
md:4个
docx:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 22 浏览量
2023-05-15
11:03:29
上传
评论
收藏 4.95MB ZIP 举报
温馨提示
项目名称为简易飞机大战,使用者可以操控一架小飞机与敌机战斗很经典的打飞机小游戏,简约而不简单 (此版本为无敌版) 游戏目标:合理操作控制飞机消灭更多的敌人,获得更高分数。
资源推荐
资源详情
资源评论
收起资源包目录
100012171-基于C++实现简易飞机大战小游戏.zip (46个子文件)
cpp_final_program
.gitattributes 66B
LICENSE 1KB
Word
C++大作业评分依据.docx 14KB
C++大作业任务报告书.docx 1.11MB
README.md 61B
流程图
Procedure.png 725KB
Structure.png 196KB
README.md 81B
UML.png 547KB
README.docx 1.11MB
README.docx-md
14-bcfb03273e6d805f4012536f9ad2ecb7.png 94KB
11-3b1670596ec6746227156303182a03b8.png 53KB
15-246fe09a7c81ec5aafe7ab6cc6755dc7.png 36KB
18-22f00a728f4ec258f5e3c12bb898d62c.png 62KB
3-df3eff5c69ec00c5ff8f695b5e18436b.png 10KB
5-fe4fc13d44aa6493548d009aeb5457ec.png 6KB
13-d21a251955da643246feb09f6164417d.png 147KB
12-9770cdd94eaf372b051bde5106162a91.png 300KB
19-c28824a2ebea24e4f3da01f3c55796a8.png 86KB
17-63577a73e1b005ca993fef2740fed266.png 48KB
4-55ce96b481c67626c4a0c9b7e097f5af.png 6KB
7-d75b65a6a19da1832a2c6151a634208a.png 55KB
9-aedabc42ad136b84d743e7edbeb5ccbc.png 32KB
16-ef8bece6a4d834ed9f8448d9d910488f.png 39KB
10-cdc548c2acc151f8b8cfa5979ce74fdb.png 78KB
2-23c1a2956a6d1d91ce8dbe94c9d39de6.png 51KB
1-23c1a2956a6d1d91ce8dbe94c9d39de6.png 51KB
6-b9de56af53c33318c03f0224b86b9791.png 26KB
8-d505ca96e83638a1588ad73f2f466410.png 16KB
.gitignore 625B
README.md 15KB
CPP_Final
Plane
mainwindow.h 3KB
dot.png 8KB
myplane_damaged.png 19KB
mainwindow.cpp 9KB
enermy.png 17KB
main.cpp 236B
myplane.png 19KB
mainwindow.ui 3KB
Plane_zh_CN.ts 100B
bg.png 60KB
Plane.pro 1KB
src.qrc 250B
logo.ico 17KB
README.md 163B
UML.png 547KB
共 46 条
- 1
资源评论
神仙别闹
- 粉丝: 2674
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功