客服

植物大战僵尸重叠种植-Python《植物大战僵尸》代码实现


作者|marble_xu

来源|CSDN原力计划获奖文章

功能介绍植物卡片选择和种植完整代码代码实现植物卡片类卡片栏类鼠标图片切换提示种在哪个方格中编译环境功能介绍

功能介绍

功能介绍

功能介绍

植物卡片选择和种植完整代码

植物卡片选择和种植

植物卡片选择和种植

完整代码

完整代码

代码实现

代码实现

代码实现

植物卡片类卡片栏类鼠标图片切换提示种在哪个方格中编译环境功能介绍

植物卡片类

植物卡片类

卡片栏类

卡片栏类

鼠标图片切换

鼠标图片切换

提示种在哪个方格中

提示种在哪个方格中

编译环境

编译环境

功能介绍

功能介绍

最近一直在给这个植物大战僵尸游戏添加新的植物和僵尸,因为网上的图片资源有限,能加的植物和僵尸比较少,目前进展如下。

功能介绍

功能介绍

功能实现如下:

支持的植物类型:太阳花,豌豆射手,寒冰射手,坚果,樱桃炸弹。新增加植物:双重豌豆射手,三重豌豆射手,食人花,小喷菇,土豆地雷,倭瓜。支持的僵尸类型:普通僵尸,棋子僵尸,路障僵尸,铁桶僵尸。新增加读报僵尸。使用json文件保存关卡信息,设置僵尸出现的时间和位置。增加每关开始时选择上场植物。增加除草机。

支持的植物类型:太阳花,豌豆射手,寒冰射手,坚果,樱桃炸弹。新增加植物:双重豌豆射手,三重豌豆射手,食人花,小喷菇,土豆地雷,倭瓜。

支持的植物类型:太阳花,豌豆射手,寒冰射手,坚果,樱桃炸弹。新增加植物:双重豌豆射手,三重豌豆射手,食人花,小喷菇,土豆地雷,倭瓜。

支持的僵尸类型:普通僵尸,棋子僵尸,路障僵尸,铁桶僵尸。新增加读报僵尸。

支持的僵尸类型:普通僵尸,棋子僵尸,路障僵尸,铁桶僵尸。新增加读报僵尸。

使用json文件保存关卡信息,设置僵尸出现的时间和位置。

使用json文件保存关卡信息,设置僵尸出现的时间和位置。

增加每关开始时选择上场植物。

增加每关开始时选择上场植物。

增加除草机。

增加除草机。

Python植物大战僵尸代码实现(1):图片加载和显示切换

https://blog.csdn.net/marble_xu/article/details/100129768

下面是游戏的截图:

图1:新增的植物和僵尸

图2:每关开始选择上场植物卡片

图3:选择植物在哪里种植

植物卡片选择和种植

植物卡片选择和种植

如图3所示,游戏中可以种植物的方格一共有45个(有5行,每行9列)。

这篇文章要介绍的是:

上方植物卡片栏的实现。点击植物卡片,鼠标切换为植物图片。鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。

上方植物卡片栏的实现。

上方植物卡片栏的实现。

点击植物卡片,鼠标切换为植物图片。

点击植物卡片,鼠标切换为植物图片。

鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。

鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。

完整代码

完整代码

游戏实现代码的github链接植物大战僵尸

https://github.com/marblexu/PythonPlantsVsZombies

这边是csdn的下载链接植物大战僵尸

https://download.csdn.net/download/marble_xu/11982275

代码实现

代码实现

所有的植物卡片的名称和属性都保存在单独的list中,每个listindex都对应一种植物。

比如listindex0就是太阳花:

card_name_list[0]是太阳花卡片的名字,用来获取太阳花卡片的图片。plant_name_list[0]是太阳花的名字,用来获取太阳花卡片的图片。plant_sun_list[0]是种植太阳花需要花费的太阳点数。plant_frozen_time_list[0]是太阳花的冷却时间。

card_name_list[0]是太阳花卡片的名字,用来获取太阳花卡片的图片。

card_name_list[0]是太阳花卡片的名字,用来获取太阳花卡片的图片。

plant_name_list[0]是太阳花的名字,用来获取太阳花卡片的图片。

plant_name_list[0]是太阳花的名字,用来获取太阳花卡片的图片。

plant_sun_list[0]是种植太阳花需要花费的太阳点数。

plant_sun_list[0]是种植太阳花需要花费的太阳点数。

plant_frozen_time_list[0]是太阳花的冷却时间。

plant_frozen_time_list[0]是太阳花的冷却时间。

代码在source\component\menubar.py中

植物卡片类

植物卡片类

代码在source\component\menubar.py中,每个植物卡片是一个单独的Card类,用来显示这个植物。

checkMouseClick函数:判断鼠标是否点击到这个卡片canClick:判断这个卡片是否能种植(有没有足够的点数,是否还在冷却时间内)update函数:通过设置图片的透明度来表示这个卡片是否能选择

checkMouseClick函数:判断鼠标是否点击到这个卡片

checkMouseClick函数:判断鼠标是否点击到这个卡片

canClick:判断这个卡片是否能种植(有没有足够的点数,是否还在冷却时间内)

canClick:判断这个卡片是否能种植(有没有足够的点数,是否还在冷却时间内)

update函数:通过设置图片的透明度来表示这个卡片是否能选择

update函数:通过设置图片的透明度来表示这个卡片是否能选择

卡片栏类

卡片栏类

代码在source\component\menubar.py中,MenuBar类显示图3中的植物卡片栏:

self.sun_value:当前采集的太阳点数self.card_list:植物卡片的listsetupCards函数:遍历初始化__init__函数中传入这个关卡选好的植物卡片list,依次创建Card类,设置每个卡片的显示位置。checkCardClick函数:检查鼠标是否点击了卡片栏上的某个植物卡片,如果选择了一个可种植的卡片,返回结果。

self.sun_value:当前采集的太阳点数

self.sun_value:当前采集的太阳点数

self.card_list:植物卡片的list

self.card_list:植物卡片的list

setupCards函数:遍历初始化__init__函数中传入这个关卡选好的植物卡片list,依次创建Card类,设置每个卡片的显示位置。

setupCards函数:遍历初始化__init__函数中传入这个关卡选好的植物卡片list,依次创建Card类,设置每个卡片的显示位置。

checkCardClick函数:检查鼠标是否点击了卡片栏上的某个植物卡片,如果选择了一个可种植的卡片,返回结果。

checkCardClick函数:检查鼠标是否点击了卡片栏上的某个植物卡片,如果选择了一个可种植的卡片,返回结果。

鼠标图片切换

鼠标图片切换

代码在source\state\level.py中,setupMouseImage函数实现鼠标图片切换为选中的植物。

self.mouse_image:根据plant_name获取选中的植物图片self.mouse_rect:选中植物图片的位置,在drawMouseShow函数中,需要将植物图片的位置设置成当前鼠标的位置pg.mouse.set_visible(False):隐藏默认的鼠标显示,这样效果就是鼠标图片切换为选中的植物了。

self.mouse_image:根据plant_name获取选中的植物图片

self.mouse_image:根据plant_name获取选中的植物图片

self.mouse_rect:选中植物图片的位置,在drawMouseShow函数中,需要将植物图片的位置设置成当前鼠标的位置

self.mouse_rect:选中植物图片的位置,在drawMouseShow函数中,需要将植物图片的位置设置成当前鼠标的位置

pg.mouse.set_visible(False):隐藏默认的鼠标显示,这样效果就是鼠标图片切换为选中的植物了。

pg.mouse.set_visible(False):隐藏默认的鼠标显示,这样效果就是鼠标图片切换为选中的植物了。

提示种在哪个方格中

提示种在哪个方格中

先看下map类,代码在source\component\map.py中

self.map:二维list,用来保存每个方格的状态。每个entry初始化为0,表示可以种植物,值为1时表示这个方格已经种了植物。getMapIndex函数:传入参数是游戏中的坐标位置(比如当前鼠标的位置),返回该位置在地图的哪个方格中。getMapGridPos函数:传入一个方格的index,返回在该方格中种植物的坐标位置。showPlant函数:根据传入的坐标位置,判断该位置所在的方格是否能种植物,如果能种,就返回返回在该方格中种植物的坐标位置。

self.map:二维list,用来保存每个方格的状态。每个entry初始化为0,表示可以种植物,值为1时表示这个方格已经种了植物。

self.map:二维list,用来保存每个方格的状态。每个entry初始化为0,表示可以种植物,值为1时表示这个方格已经种了植物。

getMapIndex函数:传入参数是游戏中的坐标位置(比如当前鼠标的位置),返回该位置在地图的哪个方格中。

getMapIndex函数:传入参数是游戏中的坐标位置(比如当前鼠标的位置),返回该位置在地图的哪个方格中。

getMapGridPos函数:传入一个方格的index,返回在该方格中种植物的坐标位置。

getMapGridPos函数:传入一个方格的index,返回在该方格中种植物的坐标位置。

showPlant函数:根据传入的坐标位置,判断该位置所在的方格是否能种植物,如果能种,就返回返回在该方格中种植物的坐标位置。

showPlant函数:根据传入的坐标位置,判断该位置所在的方格是否能种植物,如果能种,就返回返回在该方格中种植物的坐标位置。

代码在source\state\level.py中:

canSeedPlant函数:判断当前鼠标位置能否种植物setupHintImage函数:如果当前鼠标位置能种植物,且有选择了一个植物卡片,则设置self.hint_image显示当前会在哪一个方格中种植物,self.hint_rect是植物种的坐标位置。

canSeedPlant函数:判断当前鼠标位置能否种植物

canSeedPlant函数:判断当前鼠标位置能否种植物

setupHintImage函数:如果当前鼠标位置能种植物,且有选择了一个植物卡片,则设置self.hint_image显示当前会在哪一个方格中种植物,self.hint_rect是植物种的坐标位置。

setupHintImage函数:如果当前鼠标位置能种植物,且有选择了一个植物卡片,则设置self.hint_image显示当前会在哪一个方格中种植物,self.hint_rect是植物种的坐标位置。

编译环境

编译环境

python3.7+pygame1.9

版权声明:本文为CSDN博主「marble_xu」原创,版权归作者所有。

版权声明:本文为CSDN博主「marble_xu」原创,版权归作者所有。

技术的道路一个人走着极为艰难?

技术的道路一个人走着极为艰难?

一身的本领得不施展?

一身的本领得不施展?

优质的文章得不到曝光?

优质的文章得不到曝光?

植物大战僵尸重叠种植-植物大战僵尸2

毒影菇,听名字就大概能够猜到它的主要功能,就是让僵尸中毒,奇特的是中了毒影菇的毒之后僵尸会传染,从而导致僵尸部队一片片倒下,强度和防御力同时也会下降,这样其他植物能够很容易的杀死僵尸,保护己方阵营不受破坏。

第二种:缩小紫罗兰

缩小紫罗兰本身个头矮小,事实上它并不是将自己缩小,它的功能是把小鬼僵尸变小,并移送到看不见的地方,这种做法其实和让僵尸瞬间消失没什么两样。进阶前威力不怎么样,一旦进阶后,能把一个范围内的僵尸都缩小,而且能够降低他们的防御力和攻击力,对整个阵营的作用都很大。

第三种:潜伏芹菜

潜伏芹菜的出场方式和其他植物不太一样,它只有在僵尸走过去才会钻出泥土,从后面给予僵尸致命打击。一般的植物都是正面面对僵尸发起进攻,使用潜伏芹菜能够发挥战术作用,让僵尸猝不及防。

第四种:魅惑菇

蘑菇家族的巫师,它的主要功能就是释放魅惑之力,控制住僵尸,把僵尸变成自己人,被魅惑的僵尸会从反方向走回去攻击其他僵尸,造成僵尸阵营一片混乱,可以很大的节省空格和拖时间,不需要一会儿就能够全部消灭。

植物大战僵尸重叠种植-植物大战僵尸

在植物大战僵尸中,植物是僵尸的死对头,因为有植物在,僵尸就无法顺利的吃掉人类,所以植物一直是僵尸最大的敌人!植物与僵尸之间的战争,大多都是植物以胜利结束,而僵尸大多都是以失败告终!虽然僵尸偶尔也有胜利,但如果这5种植物没有被击杀的话,僵尸想赢非常困难!下面就来说说这5种植物是僵尸们的心头大患,没有它们僵尸能赢!

1、高坚果

高坚果是一道阻碍僵尸前进的厚实墙壁,高坚果的防御力和血量都远超坚果,特别是在前期的时候,普通僵尸没有3只以上根本咬不动!而且只需125点阳光就能够种植的高坚果,只要种植出来,就可以拖住僵尸非常久,对于僵尸来说,时间拖得越久,就越对它们不利,因为只要植物们发育起来,那么僵尸的灭亡只是时间问题!

2、寒冰豌豆

寒冰豌豆是前期关卡最常用的一种植物,它的作用是可以减速被攻击到的僵尸,这对本来行走速度本就不快的僵尸来说,无疑是雪上加霜。而且寒冰豌豆的伤害也不低,普通僵尸2~3发子弹就能够搞定,防御高的僵尸也会在一直减速的状态下被寒冰豌豆击杀,可以说寒冰豌豆在前期当中最克僵尸!

3、玉米投手

玉米投手是一个非常好用的植物,它的阳光需求不多,只要100点就能够种植。对于僵尸来说,这就非常糟糕了,因为阳光点需求不多,可以大量种植,而且玉米投手可以投掷黄油,被命中的僵尸会被定住在原地,如果玉米投手多的话,就只能在原地等死了。对于僵尸来说,无论是前中后期,玉米投手都是一个非常令他们不爽的植物!

4、双发射手

双发射手可以说是豌豆射手的升级版,因为它在前期能够最僵尸造成巨额的伤害,与豌豆射手不同都是,它每次都能够快速的发射两颗豌豆子弹,普通僵尸只需攻击两次就能击杀,而对于防御高的僵尸来说,死亡只是时间的问题!但由于阳光点的原因,因此在前期的时候双发射手无法大量种植,这对僵尸来说无疑是一个好事,但对于双发射手的输出,僵尸只能沉默。

5、向日葵

在游戏中,向日葵绝对是僵尸的头号目标!因为向日葵的存在,可以加速植物们的大量种植,对于僵尸来说这是非常不利的,这也是为什么僵尸老是失败的原因,所以只要有机会,僵尸会毫不犹豫的把向日葵吃掉!如果让僵尸选择去掉一种植物的话,那么向日葵就是那个僵尸要去掉的植物!如果没有向日葵,僵尸可以说赢的几率非常多,甚至百分百能赢!

小伙伴,如果你是僵尸阵营的,你觉得还有什么植物是僵尸阵营的心头大患呢?不妨在下方的评论区中留言说说吧!

看完植物大战僵尸重叠种植-Python《植物大战僵尸》代码实现全文,相信大家对植物大战僵尸有了更深的了解,欢迎下载ourplay免费为您提供植物大战僵尸的加速以及海外环境运行,让您畅玩海外游戏。

相关攻略
植物大战僵尸2五强和五废
2824浏览
发布时间: 2023-06-05
植物大战僵尸有趣玩法
1199浏览
发布时间: 2023-06-05
植物大战僵尸打不开
1355浏览
发布时间: 2023-06-05
植物大战僵尸2平民解锁顺序
1155浏览
发布时间: 2023-06-05
植物大战僵尸2世界开启最佳顺序
1517浏览
发布时间: 2023-06-05
植物大战僵尸冒险模式有几关
1522浏览
发布时间: 2023-06-05
发现好内容
游戏单
攻略
问答
新闻
星球社区
植物大战僵尸
扫码下载
扫码下载