# 基于QT实现的植物大战僵尸闯关游戏
# 一、本游戏的简介
## 1.1 游戏简单的说明
本游戏满足本课程大作业的所有基本要求,并且额外编写了一些特殊的功能,包括在植物方面设计编写了双发射手,机枪射手与樱桃炸弹,在僵尸方面除了撑杆跳僵尸与铁桶僵尸还编写了报纸老人僵尸这个新的僵尸。在特殊的UI设计上,还设计了原作中的小车(除草机)。在其他新奇的设计上,本游戏在战斗开始时会播放原作的背景音乐,在樱桃炸弹爆炸后会放出爆炸的声响,在撑杆跳僵尸跳跃式会发出蹦跳的声音,在报纸僵尸咆哮时会发出特殊的声音。在从卡片中选取植物时,鼠标把植物拽出时,会有一个植物的阴影显示在植物应该放在的位置上。另外要申明一点,由于大作业汇报时间紧迫,我的冷却条是关闭的,但是本游戏是有冷却条效果的,希望助教您能够了解。
## 1.2 游戏架构的说明
![](http://www.writebug.com/myres/static/uploads/2021/10/19/edf9d145423981953ce1c78771f54e96.writebug)
注释:图中的箭头有包含之一。game_window为qt提供的主类,其中game_view的实例对象client为 game_window类的成员。而game_view类的成员对象包含除了主类与自身以外的所有类。
gamePlant, gameWeapon, gameSlot, gameZombie, gameCar与gameSun 这些类均继承于game_player头文件的gamePlayer类。gameLawn负责记录草坪各块地方植物的放置情况。以下为各类的介绍:
- **gamePlant**:代表各色植物的类,用来构建植物,其中含有多个布尔型变量来控制植物gif的切换,各种植物在构造函数中发出的信号不同,在timeEvent中的坐标变换与gif切换也不同。在构造函数中相应的植物会发出不同的信号,向日葵会发出需求阳光的信号,射手会发出需求弹药的信号。
- **gameZombie**:代表各种僵尸类,用来构建僵尸,其中含有多个布尔型变量来控制僵尸gif的切换,各种僵尸在构造函数中发出的信号不同,在timeEvent中的坐标变换与gif切换也不同。
- **gameSun**:代表阳光类,用来构建阳光。设置了一个布尔变量,来判断阳光是植物生产的还是屏幕生成的。在该类中mousePressEvent函数被重载来实现点击阳光阳光消失,阳光值增加25的功能。
- **gameWeapon**:代表子弹类,用来构建子弹。
- **gameSlot**:用来构建游戏卡片与,卡槽,铲子的类,该类的成员变量中设置一int型来判断是什么类型。值大于0为植物的卡片,值为-1的为卡槽,值为-2的为铲子。该类重载了mouseReleaseEvent与mouseMoveEvent两个函数。当鼠标触碰植物卡片时,会有一个植物随着鼠标移动(但是操作要注意的是鼠标左键一定要一直按下),只有当鼠标在草坪正确位置放下时才会产生植物。而铲子则与卡牌不一样,鼠标点击它图标的中间后,不用鼠标一直按着,铲子会自动跟随,点击右键铲子回到卡槽,选择植物后点击即可铲除。
- **gameButton**:游戏开始界面的按钮,重载了mousePressEvent与mouseReleaseEvent和mouseMoveEvent,鼠标放在其上会变色,点击后进入战斗界面。
- **gameEnd**:游戏的退出按钮,重载了mousePressEvent与mouseReleaseEvent和mouseMoveEvent,鼠标放在其上会变色,点击后进入游戏结束界面。
- **gameCar**:负责游戏的小车构建。
- **gameScreen**:负责游戏的各种场景构建与开始动画的产生。
- **game_view**: 是整个游戏的核心类,它负责把各种植物僵尸与物品加入场景中。并且监视着整个游戏的进程。
下面介绍game_view的主要槽函数:
```c++
void move_to_screen():用来进入战斗场景
void createBullet(int ):用来生成子弹
void createBomb(int ):用来生成樱桃炸弹的伤害
void createMoreBullet(int ):机枪射手生成子弹
void makeCard(int ):用来生成新的植物
void createSun(int, gamePlant*):用来生成太阳
void damageVector(gamePlant*):用来从植物的QVector中删除已死的植物
void damageVector1(gameZombie*):用来从僵尸的QVector中删除已死的僵尸
void showSun(gameSun*):点击阳光使得阳光消失
```
## 1.3 游戏逻辑设计说明
为了实现程序良好的封装性,本程序在game_window只是实现了一个继承于QGraphicsView的类game_view的实例化对象client的生成,以及client相应成员之间信号的连接。本程序主要的内容都是写在game_view这个类中,它负责把各种物品音效与动画加载到场景中。下面我们来一一说明。当点击游戏的开始按钮时,gameButton类会发射信号,然后game_view类会设置一个槽函数:move_to_screen(),这个槽函数会加载新的战斗场景,而信号与槽的连接是在game_window的构造函数中实现的。
在move_to_screen()的函数中每隔20毫秒会发送信号,在game_view类的timeEvent函数接收信号后程序会自动在场景上生成僵尸。僵尸,植物与子弹都用QVector来储存,在timeEvent中会进行一个二重for循环让僵尸判断是否与子弹和植物“相遇”,如果僵尸或者植物死亡,它们各自的QVector会把他们清理掉。当鼠标点击卡片时,卡片类gameSlot会发出信号,然后在game_view中设置一槽函数make_card(int),在这个函数中会响应gameSlot发出的鼠标移动与鼠标释放的信号生成新的植物,然后信号的连接也是在game_window的构造函数中完成的。当植物需要阳光或者子弹的时候,在make_card()函数新生成植物的同时也会在植物类中发出相应的信号,game_view类中有相应的槽函数,信号的连接是在make_card()函数中,同理铲子的功能实现也是如此。另外gameLawn这个类利用不同的数组来记录新生成植物的横纵坐标与植物在草坪的放置情况,我们把其数组相应的下标传入僵尸与植物,阳光与子弹类的相应参数中然后利用connect信号槽把相应的数据传到game_view中生成相应的东西。
对于植物和僵尸的类,是通过它们的虚拟基类gamePlayer的枚举型参数type来决定植物与僵尸的种类,这样就实现了一个构造函数通过调整一个参数的不同值来生成不同的植物与僵尸。
# 二、本游戏界面UI设计
首先本游戏为无尽模式,僵尸数目是无限的,所以没有植物的胜利条件,但是当僵尸成功走到屏幕最左端时僵尸获得胜利出现胜利界面。本游戏开始时有一个开始界面,界面上又开始游戏按钮,把鼠标光标放在按钮所在区域,按钮会变色。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d3a2c7050aca8da1d2b51639c0db4b7d.writebug)
点击按钮,游戏进入对战界面。然后会出现开场动画与音乐,提示玩家安放植物和僵尸的即将入侵。屏幕还有滚动条方便玩家在另一侧看僵尸的行踪。屏幕上有退出按钮。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/ff5660a836fbe41ec3749ef34de1e477.writebug)
当点击卡片的时候会产冷却条,只有冷却条结束且有足够阳光才可再点击。当拖拽植物时植物会随鼠标移动一个植物阴影会产生在植物应该放置的正确位置上。(植物不可在同一位置重复放置,且点击卡片的时候最好点击卡片部分而不是卡片的植物形象部分)如图。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/f1d1c704f78495b3fe7cdba62d2e9251.writebug)
对战界面满足作业的要求,有植物的卡片,放置卡片的卡槽,铲植物的铲子,还有阳光值得显示与放置植物和僵尸移动的草坪,草坪前端还有原作中的小车。当僵尸获得胜利时,会出现这样的界面。此时游戏�
没有合适的资源?快使用搜索试试~ 我知道了~
精选_基于QT实现的植物大战僵尸闯关游戏_源码打包
共167个文件
gif:47个
png:46个
cpp:33个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 167 浏览量
2022-03-11
08:43:42
上传
评论
收藏 11.52MB ZIP 举报
温馨提示
基于QT实现的植物大战僵尸闯关游戏
资源推荐
资源详情
资源评论
收起资源包目录
精选_基于QT实现的植物大战僵尸闯关游戏_源码打包 (167个子文件)
game_controller.cpp 32KB
game_zombie.cpp 14KB
moc_game_controller.cpp 11KB
moc_game_plant.cpp 10KB
game_plant.cpp 7KB
moc_game_zombie.cpp 7KB
moc_game_slot.cpp 6KB
moc_game_sun.cpp 5KB
moc_game_weapon.cpp 5KB
moc_game_screen.cpp 4KB
moc_game_button.cpp 4KB
moc_game_end.cpp 4KB
moc_game_map.cpp 4KB
moc_game_message.cpp 3KB
moc_game_window.cpp 3KB
moc_game_player.cpp 3KB
moc_game_car.cpp 3KB
moc_game_gif.cpp 3KB
game_slot.cpp 2KB
game_sun.cpp 2KB
game_window.cpp 2KB
game_map.cpp 1KB
qrc_game_window.cpp 1KB
game_button.cpp 1KB
game_end.cpp 989B
game_weapon.cpp 927B
game_car.cpp 690B
game_screen.cpp 546B
game_clear.cpp 407B
game_gif.cpp 246B
main.cpp 245B
game_message.cpp 174B
game_player.cpp 147B
植物大战僵尸游戏大作业文档.docx 7.1MB
game_window.exe 544KB
game_window.vcxproj.filters 9KB
LostHeadWalk1.gif 140KB
PoleVaultingZombieWalk.gif 104KB
HeadWalk1.gif 94KB
Zombie2.gif 78KB
Zombie.gif 65KB
2.gif 65KB
HeadWalk0.gif 61KB
PoleVaultingZombieAttack.gif 61KB
ZombieAttack.gif 58KB
Zombie3.gif 56KB
Boom.gif 53KB
PoleVaultingZombie.gif 52KB
LostNewspaper.gif 51KB
BucketheadZombie.gif 50KB
BucketheadZombieAttack.gif 45KB
PoleVaultingZombieJump.gif 44KB
1.gif 43KB
Sun.gif 42KB
3.gif 42KB
LostHeadWalk0.gif 42KB
ZombieLostHead.gif 41KB
s3.gif 40KB
SunFlower2.gif 39KB
HeadAttack1.gif 38KB
LostHeadAttack1.gif 29KB
Repeater.gif 28KB
Bucket.gif 27KB
Wallnut_cracked2.gif 27KB
GatlingPea.gif 25KB
Die.gif 24KB
Peashooter.gif 21KB
ZombieDie.gif 21KB
WallNut.gif 20KB
LostHeadAttack0.gif 20KB
BoomDie.gif 19KB
PoleVaultingZombieDie.gif 18KB
CherryBomb.gif 16KB
WallNut1.gif 14KB
WallNutRoll.gif 14KB
WallNutCard.gif 4KB
Peashootercard.gif 4KB
01.gif 2KB
011.gif 2KB
0.gif 2KB
LargeWave.gif 2KB
LawnMower.gif 2KB
FinalWave.gif 2KB
game_controller.h 5KB
game_zombie.h 3KB
game_plant.h 2KB
ui_game_window.h 2KB
game_player.h 1KB
game_slot.h 1KB
game_map.h 1KB
game_sun.h 884B
game_button.h 853B
game_end.h 794B
game_weapon.h 665B
game_screen.h 662B
game_window.h 656B
game_message.h 523B
game_clear.h 457B
game_car.h 414B
game_gif.h 326B
共 167 条
- 1
- 2
资源评论
- 来份煎蛋吧2024-03-17资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
- KyleWard2023-11-27内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
工具盒子
- 粉丝: 58
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功