准备知识:基本编程常识,按键精灵基础知识,EL中高级阵型理论,游戏数据计算
小碰油们好,这篇文章将会教会你编写一个简单的,高度机械化的PE十字架12炮挂机程序。这个程序不会修改游戏的内存数据,而是使用读取游戏内存以及模拟鼠标的技术来实现全自动挂机。
本教程使用的环境是:按键精灵9.61,PVZ V1.0.0.1051英文版
【第零章:设计理念——KISS】
挂机设计应该遵循什么原则呢?嗯,我认为是伪娘,哦不,KISS原则。什么是KISS?
“KISS原则是英语 Keep It Simple, Stupid 的首字母缩略字。KISS原则是指在设计当中应当注重简约的原则。”
——Wikipedia
也就是说,我们要确保阵型设计以及挂机程序简单,简单,还是简单。不过如果你追求的是蛋疼或蛋碎,比如无炮挂机,那就当我啥都没说吧……
【第一章:阵型分析——十字架12炮】

如图,这是一个非常普通的12炮阵。我在这部分讲解一些这个阵型用于挂机要解决的问题。
(1)僵尸应对策略
【MJ】毫无疑问,在读内存预判炸技术被发明之前,MJ是挂机设计中的大麻烦之一。那时的解决方案有ponymzh复杂的不死十炮挂机,至于简单的方案有小玉的P4十炮,我的底线12炮。然而,尽管这些方案都能较好地解决MJ的威胁,但却引入了新的不稳定因素。如我的底线12炮的IMP啃炮,小玉P4十炮的出怪延迟,而ponymzh大叔的十炮挂机程序虽然可以长时挂机,但因为没有使用读内存技术,使得其程序却高度复杂。
随着读内存预判炸技术的发明,我们总算解决了MJ这个大麻烦,挂机的设计也更为容易。
【水路僵尸】水路僵尸对本阵有一定威胁,主要是普通的领带僵尸。由于其速度慢,进入春哥打击范围较晚,因此可能会乘虚而入。但这些问题主要是由于两次开炮时间间隔过长引起的,只要保证时间间隔小于5.8秒,那水路安全就能得到保障。
至于海豚潜水,只要预判炸的时间合理,就可以全收。
【气球】气球只会在第10波(即中场大波僵尸警告后刷出的第一波)僵尸中构成一定威胁,此时的气球出生位置比较靠后。而且其处于未减速状态,可能会导致漏炸。在我之前的挂机程序中,我会使用核武来解决,但还是有极小的概率会漏气球。
而在第20波(即冰消珊瑚后刷出)中,如果你为了缩短一局的时间,让冰消珊瑚的面瘫不冰刷出的僵尸,那么情形也会和第10波僵尸一样,有漏炸的危险。
最安全的方法自然就是三叶草了,但这会导致阳光消耗不能完全靠天,必须种上一棵双子。
【跳跳】一路跳跳有可能被春哥漏炸,但考虑到EL每波僵尸(不含舞伴以及IMP)只有50个,因此1路跳跳的数量极为有限,可被冰瓜轻松消灭。
【红眼】只要开炮的间隔在5.8秒以内,红眼就素浮云。
【IMP】后场单曾这个经过无数EL玩家检验的经典布局已经可以全收小鬼,但有碰到车的可能。如果你有强迫症想保住全部车……都是5级玩家了,自己解决吧。
【小丑】根据yxq_bd的数据贴,小丑最早爆炸时间是刷新后4.4秒。而春哥发射时间3.73秒。而本阵使用预判炸,因此参数正确的情况下小丑不可能炸掉前场水路春哥。
(2)僵尸刷新延迟
目前,全植吧还没人可以肯定地回答以下两个问题:
1、 下波僵尸刷新的倒计时与僵尸组合的关系是什么?
2、 刷新倒计时的扣减机制是怎样的?
如果你擅长逆向工程,我希望童鞋你可以帮我们解决这两个个困扰了植吧多年的难题。也许这两个难题的解决就是开启第四次科技革命的钥匙吧……
【如何确保僵尸刷新不出现延迟?】
由于这两个问题还没得到回答,因此目前还不能充分证明以下的解决方案能完全解决刷新延迟问题。我只能凭上万FLAG的挂机经验告诉你,这确实很有效。
1、 对于第1~9波,和第11~19波僵尸,在P6节奏下,只要预判时间恰当(比如僵尸刷出前0.5秒开炮,使MJ不召唤舞伴的极限时间是0.33秒)就基本不可能出现出怪延迟。
2、 对于第10波僵尸,由于这波僵尸较为特殊,有许多领带,门板等慢速僵尸,且出生位置偏后。因此这僵尸极易出现刷新延迟,但我们可以将延迟控制在我们可以接受的范围内。
我们知道,使用核武,樱桃等灰烬植物,可以使激活下一波僵尸的刷新。因此我们可以在春哥开炮4秒后,在水路引爆核武,激活下一波僵尸的刷新。
(3)杂项
【阳光】在本阵中,阳光只会用在冰消珊瑚,核武激活,还有两次三叶草中,一棵双子是必要的。
【冰瓜数量】为啥一路一冰瓜,多点不好吗?
答:因为冰瓜越少,伪256倍变速的实际倍数就能越大,挂机演示的效果也就越鬼畜……
【第二章:流程设计】
这一章里会介绍EL挂机的基本流程。
作为5级玩家的你肯定知道,EL中一局(2 FLAGS)的流程:
选卡->第1~9波僵尸->大波僵尸警告->第10~19波僵尸->大波僵尸警告->珊瑚三人组&最后一波
相应地,有基础编程知识的你此时应该脑中应该浮现出挂机程序的基本流程了吧:
选卡->对第1~9波僵尸进行预判炸->清理剩余僵尸->大波僵尸警告等待->春哥轰炸第10波僵尸&水路核武激活刷新&三叶草->继续对第10~19波僵尸进行预判炸->清理剩余僵尸->大波僵尸警告等待->冰消珊瑚->轰炸最后一波MJ等高危僵尸&三叶草(若不冰冻最后一波僵尸)->清理剩余僵尸->选卡
另外,还有两个特殊的子程序贯穿在整一局:捡阳光,阵型完整性检验。
设计流程时的要点:
【选卡】选卡时需要注意带上三叶草,否则有气球僵尸时会出现警告。要注意到选卡不一定一次成功,所以退卡重选的程序不要漏掉。确定是否成功选卡的一种方法是判断模仿者卡片的像素点颜色是否发生变化。使用后台鼠标单击游戏开始按钮前,先要向其发送MoveTo事件,才可点击。
注意,请确定游戏正式开始(游戏内时间戳改变)时,才调用预判炸子程序。
【点炮】点炮请使用后台鼠标,前台鼠标延迟较高且不精确。点炮前先在安全区域(如左上角阳光图标处)单击右键,这样可以防止误操作。为了防止钱币和阳光覆盖在炮上,请重复点炮10次。
【收集阳光】通过后台找色方法寻找阳光。与点炮相同,捡之前先进行安全右键,然后左键单击阳光,最后再进行一次安全右键。
当然,你也可以通过读内存的方法来收集阳光,具体可参考:http://tieba.baidu.com/p/2006019146
2楼。
小碰油们好,这篇文章将会教会你编写一个简单的,高度机械化的PE十字架12炮挂机程序。这个程序不会修改游戏的内存数据,而是使用读取游戏内存以及模拟鼠标的技术来实现全自动挂机。
本教程使用的环境是:按键精灵9.61,PVZ V1.0.0.1051英文版
【第零章:设计理念——KISS】
挂机设计应该遵循什么原则呢?嗯,我认为是伪娘,哦不,KISS原则。什么是KISS?
“KISS原则是英语 Keep It Simple, Stupid 的首字母缩略字。KISS原则是指在设计当中应当注重简约的原则。”
——Wikipedia
也就是说,我们要确保阵型设计以及挂机程序简单,简单,还是简单。不过如果你追求的是蛋疼或蛋碎,比如无炮挂机,那就当我啥都没说吧……
【第一章:阵型分析——十字架12炮】

如图,这是一个非常普通的12炮阵。我在这部分讲解一些这个阵型用于挂机要解决的问题。
(1)僵尸应对策略
【MJ】毫无疑问,在读内存预判炸技术被发明之前,MJ是挂机设计中的大麻烦之一。那时的解决方案有ponymzh复杂的不死十炮挂机,至于简单的方案有小玉的P4十炮,我的底线12炮。然而,尽管这些方案都能较好地解决MJ的威胁,但却引入了新的不稳定因素。如我的底线12炮的IMP啃炮,小玉P4十炮的出怪延迟,而ponymzh大叔的十炮挂机程序虽然可以长时挂机,但因为没有使用读内存技术,使得其程序却高度复杂。
随着读内存预判炸技术的发明,我们总算解决了MJ这个大麻烦,挂机的设计也更为容易。
【水路僵尸】水路僵尸对本阵有一定威胁,主要是普通的领带僵尸。由于其速度慢,进入春哥打击范围较晚,因此可能会乘虚而入。但这些问题主要是由于两次开炮时间间隔过长引起的,只要保证时间间隔小于5.8秒,那水路安全就能得到保障。
至于海豚潜水,只要预判炸的时间合理,就可以全收。
【气球】气球只会在第10波(即中场大波僵尸警告后刷出的第一波)僵尸中构成一定威胁,此时的气球出生位置比较靠后。而且其处于未减速状态,可能会导致漏炸。在我之前的挂机程序中,我会使用核武来解决,但还是有极小的概率会漏气球。
而在第20波(即冰消珊瑚后刷出)中,如果你为了缩短一局的时间,让冰消珊瑚的面瘫不冰刷出的僵尸,那么情形也会和第10波僵尸一样,有漏炸的危险。
最安全的方法自然就是三叶草了,但这会导致阳光消耗不能完全靠天,必须种上一棵双子。
【跳跳】一路跳跳有可能被春哥漏炸,但考虑到EL每波僵尸(不含舞伴以及IMP)只有50个,因此1路跳跳的数量极为有限,可被冰瓜轻松消灭。
【红眼】只要开炮的间隔在5.8秒以内,红眼就素浮云。
【IMP】后场单曾这个经过无数EL玩家检验的经典布局已经可以全收小鬼,但有碰到车的可能。如果你有强迫症想保住全部车……都是5级玩家了,自己解决吧。
【小丑】根据yxq_bd的数据贴,小丑最早爆炸时间是刷新后4.4秒。而春哥发射时间3.73秒。而本阵使用预判炸,因此参数正确的情况下小丑不可能炸掉前场水路春哥。
(2)僵尸刷新延迟
目前,全植吧还没人可以肯定地回答以下两个问题:
1、 下波僵尸刷新的倒计时与僵尸组合的关系是什么?
2、 刷新倒计时的扣减机制是怎样的?
如果你擅长逆向工程,我希望童鞋你可以帮我们解决这两个个困扰了植吧多年的难题。也许这两个难题的解决就是开启第四次科技革命的钥匙吧……
【如何确保僵尸刷新不出现延迟?】
由于这两个问题还没得到回答,因此目前还不能充分证明以下的解决方案能完全解决刷新延迟问题。我只能凭上万FLAG的挂机经验告诉你,这确实很有效。
1、 对于第1~9波,和第11~19波僵尸,在P6节奏下,只要预判时间恰当(比如僵尸刷出前0.5秒开炮,使MJ不召唤舞伴的极限时间是0.33秒)就基本不可能出现出怪延迟。
2、 对于第10波僵尸,由于这波僵尸较为特殊,有许多领带,门板等慢速僵尸,且出生位置偏后。因此这僵尸极易出现刷新延迟,但我们可以将延迟控制在我们可以接受的范围内。
我们知道,使用核武,樱桃等灰烬植物,可以使激活下一波僵尸的刷新。因此我们可以在春哥开炮4秒后,在水路引爆核武,激活下一波僵尸的刷新。
(3)杂项
【阳光】在本阵中,阳光只会用在冰消珊瑚,核武激活,还有两次三叶草中,一棵双子是必要的。
【冰瓜数量】为啥一路一冰瓜,多点不好吗?
答:因为冰瓜越少,伪256倍变速的实际倍数就能越大,挂机演示的效果也就越鬼畜……
【第二章:流程设计】
这一章里会介绍EL挂机的基本流程。
作为5级玩家的你肯定知道,EL中一局(2 FLAGS)的流程:
选卡->第1~9波僵尸->大波僵尸警告->第10~19波僵尸->大波僵尸警告->珊瑚三人组&最后一波
相应地,有基础编程知识的你此时应该脑中应该浮现出挂机程序的基本流程了吧:
选卡->对第1~9波僵尸进行预判炸->清理剩余僵尸->大波僵尸警告等待->春哥轰炸第10波僵尸&水路核武激活刷新&三叶草->继续对第10~19波僵尸进行预判炸->清理剩余僵尸->大波僵尸警告等待->冰消珊瑚->轰炸最后一波MJ等高危僵尸&三叶草(若不冰冻最后一波僵尸)->清理剩余僵尸->选卡
另外,还有两个特殊的子程序贯穿在整一局:捡阳光,阵型完整性检验。
设计流程时的要点:
【选卡】选卡时需要注意带上三叶草,否则有气球僵尸时会出现警告。要注意到选卡不一定一次成功,所以退卡重选的程序不要漏掉。确定是否成功选卡的一种方法是判断模仿者卡片的像素点颜色是否发生变化。使用后台鼠标单击游戏开始按钮前,先要向其发送MoveTo事件,才可点击。
注意,请确定游戏正式开始(游戏内时间戳改变)时,才调用预判炸子程序。
【点炮】点炮请使用后台鼠标,前台鼠标延迟较高且不精确。点炮前先在安全区域(如左上角阳光图标处)单击右键,这样可以防止误操作。为了防止钱币和阳光覆盖在炮上,请重复点炮10次。
【收集阳光】通过后台找色方法寻找阳光。与点炮相同,捡之前先进行安全右键,然后左键单击阳光,最后再进行一次安全右键。
当然,你也可以通过读内存的方法来收集阳光,具体可参考:http://tieba.baidu.com/p/2006019146
2楼。