前言
文章的文字和图片来自网络,只是用于学习、交流,不具有商业用途。 版权归原作者所有。 如果有问题请马上联系我处理。
作者:计划IT社团
如果您的合作伙伴需要PS:python学习资源,请单击下面的链接获取http://t.cn/A6Zvjdun
功能介绍
最近在这个植物大战的僵尸游戏中添加了新的植物和僵尸。 由于互联网上的图像资源有限,可以添加的植物和僵尸相对较少,目前进展如下。
功能实现如下:
支持的植物类型:太阳花、豌豆射手、寒冰射手、坚果、樱桃炸弹。 新增加植物:双层豌豆射手、三层豌豆射手、食人花、香菇、土豆地雷、倭瓜。 支持的僵尸类型:普通僵尸、棋子僵尸、路障僵尸、铁桶僵尸。 新增加看报纸的僵尸。 使用json文件保存等级信息,设定僵尸出现的时间和地点。 在每次关闭开始时选择出场植物。 增加除草机。下面是游戏的截图:
如图植物卡片选择和种植图所示,游戏中可以种植植物的yjddyg共有45个有5行,每行9列)。
这篇文章介绍的是:
上方植物卡片栏的实现。 点击植物卡,将鼠标切换到植物图像。 移动鼠标时,将确定您当前位于哪个yjddyg,并显示半透明植物作为提示。代码实现所有植物卡片的名称和属性保存在单独的list中,每个list index对应一种植物。
例如,list index 0是太阳花:
card_name_list[0]是太阳花卡的名称,用于获取太阳花卡的图像。 plant_name_list[0]是太阳花的名称,用于获取太阳花卡片的图像。 plant_sun_list[0]是种植太阳花所需的太阳点数。 plant_frozen_time_list[0]是太阳花的冷却时间。植物卡片类每个植物卡都是用于显示此植物的单独Card类。
checkMouseClick函数:确定鼠标是否单击了此卡; canClick :判断这张卡能否种植是否有足够的分数,是否还在冷却时间内); update函数:通过设置图像的透明度指示是否可以选择此卡。卡片栏类MenuBar类显示了图3中的植物卡栏。
self.sun_value :当前收集的太阳点数; self.card_list:植物卡的list; setupCards函数:从已初始化的init函数遍历在该级别选择的植物卡list,依次创建Card类,设定各卡的显示位置; checkCardClick函数:检查鼠标是否单击了卡片栏上的植物卡片,如果选择了可栽培的卡片,则返回结果。代码:
33558 www.Sina.com/setupmouseimage函数用于将鼠标图像切换到选定的植物。
从self.mouse_image:plant_name中获取所选择的植物的图像; self.mouse_rect :选择植物图像的位置。 drawMouseShow函数需要将植物图像的位置设置为当前鼠标的位置。 pg.mouse.set_visiblefalse ) :通过隐藏默认的鼠标显示,可以将鼠标图像切换到选定的植物。
鼠标图片切换请先看一下map类。 代码位于source\component\map.py中。
self.map :用于保存每个yjddyg状态的二维list。 每个entry初始化为0,表示可以种植物,值为1表示该yjddyg已经种了植物。 getMapIndex函数:传递的参数返回游戏中的坐标位置,如当前鼠标位置,以及该位置在地图的哪个yjddyg中。 getMapGridPos函数:传递yjddyg的索引,返回种植在该yjddyg上的植物的坐标位置。 showPlant函数:根据传入的坐标位置,判断该位置的yjddyg是否可以栽种植物,如果可以栽种的话,就返回到该yjddyg中栽种的植物的坐标位置。
代码位于source\state\level.py中。
canSeedPlant函数:判断是否可以在当前小鼠位置种植植物; setupHintImage函数:可以在当前鼠标位置栽种植物,并且如果选择了植物卡,则设置self.hint_image以指示当前要用哪个yjddyg栽种植物。 self.hint_rect是植物种类的坐标位置。