# PlaneWars 飞机大战
## 1、项目简介
本项目为飞机大战,在主页面中一共有四个按钮,分别对应`无尽模式`,`boss模式`,`历史记录`和`退出游戏`四个功能。
技术栈: `python3.11` `mysql 8.0.36-0ubuntu0.22.04.1`
![image](/md_image/1.主界面.png)
游戏主界面
玩家可选择无尽模式或者boss模式进行游戏。
无尽模式会记录玩家分数,记录游戏数据并存到数据库中。
boss模式下,玩家需要击败boss的两种形态才能通关。
历史记录中,玩家可以查看最近的无尽模式游戏记录。
## 2、功能介绍
### 2.1 无尽模式
1. 该模式的界面上会随机出现迷你敌机、小敌机、中敌机、大敌机四种敌机,并进行随机移动和不同子弹的发射,玩家需要对敌机及其发射的子弹进行躲避,并发射子弹击落敌机,获得相应的得分。敌机越大,其生命值和子弹威力就越强,相应地,玩家击落获得的分数也会更高。
2. 游戏过程中,补给会有较小概率掉落,玩家拾取到补给后,攻击力会加强,发射两条弹道,一段时间后,超过补给有效期,发射的子弹会恢复成一条弹道。
3. 玩家具有一定的生命值,当被子弹击中或者与敌机造成碰撞,都会造成生命值的减少,当生命值减少到为0时,玩家飞机被摧毁,游戏结束,弹出文字提示,并在3秒后自动退出该游戏模式,并记录游戏的分数,保存本次游戏信息到mysql数据库中。
![image](/md_image/2.1正常形态.png)
正常形态
![image](/md_image/2.1强化形态.png)
强化形态
![image](/md_image/2.1游戏结束.png)
游戏结束
### 2.2 Boss模式
1. Boss会有两种形态,在第一形态中,Boss1会发射两种子弹,玩家需要对Boss1进行子弹发射,使其血量减少(界面上的白色血条为其血量的可视化)。当血量为0,即白色血条消失时,屏幕会出现几秒的warning!警告,预示更强的Boss2形态即将到来,提醒玩家做好准备。
2. Boss2的血量更高,子弹威力更强其子弹有3种,前两种和Boss1形态的子弹差别不大,就是飞行速度更快,威力更强一些,第三种子弹是Boss2更强的手段——跟踪核弹,会在发射前根据玩家的位置进行定位跟踪,最后再发射出去,其威力明显大于其他类别的子弹。
3. 不过,玩家在该boss模式下获得补给后,会获得不断的子弹强化,与无尽模式的强化效果不同,玩家一旦获得补给,其强化效果不但不会消失,还会随着更多补给的获得而增强自身弹道和子弹威力,从而帮助玩家更好地战胜更强形态的boss。当玩家将boss1和boss2都击败后,游戏胜利,显示提示文字的同时会在3秒后自动退出该游戏模式,返回到主界面。
![image](/md_image/2.2Boss1形态.png)
Boss1形态
![image](/md_image/2.2过渡.png)
boss切换过渡警告
![image](/md_image/2.2激光.png)
Boss2激光预警
![image](/md_image/2.2核弹.png)
Boss2核弹攻击
![image](/md_image/2.2失败.png)
游戏失败
![image](/md_image/2.2胜利.png)
游戏胜利
### 2.3 历史记录
历史记录模块利用到mysql数据库的存储。
先打开wsl子系统的mysql数据库,通过连接其中的pygame_db数据库来对里面的表score_table进行数据访问,查询最近5条数据并返回,显示在页面上。
![image](/md_image/2.3历史.png)
历史记录展示
![image](/md_image/2.3DataGrip.png)
利用DataGrip显示后台数据库中的数据
### 2.4 退出游戏
按下退出游戏按钮,清空pygame资源并执行exit() 函数退出游戏。
## 3、系统实现概述
### 3.1 类的设计
1. 由于游戏中创建了大量的类和对象,比如飞机类,子弹类等以及相应类的多个对象,因此创建一个myclass.py文件,在其中定义好可复用的类。并在两种游戏模式中进行相关类的使用,并根据适当需求进行类的继承和方法重写。
2. 定义玩家飞机Player类和飞机子弹Bullet类,包含飞机坐标,矩形对象,飞机按下键盘实现上下左右移动和发射子弹的功能,在发射子弹时,会将子弹加载到一个精灵组里面,在动态update更新时会将子弹显示到界面上。在子弹类中,除了定义矩形对象,坐标与飞机位置相关联之外,还要设置自动移动的方法,确保在更新页面时能够呈现出子弹向上移动的效果。
3. 定义敌机Enemy类和敌机子弹EnemyBullet类,同样包含敌机坐标,矩形对象,子弹移动等属性和方法。与玩家飞机和子弹不同,敌机的移动是随机移动,子弹是随机自动发射,而不受玩家的键盘行为控制。此外,玩家飞机只有一种,不用重写,而敌机和子弹跟据不同模式会有不同类型,需要在对应的模块重写定义子类来继承此处的敌机Enemy类和敌机子弹EnemyBullet类。
4. 以上这四个类都需要继承pygame.sprite.Sprite这个精灵类,这个是pygame提供的类,提供了rect矩形属性,可以感知时间的流逝等功能。继承它将便于我们后续进行获取游戏元素对象的矩形位置,定时器的使用,飞机碰撞判定等操作。
5. 定义背景类,包含三张图片,需要子类重写,传递其所需的图片文件名。为了实现背景不断下降,来达到飞机相对往前飞行的效果,背景图片的首尾需要能无缝衔接。因此在方法中,我设置两张背景上下相邻排列,在界面更新时固定向下移动2个单位,通过背景的向下移动呈现出玩家飞机向前飞行的效果。当第二张图片的顶部即将离开界面的顶部时,更新图片位置为最开始的位置,从而实现图片的无缝衔接并继续向下移动,循环往复,实现背景永远不断向下移动的效果。
6. 定义爆炸类,当敌机或玩家的飞机被摧毁时会触发爆炸效果,在此类中,定义了爆炸的音效,同时用列表推导式加载了爆炸飞机的四张爆炸图片,更新界面时会逐步展示这4张照片,从而呈现爆炸的动画效果。爆炸的4张图片需要先根据碰撞获取到被摧毁的飞机对象,根据飞机类型来传递不同文件名到爆炸对象中,呈现不同爆炸效果。(飞机爆炸图片的命名方式为“飞机类名+down+图片数字”,从而方便参数的传递)。
7. 定义补给类,生成随机数,设置一个较小的概率来生成补给,比如随机数的范围是1-20,每秒补给定时器触发时产生一个随机数。只有当定时器触发且随机数为1时,才会创建补给对象,放入补给的精灵组里,进而能在页面中呈现出来。补给的移动方式和敌机子弹类似,都是从上方生成并不断下落,只有当补给与玩家敌机发生碰撞或移出屏幕时才会销毁该对象。
### 3.2 无尽模式功能实现
1. 对敌机类进行继承,创建出迷你敌机、小敌机、中敌机、大敌机四种敌机子类,同时其对应的四种子弹也是继承于myclass的子弹类,重写了子弹图片,移动速度等属性。
2. 定义音乐类,加载游戏背景音乐和爆炸音效,继承背景类,设置该模式下的游戏动态背景。
3. 在Manager管理类中,定义多个绘制文字和矩形的方法,用于在游戏界面上动态展示分数、血量条、文字提示等元素。文字利用drawText( )函数生成对应样式,包括字体,颜色,显示位置大小等属性的设置,外部通过调用传参可快速实现在界面上绘制文字的操作。血量条本质上是一个带颜色的矩形绘制,其中矩形的宽度跟玩家或boss敌机的血量呈线性关系:满血时血量条最长,之后逐渐缩短,血量降为0时血条消失。
4. 将main方法定义在Manager管理类中,当用�
没有合适的资源?快使用搜索试试~ 我知道了~
pygame飞机大战PlaneWars.zip
共99个文件
png:64个
mp3:7个
py:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 195 浏览量
2024-05-12
19:28:09
上传
评论
收藏 21.25MB ZIP 举报
温馨提示
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
pygame飞机大战PlaneWars.zip (99个子文件)
manualType.properties 10B
PlaneWars-main
md_image
2.2胜利.png 304KB
2.2过渡.png 311KB
1.主界面.png 1.07MB
2.3DataGrip.png 191KB
2.2Boss1形态.png 309KB
2.1正常形态.png 507KB
2.1强化形态.png 511KB
2.3历史.png 428KB
2.1游戏结束.png 507KB
2.2核弹.png 340KB
2.2失败.png 340KB
2.2激光.png 336KB
music
鲸2.MP3 1.19MB
me_down.wav 90KB
1.4厅.mp3 1.01MB
1.4入场.mp3 1.03MB
victory.MP3 27KB
鲸2(2).MP3 1.2MB
鲸1.mp3 3.02MB
鲸2(1).MP3 1.2MB
endless.py 22KB
index.py 4KB
font
Genshin default fonts.ttf 6.9MB
image
small_enemy.png 9KB
boss_bullet4.png 3KB
mid_enemy_down1.png 18KB
my_bullet1.png 931B
mid_enemy.png 19KB
me_down3.png 17KB
small_bullet.png 556B
big_bullet.png 2KB
bgi4.jpg 66KB
big_enemy.png 35KB
my_bullet3.png 2KB
boss2_down2.png 80KB
mid_enemy_down3.png 23KB
历史记录.png 8KB
mini_bullet.png 351B
index3.png 585KB
bgi1.jpg 122KB
small_enemy_down3.png 12KB
boss1_down1.png 61KB
boss模式.png 7KB
boss_bullet2.png 2KB
boss2.png 84KB
player.png 12KB
bgi5.jpg 66KB
boss_bullet1.png 2KB
boss1_down2.png 64KB
laser.png 1KB
big_enemy_down1.png 34KB
mini_enemy_down3.png 6KB
index1.png 582KB
boss_bullet3.png 3KB
big_enemy_down2.png 40KB
bgi2.jpg 94KB
返回.png 3KB
boss1.png 68KB
退出游戏.png 7KB
mid_enemy_down2.png 23KB
boss2_down3.png 90KB
me_down2.png 13KB
small_enemy_down1.png 9KB
boss1_down3.png 74KB
bgi3.jpg 91KB
无尽模式.png 7KB
warning_icon.png 5KB
supply.png 5KB
boss2_down1.png 75KB
mini_enemy_down1.png 5KB
my_bullet2.png 3KB
index2.png 584KB
boss_bullet5.png 12KB
mini_enemy_down2.png 5KB
me_down1.png 12KB
mid_bullet.png 789B
big_enemy_down3.png 14KB
warning_bg.png 59KB
mini_enemy.png 5KB
small_enemy_down2.png 10KB
mysql_tool.py 2KB
.idea
vcs.xml 180B
misc.xml 290B
PlaneWars.iml 398B
inspectionProfiles
Project_Default.xml 642B
profiles_settings.xml 174B
modules.xml 270B
.gitignore 182B
history.py 3KB
myclass.py 14KB
boss.py 24KB
__pycache__
endless.cpython-311.pyc 28KB
boss.cpython-311.pyc 33KB
mysql_tool.cpython-311.pyc 3KB
history.cpython-311.pyc 5KB
myclass.cpython-311.pyc 23KB
README.md 16KB
item.pdf 6B
共 99 条
- 1
资源评论
枫蜜柚子茶
- 粉丝: 6896
- 资源: 5118
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功