# 植物大战僵尸
## 1.系统需求分析
### 游戏简介:
当可怕的僵尸入侵的时候,谁能想到,弱小的植物能承担起保卫家园的责任?也许你早听说过那些没有脑子的僵尸席卷整个街区、吃掉一户一户屋主人的脑子的故事。但这次,你终于要真正面对入侵自己家园的僵尸了。有僵尸在你的草坪上!
草坪是植物们的领地。面对疯狂践踏的入侵者,植物们不惜以自己的身躯阻挡僵尸前进的道路。可是僵尸的利齿不仅可以用来吃掉脑子,还可以用来吃掉植物。面对挡路的一切东西,僵尸们选择:吃掉它们!
用什么来保卫你自己的家园和脑子呢?我们只有勇气,和自己手中的那把小铲子。试设计游戏,并实现以下功能:
1.拥有图形界面,如游戏主界面和准备界面
2.能完成游戏操作,如放置植物,删除植物,生成僵尸,攻击等操作
3.正确且合理的胜负判断
4.实现卡牌冷却效果
5.两个场景的选择,晴天和黑夜。
6.背景音效的实现,如碰撞,放置植物以及收集阳光等。
7.正确显示阳光槽,植物卡牌槽等部件
8.实现九种植物和七种僵尸
9.实现调试功能,按下一些按键可以执行一些特殊操作,比如快速产生僵尸和增加阳光。
10.实现代码层级的一些基本要求,如面向对象的继承派生多态等机制,文件操作(读取媒体资源文件,读取记录用户名和游戏最长时间的文本文件),一些基本数据结构的使用(如list,map,set)等
## 2.总体设计
植物大战僵尸是一款游戏非常经典的益智类游戏,画风友好,玩法多样,整体逻辑比较清晰。本次我选择使用c++的GUI库Qt来写复现游戏。总体上来说完成了游戏加载界面,菜单选择界面,主游戏逻辑和交互界面和游戏的基本功能。由于手头的资源有限(比如植物和僵尸的贴图)以及时间等方面的限制,本游戏实现了了七种僵尸和九种植物,以及白天和黑夜两个场景模式,具有了一定的可玩性。
首先谈一下我在初期设计的主要想法。我认为,同为程序,不同种类的程序的开发思路是截然不同的。比如设计一个数据管理系统和游戏的思路是截然不同的。我认为游戏的最大特点在于它是一种交互性极强的产品形式,而且一般工程量较大,需要兼顾内在逻辑和外在用户交互界面,并且由于和用户的交互性极强,操作多样化,非常适合面向对象的开发思想。因此本次自选题我选择了实现植物大战僵尸这一经典的游戏。
基于自己的水平考虑,我选择了非常常规的经典面向对象的思路,定义良好的复用性强的基类,如果想要添加新的对象和功能,只需要从基类派生并将新类加入生成器。在逻辑和UI界面的关系选择上,让每个游戏对象负责处理自己的逻辑和动画,而不是将逻辑和画面完全分开,每回合逻辑执行完成后渲染画面。因为前者虽然效率低了一些,但是总体上说更符合人的思路,对前期的架构设计要求也没有那么高,可以后期逐步完善,拓展性更强一些。
而在要求上,我完成了必须要求和1)函数重载2)类的继承和抽象基类3)动态分配内存和文件操作4)使用了list和set等数据结构
总体上来说,需要实现的模块和功能有:
1.渲染场景:包括加载欢迎界面和游戏主界面。
2.多种植物:游戏的主要实体对象之一。
3.多种僵尸:游戏的主要实体对象之一
4.多种飞行物:如豌豆、孢子等,也是游戏的重要对象
5.多种动画:在游戏中需要根据实物的状态来更新各种动画
6.奖励物:阳光等
7.多种卡片:主要指的是种植植物是选择的卡片,需要完成冷却功能
考虑到他们都具有相同的一些特性(例如都是实体对象,都有贴图,位置,自己的主逻辑函数函数),而且为了方便主逻辑中队每个对象的遍历(如更新状态,删除对象),因此我定义了zObjcet类作为共同的基类,由zObject类派生出其余的类别。而zObject类本身由Qt的基本类别QLabel派生,因为QLabel本身属于最简单的基本对象,而且具有贴图,播放动图,设置大小等基本功能,非常适合派生出其他对象并在此基础上增加功能。
游戏的类大致结构如下图(具体结构见下方UML图),接下来将详细介绍程序的内容。
![](https://www.writebug.com/myres/static/uploads/2022/1/1/82f862e86b62e74a06c39b00c4cfcc0c.writebug)
## 3.详细设计
PARTA:基本对象——架构、类的派生关系
本游戏的UML(缩略图)如下:
(由于本图过大无法很好地插入本实验报告,建议单独到文件夹下打开观看PVZ_UML.png。)
![](https://www.writebug.com/myres/static/uploads/2022/1/1/939b8f5984b63bac457ecf563c7cc28e.writebug)
本程序一共定义了52个类,除了一个继承自Qt最基本空间QDialog的mianDialog类用于生成游戏基本图形界面框,其余所有类都继承自zObject类,而zObjcet类自身继承自Qt自带基本类型QLabel.
按照功能,zObject类直接派生出七个类,分别对应上文所说的七种实体类别和功能,七个大类分别再派生出具体的小类别,如zPlant类下派生出9种具体的植物类,而七种基类不参与具体的对象实例化,这样的优点是逻辑清楚,方便管理。下面我将主要介绍基类和其派生出的七个基本大类。
1.基类:zObject其代码实现如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/1/564487e7cc2ae7d7a45dabc2850e2ff4.writebug)
基类zObject自派生QLabel,因为QLabel非常合适定义基本实体:QLabel的SetMovie配合QMovie是显示游戏动画(素材为gif格式)的便捷利器;而且QLabel也没有什么多余的属性与方法,基本来自QWidget,只是一个普通的窗口组件。
boolalive,表示它是否活着。本属性不一定表示通俗意义的“活着”,比如一个动画播放完了,我们就可以把alive置成false,等着逻辑来把它删掉,可以用将本属性当作标记,交给逻辑中专门的死亡处理机制,从外部释放掉内存空间,并把对象删除。
virtualvoidact()=0。这个虚函数就是游戏内所有对象的核心逻辑函数。主逻辑的重要功能就是调用场上一切“活着”的对象的act()来构成整体逻辑。
intstrength表示生命值。只有植物和僵尸有这样的属性,但是还是写进了接口。其余对象默认置1即可。
zScene*scene提供了一个指向自己所处的zScene的指针,便于act()逻辑来访问一些全局的对象。zScene是游戏场景类,也由zObject派生。由于parent指针指向的是QWidget而不是zScene,此处parent指针没法优雅的访问zScene的一些特殊属性。parent强制转化为scene以后就没有了这个问题
2.场景管理类:zScene:
ZScene是负责管理其他类的类,在它的属性里面有包含其余类对象的容器QList,而其余类也有指向所在场景的指针。ZScene派生出四个具体类:zStartScene,zStartScreen,zLawnScene,zDarkScene,分别对应开始界面,开始选关界面,白天关卡界面,和夜晚关卡界面。
3.主要实体类:zPlant类和zZombie类
这两个类具有很多相似的之处,因此放在一起介绍。zPlant和zZombie是两种基本的对象,负责派生出各种丰富多彩的植物和僵尸。其共同点是都有virtualvoidhit(intdamage,boolsilence=true)方法,供其余对象调用,对它产生伤害。植物有表示它所处网格位置的intraw,column,僵尸有表示它在某行上的一维位置的doublexpos,另外僵尸还有诸多特殊状态都写在了僵尸基类里面,比�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
植物大战僵尸是一款游戏非常经典的益智类游戏,画风友好,玩法多样,整体逻辑比较清晰。本次我选择使用c++的GUI库Qt来写复现游戏。总体上来说完成了游戏加载界面,菜单选择界面,主游戏逻辑和交互界面和游戏的基本功能。 1.拥有图形界面,如游戏主界面和准备界面 2.能完成游戏操作,如放置植物,删除植物,生成僵尸,攻击等操作 3.正确且合理的胜负判断 4.实现卡牌冷却效果 5.两个场景的选择,晴天和黑夜。 6.背景音效的实现,如碰撞,放置植物以及收集阳光等。 7.正确显示阳光槽,植物卡牌槽等部件 8.实现九种植物和七种僵尸 9.实现调试功能,按下一些按键可以执行一些特殊操作,比如快速产生僵尸和增加阳光。 10.实现代码层级的一些基本要求,如面向对象的继承派生多态等机制,文件操作(读取媒体资源文件,读取记录用户名和游戏最长时间的文本文件),一些基本数据结构的使用(如list,map,set)等
资源推荐
资源详情
资源评论
收起资源包目录
基于C++(GUI)实现植物大战僵尸游戏【100012251】 (120个子文件)
zscene.cpp 17KB
zzombie.cpp 12KB
zplant.cpp 8KB
zcard.cpp 5KB
zflyingobject.cpp 4KB
zanim.cpp 2KB
zbonus.cpp 2KB
maindialog.cpp 1KB
main.cpp 173B
zobject.cpp 154B
background3_2.gif 295KB
PoleZombieWalk.gif 104KB
ZombieShield.gif 98KB
NewsWalk_1.gif 94KB
Zombie_1.gif 78KB
ZombieCone.gif 72KB
Zombie.gif 65KB
ZombieFlag.gif 63KB
NewsWalk.gif 61KB
PoleZombieAttack.gif 61KB
ZombieAttack.gif 58KB
Zombie_2.gif 56KB
ZombieShieldAttack.gif 53KB
Boom.gif 53KB
PoleZombie.gif 52KB
NewsLost.gif 51KB
ZombieBucket.gif 50KB
ZombieFlagAttack.gif 48KB
ZombieBucketAttack.gif 45KB
PoleZombieJump.gif 44KB
Sun.gif 42KB
ZombieConeAttack.gif 40KB
SunFlower.gif 40KB
NewsAttack_1.gif 38KB
NewsAttack.gif 30KB
Repeater.gif 28KB
Wallnut_2.gif 27KB
PoleZombieJump2.gif 26KB
IcePeaShooter.gif 25KB
NewsDie.gif 24KB
Peashooter.gif 21KB
ZombieDie.gif 21KB
WallNut.gif 20KB
FireTree.gif 20KB
BurnDie.gif 19KB
PoleZombieDie.gif 18KB
NewsHead.gif 17KB
CherryBomb.gif 16KB
ZombieHead.gif 15KB
Wallnut_1.gif 14KB
PoleZombieHead.gif 12KB
PotatoMine.gif 12KB
Mushroom.gif 10KB
Mush.gif 2KB
PotatoMine_mashed.gif 2KB
PeaFire.gif 907B
Fire.gif 817B
PeaIce.gif 650B
PeaHit.gif 615B
Pea.gif 602B
PotatoMine_1.gif 495B
zscene.h 3KB
zplant.h 3KB
zcard.h 2KB
zzombie.h 2KB
zanim.h 2KB
zflyingobject.h 1KB
zbonus.h 813B
maindialog.h 432B
zobject.h 322B
app.ico 1.44MB
myapp.ico 50KB
background6.jpg 184KB
background5.jpg 166KB
background3.jpg 141KB
StartScreen.jpg 124KB
background2.jpg 111KB
background4.jpg 99KB
background1.jpg 95KB
Title.jpg 45KB
LICENSE 1KB
README.md 68KB
Ö²Îï´óÕ½½©Ê¬Éè¼Æ±¨¸æ_2016010539_ ÍõÊÀ½Ü .pdf 2.9MB
PVZ_UML.png 540KB
mainlogo.png 97KB
mainlogo.png 97KB
zombatar_background_menu.png 63KB
zombatar_background_crazydave.png 45KB
card_Sunflower.png 11KB
card_IcePeaShooter.png 11KB
card_Mushroom.png 11KB
card_PotatoMine.png 10KB
card_PeaShooter.png 10KB
card_Repeater.png 10KB
card_FireTree.png 10KB
card_CherryBomb.png 10KB
card_WallNut.png 9KB
Leave.png 4KB
Shovel.png 1KB
SunBack.png 1KB
共 120 条
- 1
- 2
资源评论
神仙别闹
- 粉丝: 2668
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功