植物大战僵尸的代码如何使用python来实现
前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:程序IT圈
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
功能介绍
最近一直在给这个植物大战僵尸游戏添加新的植物和僵尸, 因为网上的图片资源有限,能加的植物和僵尸比较少, 目前进展如下。
功能实现如下:
- 支持的植物类型:太阳花,豌豆射手,寒冰射手,坚果,樱桃炸弹。新增加植物:双重豌豆射手,三重豌豆射手,食人花 ,小喷菇,土豆地雷,倭瓜。
- 支持的僵尸类型:普通僵尸,棋子僵尸,路障僵尸,铁桶僵尸。新增加读报僵尸。
- 使用json文件保存关卡信息,设置僵尸出现的时间和位置。
- 增加每关开始时选择上场植物。
- 增加除草机。
下面是游戏的截图:
植物卡片选择和种植
如图所示,游戏中可以种植物的方格一共有45个(有5行,每行9列)。
这篇文章要介绍的是:
- 上方植物卡片栏的实现。
- 点击植物卡片,鼠标切换为植物图片。
- 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
代码实现
所有的植物卡片的名称和属性都保存在单独的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函数:检查鼠标是否点击了卡片栏上的某个植物卡片,如果选择了一个可种植的卡片,返回结果。
代码:
鼠标图片切换
setupMouseImage 函数实现鼠标图片切换为选中的植物:
- self.mouse_image :根据 plant_name 获取选中的植物图片;
- self.mouse_rect:选中植物图片的位置,在drawMouseShow函数中,需要将植物图片的位置设置成当前鼠标的位置;
- pg.mouse.set_visible(False):隐藏默认的鼠标显示,这样效果就是鼠标图片切换为选中的植物了。
提示种在哪个方格中
先看下map类,代码在source\component\map.py 中:
- self.map:二维list,用来保存每个方格的状态。每个entry初始化为 0, 表示可以种植物,值为1时表示这个方格已经种了植物。
- getMapIndex 函数:传入参数是游戏中的坐标位置(比如当前鼠标的位置),返回该位置在地图的哪个方格中。
- getMapGridPos 函数:传入一个方格的index,返回在该方格中种植物的坐标位置。
- showPlant 函数:根据传入的坐标位置,判断该位置所在的方格是否能种植物,如果能种,就返回返回在该方格中种植物的坐标位置。
代码在source\state\level.py中:
- canSeedPlant 函数:判断当前鼠标位置能否种植物;
- setupHintImage 函数:如果当前鼠标位置能种植物,且有选择了一个植物卡片,则设置self.hint_image 显示当前会在哪一个方格中种植物,self.hint_rect 是植物种的坐标位置。
植物大战僵尸的代码如何使用python来实现
前言
文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:程序IT圈
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun
功能介绍
最近一直在给这个植物大战僵尸游戏添加新的植物和僵尸, 因为网上的图片资源有限,能加的植物和僵尸比较少, 目前进展如下。
功能实现如下:
- 支持的植物类型:太阳花,豌豆射手,寒冰射手,坚果,樱桃炸弹。新增加植物:双重豌豆射手,三重豌豆射手,食人花 ,小喷菇,土豆地雷,倭瓜。
- 支持的僵尸类型:普通僵尸,棋子僵尸,路障僵尸,铁桶僵尸。新增加读报僵尸。
- 使用json文件保存关卡信息,设置僵尸出现的时间和位置。
- 增加每关开始时选择上场植物。
- 增加除草机。
下面是游戏的截图:
植物卡片选择和种植
如图所示,游戏中可以种植物的方格一共有45个(有5行,每行9列)。
这篇文章要介绍的是:
- 上方植物卡片栏的实现。
- 点击植物卡片,鼠标切换为植物图片。
- 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
代码实现
所有的植物卡片的名称和属性都保存在单独的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函数:检查鼠标是否点击了卡片栏上的某个植物卡片,如果选择了一个可种植的卡片,返回结果。
代码:
鼠标图片切换
setupMouseImage 函数实现鼠标图片切换为选中的植物:
- self.mouse_image :根据 plant_name 获取选中的植物图片;
- self.mouse_rect:选中植物图片的位置,在drawMouseShow函数中,需要将植物图片的位置设置成当前鼠标的位置;
- pg.mouse.set_visible(False):隐藏默认的鼠标显示,这样效果就是鼠标图片切换为选中的植物了。
提示种在哪个方格中
先看下map类,代码在source\component\map.py 中:
- self.map:二维list,用来保存每个方格的状态。每个entry初始化为 0, 表示可以种植物,值为1时表示这个方格已经种了植物。
- getMapIndex 函数:传入参数是游戏中的坐标位置(比如当前鼠标的位置),返回该位置在地图的哪个方格中。
- getMapGridPos 函数:传入一个方格的index,返回在该方格中种植物的坐标位置。
- showPlant 函数:根据传入的坐标位置,判断该位置所在的方格是否能种植物,如果能种,就返回返回在该方格中种植物的坐标位置。
代码在source\state\level.py中:
- canSeedPlant 函数:判断当前鼠标位置能否种植物;
- setupHintImage 函数:如果当前鼠标位置能种植物,且有选择了一个植物卡片,则设置self.hint_image 显示当前会在哪一个方格中种植物,self.hint_rect 是植物种的坐标位置。
如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?
说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。
以上这些教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!
获取方式,私信小编 “ 资料 ”,即可免费获取哦!
植物大战僵尸的代码如何使用python来实现的更多相关文章
- 用 Python 实现植物大战僵尸代码!
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: marble_xu GitHub地址:https://github ...
- Python 植物大战僵尸代码实现: 图片加载和显示切换
游戏介绍以前很火的植物大战僵尸游戏, 本想在网上找个python版本游戏学习下,无奈没有发现比较完整的,那就自己来写一个把.图片资源是从github上下载的,因为图片资源有限,只能实现几种植物和僵尸. ...
- 使用Python对植物大战僵尸学习研究
根据上一篇 使用Python读写游戏1 中,使用Python win32库,对一款游戏进行了读内存 操作. 今天来写一下对内存进行写的操作 正文 要进行32位的读写,首先了解一下要用到的几个函数,通过 ...
- 植物大战僵尸游戏的开发(python)
装备东西: 搭建好python环境, 四张图片,(背景图片,炮弹图片,僵尸图片,豌豆图片),就ok了 没有安装pygame的需要进行安装 pip install pygame 参考视频 # 植物大 ...
- JS实现植物大战僵尸小游戏,代码记录及效果展示
前几天看到了一个很有趣的demo,用js制作植物大战僵尸小游戏,本着学习的心态,对照着做了一下,发现这里面的一些代码设计的确很精妙,这里分享下源码和效果,如果有需要,可以看下. 效果如下: 下载地址
- python修改内存,(修改植物大战僵尸)
import win32process # 进程模块 import win32con # 系统定义 import win32api # 调用系统模块 import ctypes # c语言类型 imp ...
- 植物大战僵尸中文第二版和年度版 游戏分析及delphi源码
00413184 |. E8 77E30100 |CALL PlantsVs.00431500 ; 地上的物品00413189 |. 8D7424 10 ...
- tyvj P1135 - 植物大战僵尸 最大权闭合图
P1135 - 植物大战僵尸 From ytt Normal (OI)总时限:10s 内存限制:128MB 代码长度限制:64KB 背景 Background 虽然这么多天了,,虽然 ...
- [置顶] cocos2d-x 植物大战僵尸(13)类似酷跑的【同一角色不同动画间的切换的实现】
有几天没和大家分享博客了,原因很简单,就是我在运行第12章所写的代码时:(开始一切正常,不过没多久就出现了内存泄露!.可能求成心切吧,当时没多加考虑就把代码发上去了.我在此对看过第12章得 ...
随机推荐
- 初步了解HTTP协议
1.HTTP简介 全称:Hyper Text Transfer Protocol,中文名:超文本传输协议. 功能:HTTP是客户端浏览器或其他程序与web服务器之间的应用层通信协议. 特点:a.支持 ...
- CF230B T-primes 题解
原题链接 简要题意: 判断一个数是否只有 \(3\) 个因数. 首先,如果一个数有奇数个因数,那么这个数是完全平方数. 道理很简单:因数是成对的,那么必然存在 \(k^2 = n\),此时 \(k\) ...
- 题解 P3205 【[HNOI2010]合唱队】
讲讲我的做法 看了题目发现要用区间\(dp\),为什么? 我们发现区间\(dp\)有一个性质--大区间包涵小区间,这道题就符合这样的一个性质 所以我们要用区间\(dp\)来解决这道题. 如何设计状态 ...
- nopcommerce4.0 安装步骤
前言:近期因工作要求接触nopcommerce,最新版本为4.0,以下所有安装都是基于此版本.接下来我可能会写一系列,为了让自己更好的掌握,也希望能帮助到大家 好记性不如烂笔头,新手也可以避免走我的弯 ...
- 快速排序-无序数组K小元素
13:07:382020-03-10 11:16:13 问题描述: 找到一个无序数组中第K小的数 样例 1: 输入: [3, 4, 1, 2, 5], k = 3 输出: 3 样例 2: 输入: [1 ...
- 【总结】办公&编程&学习你可能需要这些小利器!
偶然想到自己从最开始的编程小白,什么都不懂,看啥啥新鲜的时期,到现在颇有"蓦然回首,那人却在灯火阑珊处"的感觉,遂想整理一下这一路学习我个人发现的在办公.编程或者学新知识等方面针对 ...
- 一个完整的机器学习项目在Python中的演练(二)
大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习.但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中.就像你的脑海中已经有了一块块"拼 ...
- Android 数据库框架 DBFlow 的使用
原文首发于微信公众号:jzman-blog,欢迎关注交流! DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处 ...
- ssh-add和ssh-agent
注: 因为在ssh-agent异常关闭或者新开窗口是会导致ssh-add找不到私钥,导致添加的私钥无效,所以下面使用keychain管理 ssh-add 参数 -l 查看代理中的私钥 -L 查看代理中 ...
- NKOJ4241 蚯蚓 (【NOIP2016 DAY2】)
问题描述 输入格式 第一行包含六个整数n,m,q,u,v,t,其中:n,m,q的意义见问题描述: u,v,t均为正整数:你需要自己计算p=u/v(保证0<u<v)t是输出参数,其含义将会在 ...