首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏PyQt5游戏

    【已开源】PyQt5实现植物VS僵尸游戏

    本次使用PyQt5开发了一款植物VS僵尸游戏,包含45种植物28种僵尸,欢迎各位下载体验啊 ,每类元素内部采用多继承,这考验了作者的面向对象编程:植物僵尸、子弹都以QLabe为基类,再去实现自己内部特殊的属性,比如:豌豆射手属于射手类,所有射手类的植物都会发射直线的子弹,撑杆跳僵尸会跳过遇到的第一株植物僵尸攻击僵尸碰撞检测、特殊植物特性开发、僵尸特性开发、这是主要的耗时点,加上不同的游戏场景联动,测试也是耗费了很长时间。 这里介绍一下游戏场景吧:整个游戏场景是一个5x9的网格布局,布局里是一个个的item,我们种植的植物通过addWidget放到item的layout里,然后僵尸都是直线僵尸,通过设置的定时器来减少僵尸x 的数据,实现僵尸的自右向左移动,在此期间遇到植物后停下来攻击植物直到自己死亡或者植物死亡再继续向左移动。

    58700编辑于 2025-07-23
  • 来自专栏码农UP2U

    植物大战僵尸辅助

    孩子一直迷恋植物大战僵尸这款游戏,从一开始的水平不行,到后来经常看植物大战僵尸的过关视频来提升自己的游戏水平,到现在游戏是玩的越来越好了,至少感觉植物大战僵尸这个游戏水平比我强很多。 为了希望他能进一步的在游戏中能够学习到知识,我为他写了一个简单的修改阳光和种植植物后免冷却时间的辅助工具。 SUN_VALUE_ADDRESS 0x007794f8 // 阳光基址 // 通过窗口名查找句柄 HWND hGameWnd = NULL; hGameWnd = FindWindow(NULL, _T("Plants vs 种植植物免冷却的功能,可以通过 CE 找到格子所在的内存,然后找到修改该格子状态的代码,最后将该段代码用 NOP 指令替换掉即可。 (NULL, _T("Plants vs.

    1.1K30发布于 2020-08-26
  • 来自专栏全栈程序员必看

    c语言也能写植物大战僵尸吗_植物大战僵尸僵尸写的纸条

    不少同学都玩过《植物大战僵尸》,最近PopCap公司又带来了新版的消息,这次高兴的轮到Xbox的用户了,日前PopCap公司公布了《植物大战僵尸》XBLA版的截图,这个版本的《植物大战僵尸》引入了多人合作与对抗模式 游戏最终完成情况C语言植物大战僵尸 第一章 需求分析 设计一个双人对战的植物大战僵尸,两人在一台电脑上玩。 植物方使用鼠标控制,基本上与原版的控制的方法一样。   }__MAPNATURE;   __MAPNATURE _MAP[5][9]; //植物的格子  __MAPNATURE _MAPZOM[5][3]; //僵尸的格子 Jetbrains全家桶 1年46,售后保障稳定 3.2.2卡片元素 植物僵尸都有选择的卡片,如图所示 植物植物的卡片,僵尸僵尸的卡片。 例如:格子里没植物僵尸通过;僵尸碰到豌豆射手,坚果墙,向日葵就停下来开吃,同时,格子的生命值不停地减,直到吃掉植物,向前通行,当是撑杆僵尸有一个杆子,碰到它们后要跳过它们;僵尸碰到炸弹,窝瓜,食人花就被吃掉或炸死

    2.6K30编辑于 2022-11-01
  • 植物大战僵尸:寻找召唤僵尸关键CALL

    8.回到游戏等待出现僵尸,观察发现第一个地址【00471B57】并不是出现僵尸的地址,我们取消这个断点,然后按下【F9】让游戏跑起来。 9.我们直接RETN返回到上一层,会看到如下代码,直接在PUSH地址上下一个【F2】断点,然后运行游戏,回到游戏等待出现新的僵尸,这里我为了演示方便重新开了一局。 9.我们在以下位置直接下【F2】断点,等待出现僵尸OD会直接断下,我们经过单步调试然后记下这些地址参数。 13.此处我们已经发现了基地址,我们直接记下来吧 【006A9F38】偏移是【768】指向的就是僵尸的对象地址。 14.使用代码注入器测试一下效果。 转到召唤僵尸CALL:[00413055] 执行到返回出CALL 在004140C9的地方直接给mov eax,1

    1.2K30编辑于 2022-12-28
  • 来自专栏AIoT技术交流、分享

    Python实现植物大战僵尸

    植物大战僵尸》是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售。玩家可通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上。 最近在逛GitHub时看到一款基于Python的植物大战僵尸,用鼠标收集阳光,选择植物卡片并播种植物,原汁原味,满满的回忆,目前该项目仅仅支持冒险模式,项目效果如下所示: ? 该项目使用json文件存储关卡数据(例如僵尸的位置和时间,背景信息),并且支持白天状态功能和夜间状态切换功能。 实施植物有:向日葵,豌豆,wallnut,snowpeashooter,cherrybomb,threepeashooter,剁碎,puffshroom,potatomine,穗状花序,scaredyshroom

    1.1K30发布于 2021-01-20
  • 来自专栏码农UP2U

    植物大战僵尸全屏奶油

    植物大战僵尸》这个游戏中想让僵尸走慢一点,方法挺多的,可以使用冰冻豌豆射手,也可以使用玉米投手,也可以使用冰川菇。这里使用玉米投手的奶油,让僵尸走的慢些。 僵尸头上顶奶油,是僵尸的一个状态,这个状态在僵尸基址的 B0 偏移处。僵尸坐标的偏移在僵尸基址的 2C 处。 当僵尸离房子比较近时,让僵尸头上顶奶油,那么就需要判断僵尸的位置。 通过分析,僵尸移动的指令在如下位置: 0052AB25 - 74 09 - je 0052AB30 0052AB27 - D9 46 2C - 写入判断和修改僵尸状态的代码,如下的代码: 00400F00 - 60 - pushad 00400F01 - 9C - - popad 00400F24 - 0F85 BE9C1200 - jne 0052ABE8 00400F2A - E9 159C1200 - jmp 0052AB44

    35020编辑于 2023-09-02
  • 植物大战僵尸:分析植物的攻击速度

    实验目标:植物大战僵尸中,植物是有攻击速度的,比如每隔一段时间会吐出一些子弹,那么由此可判断吐出子弹应该是由一个计数器控制的,也就是说只要我们能够找到控制植物攻击的时钟并改写它,也就可以实现植物的无限吐子弹 吐出子弹的遍历技巧: CE附加游戏 -> 手动种下豌豆射手 -> 搜索未知初始化数据(未攻击) 出现僵尸 -> 开始攻击的时候 -> 使用变速精灵或变速齿轮将攻击速度放慢 -> 搜索减少的数值 回到游戏 等待豌豆射手再次吐出子弹 -> CE直接搜索变大的数值 -> 最后剩下的地址中 数值在(0-1000)以内的就是 1.运行游戏并使用CE【直接附加】进程,为了方便调试请自行将阳光改为【99999】,等待僵尸出现后 5.此时在【14498DB0】动态地址上面【右键】选择,【查找是什么改写了这个地址】,会看到【0045F8A9】是一个时钟计数器,而下方的【0045F8CA】则在每次豌豆射手吐出子弹的时候递增,我们把这两个地址通通记下来 6.其实上方的两个地址相隔的不是太远,使用哪一个都可以跳转到核心代码处,此处我们就直接查找定时器的地址吧,OD直接附加游戏进程,然后【Ctrl + G】跳转到【0045F8A9】,直接在此处下断点,回到游戏豌豆射手攻击时

    99510编辑于 2022-12-28
  • 来自专栏Unity3d程序开发

    cocos植物大战僵尸(四)选择植物卡片:植物卡片类

    2.4 选择植物卡片 在播完地图滚动后出现选择植物卡片层。能够选择相应的植物进行游戏。 2.4.1 植物卡片类 植物卡片是实体类的子类。实体类是游戏中一切能看到的,可操作的游戏元素。 植物卡片具备以下功能:点击自身判断;根据名字读json显示花费阳光值,冷却时间;冷却跑秒。 m_labCoolDown,labCoolDown);//冷却的标签 CC_SYNTHESIZE(int, m_iCurCoolDownTime, iCurCoolDownTime);//正在进行的冷却时间 }; 植物卡片在选择面板中要显示出自身花费阳光值

    51020编辑于 2023-08-24
  • 来自专栏Utopia

    前端小游戏——植物大战僵尸

    给大家分享一个植物大战僵尸网页游戏源代码,感兴趣的小伙伴可收藏学习 ???? 可怕的僵尸即将入侵,每种僵尸都有不同的特点,例如铁桶僵尸拥有极强的抗击打能力,矿工僵尸可以挖地道绕过种植在土壤表面的植物等。玩家防御僵尸的方式就是栽种植物。 49种植物每种都有不同的功能,例如樱桃炸弹可以和周围一定范围内的所有僵尸同归于尽,而食人花可以吃掉最靠近自己的一只僵尸。玩家可以针对不同僵尸的弱点来合理地种植植物,这也是胜利的诀窍。 《植物大战僵尸》集成了即时战略、塔防御战和卡片收集等要素,玩家控制植物抵御僵尸的进攻,保护这片植物园。 战术范围包括很广,植物的搭配、战斗时的阵型、植物僵尸相遇时,是战是防这都属于战术的范畴。正确的战术是玩家在战斗中胜利的关键,选择正确的战术,需要先分析情况,再做出决定。

    94640编辑于 2023-03-21
  • 植物大战僵尸:查找植物叠加种植CALL

    实验目标:我们都知道植物大战僵尸游戏中植物是不可以叠加种植的,也就是一个格子只能种植一个植物,今天我们将实现一个格子里种植无限多的植物。 ,前面三个分别是拿起植物和放下植物的代码,我们这里不需要考虑。 8.关闭CE后,直接打开OD并附加植物大战僵尸游戏进程,然后按下【F9】让程序先跑起来,然后【Ctrl + G】输入【00401000】回到程序领空。 9.我们分别定位到上面找到的那几个地址上,【00410AC1】,【00410865】,【00410a91】,【0041239A】,然后观察后分别下断点。 ,然后按下【F9】让程序跑起来。

    1.2K20编辑于 2022-12-28
  • 植物大战僵尸植物栏无冷却的找法

    实验目标:通过使用CE遍历内存,定位到植物无冷却的核心代码处,并通过修改关键的跳转来实现所有植物的无冷却。 1 拿起植物-> 搜0 -> 放下植物搜1 ->拿起植物搜0-> 一直重复-> 地址一般在最后面 第一种遍历修改方式 1.打开CE附加植物大战僵尸,然后种植一颗向日葵,搜索未知初始化数据。 5.接下来我们使用OD直接附加进程,然后直接【F9】运行程序,默认会停在系统领空,直接按下【Ctrl + G】输入【00401000】去程序领空,接着搜索【0048728C】会看到如下代码。 CALL所以只要我们将跳转NOP掉的话,所有的植物自然就无冷却了。 ,01则表示放下了植物

    1.5K30编辑于 2022-12-28
  • 来自专栏python学习教程

    Python开发植物大战僵尸游戏

    python开发植物大战僵尸游戏 ? 1.引入需要的模块,配置图片路径,设置界面宽高背景颜色,创建游戏主入口。 创建僵尸类 #9 僵尸类 class Zombie(pygame.sprite.Sprite): def __init__(self,x,y): super(Zombie, self 判断僵尸是否碰撞到植物,如果碰撞,调用攻击植物的方法 def hit_plant(self): for plant in MainGame.plants_list: True self.eat_plant(plant) #9 僵尸攻击植物 def eat_plant(self,plant): #9 植物生命值减少 调用初始化僵尸的方法 self.init_zombies() #9 调用展示僵尸的方法 self.load_zombies()

    1.2K10发布于 2020-08-10
  • 植物大战僵尸:辅助制作高级技巧

    方框中,此时我们回到CE中(自动汇编窗口不要关闭),在内存查看器窗口选择【视图】->【内存区域】 我们需要浏览内存区域,找出一个具有读写权限的空地址,并且类型为映像的,这里还需要看后面的模块一定要是植物大战僵尸文件里的模块 无冷却遍历技巧: 打开CE-> 搜索类型选择字节类型-> 在植物亮的状态时搜索1 拿起植物-> 搜0 -> 放下植物搜1 ->拿起植物搜0-> 一直重复-> 地址一般在最后面 1.首先你要通过上面的遍历技巧找到这个动态地址 ,将其锁定1后植物即可无限种植,效果如下所示: 2.接着在该地址上面右键,选择【是什么改写了这个地址】,然后我们回到游戏,拿起植物然后直接右键放下,会出现两条汇编指令。 3.继续查找这个动态地址【FE7E60】,此时我们可以看到基址【006A9EC0】,通过手工计算我们已经知道了其公式为【006A9EC0 + 768 + 5560】完成。 - 768 = 025B9E18 ------------------------------------------------------------------ 基址(绿了说明到头了):025B9E18

    1.4K20编辑于 2022-12-28
  • 植物大战僵尸:无限阳光辅助开发

    从本节课开始我们将进入实战环节,我们将手动分析植物大战僵尸的一些功能的实现并编写辅助,并根据章节的深入一步一步的完善我们的辅助,为啥这里使用植物大战僵尸呢? 本来想使用网络游戏的,但涉及到驱动过保护和版权的问题暂时不能够分析,准备分析一些大型单机游戏的后来发现调试起来不太方便,不如就用植物大战僵尸。 这一小关我们将完成植物大战僵尸里面的阳光值的修改,以下实战内容使用了CE基础篇的第1关与第4关的搜索技巧,如果你不是很熟的话,可以去看一下这两关,本关是最简单也是最重要的一关 游戏内存的遍历(找到基地址与偏移 公式:   006A9EC0+768+5560=动态地址 9.用CE添加一个指针确认一下,这里读取到了数据,等于75,回到游戏发现阳光是75说明查找正确了。 如下,游戏中与CE中显示的数值相同。

    1K20编辑于 2022-12-28
  • 植物大战僵尸:逆向分析阳光

    植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析 现在我们就进入正题,开始挖掘游戏数据,先从最简单的阳光地址找起来吧,首先你需要运行游戏并附加植物大战僵尸进程,然后我们开启新的游戏,首次扫描我们先来遍历4字节的50,也就是搜索当前阳光的数量,当然你也可以尝试搜索金钱数量等 ] 该数据明显属于全局数据区 00467B00 - 8B 0D C09E6A00 - mov ecx,[006A9EC0] << 最后总结出定位静态基址公式 【阳光= [[[006a9ec0]+ ,此游戏的矩阵可能就是5*9这么一个范围,假设在横坐标X轴如果两个植物之间的相对偏移是14C(14C就是太阳花结构体的实际长度),那么我们找到第一个植物的基址与偏移,每次相加14C的偏移量,则可遍历到下一个植物的内存地址 CloseHandle(hProcess); } int main() { for (int i = 0; i < 10;i++) InjectCode(3644, AddSun); } 至此我们的植物大战僵尸关于阳光的分析就到此结束了

    1.1K20编辑于 2022-12-28
  • 植物大战僵尸:实现全屏爆炸

    植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析 当我们种植植物的时候必定会触发种植Call,那么此时我们只要遍历出植物的种植过程即可,通过CE我们找到拿起植物的关键代码,我们可以猜测植物拿起来这个动作之后应该就是种植了,只要我们能够找到控制拿起植物的代码 void FullBlast() { DWORD addr = 0x0040D120; for (int x = 0; x < 5; x++) { for (int y = 0; y < 9; y++) { __asm { pushad mov esi, dword ptr ds:[0x006a9ec0] mov esi, dword ptr ds 至此我们的植物大战僵尸分析就到此结束了,其他的比如植物无敌,植物攻击加速等,就留一个作业,大家开动脑筋看能不能自己实现,回顾前面所讲的外挂制作技巧,你是否已经完全理解了呢?

    85230编辑于 2022-12-28
  • 植物大战僵尸:代码实现无限阳光

    本次实验内容:通过逆向分析植物阳光数量的动态地址找到阳光的基址与偏移,从而实现每次启动游戏都能够使用基址加偏移的方式定位阳光数据,最后我们将通过使用C语言编写通用辅助实现简单的无限阳光外挂,在教程开始之前我们先来说一下为什么会有动态地址与基址的概念 现在我们就进入正题,开始挖掘游戏数据,先从最简单的阳光地址找起来吧,首先你需要运行游戏并附加植物大战僵尸进程,然后我们开启新的游戏,首次扫描我们先来遍历4字节的50,也就是搜索当前阳光的数量,当然你也可以尝试搜索金钱数量等 [ecx+768]这个地址 0045B6FD - 8B 81 68070000 - mov eax,[ecx+00000768] << 最后我们继续跟随查找ECX里面存储的数据得到 [006A9EC0 ] 该数据明显属于全局数据区 00467B00 - 8B 0D C09E6A00 - mov ecx,[006A9EC0] << 最后总结出定位静态基址公式 【阳光= [[[006a9ec0]+ ); } return temp; } int main() { int base; int offset[3]; int PID = 5772; base = 0x006a9ec0

    1.6K10编辑于 2023-02-25
  • 植物大战僵尸:实现灵魂收割者

    摘要:植物大战僵尸这款游戏可以说是很多90后的回忆了,基本上只要是90后或多或少的都接触过,而玩游戏与制作辅助是两个概念,今天我将给大家分享一些游戏辅助方面的制作技巧,之所以使用植物大战僵尸这款游戏是因为游戏简单容易分析 2.然后,等待僵尸触碰小车,小车每向前移动一下,搜索增加的数值一次。 4.一直重复这个过程,只要小车不消失,就好最终就能找到。 1.首先搜索未知初始化数值,等待僵尸踩到小车。 2.等待僵尸踩到小车,迅速切回CE搜索,增加的数值。 4.回到游戏,马上切回CE,搜索增加的数值,不断重复,最终找到一个数据,修改为0小车回归原位。 00458928 - D9 55 08 - fst dword ptr [ebp+08] << 偏移是8 ,继续搜索 0B4898C0 ,选择4字节搜索。如果搜索不到可以搜索在两数之间的数据。 68070000 - mov eax,[esi+00000768] << 继续搜索 02839C88 找到了,00467B00 - 8B 0D C09E6A00 - mov ecx,[006A9EC0

    43930编辑于 2022-12-28
  • 植物大战僵尸:手工计算偏移地址

    3.继续查找这个动态地址FE7E60,此时我们可以看到基址006A9EC0,通过手工计算我们已经知道了其公式为006A9EC0 + 768 + 5560完成。 继续搜索:1865F028 0045B6FD - 8B 81 68070000 - mov eax,[ecx+00000768] << 通过动态地址 - 偏移地址 =eax的地址 025B9E18 - 768 = 025B9E18 基址:025B9E18 PlantsVsZombies.exe+2A9EC0 总结:025B9E18 + 768 + 5560 = 阳光

    69710编辑于 2022-12-28
  • 植物大战僵尸:寻找阳光掉落Call

    8B 86 68070000 - mov eax,[esi+00000768] << 00599F75 - A1 389F6A00 - mov eax,[PlantsVsZombies.exe+2A9F38 到这里基地址出来了,其公式为[6A9EC0+768],从这里也可以看出,这应该是一个通用对象地址。 最后,我们整合并写出以下汇编代码,然后使用注入器注入到游戏测试。 CloseHandle(hProcess); } int main() { for (int i = 0; i < 10;i++) InjectCode(3644, AddSun); } 至此我们的植物大战僵尸关于阳光的分析就到此结束了 ,其他的比如植物无敌,植物攻击加速等,就留一个作业,大家开动脑筋看能不能自己实现,回顾前面所讲的外挂制作技巧,你是否已经完全理解了呢? 如果你能够吃透这些基础知识,那么相信你可以做出植物无敌,攻击加速等其他变态功能,其实逆向就是一个思路的问题,大家要多去思考,多去尝试,相信你会成功的!

    97320编辑于 2023-02-25
领券