四、波动逐波
使用上面的思路,相信你已经能够写出一些无炮阵型的快速关的挂机脚本。那么接下来我们来看慢速关(出怪同时含红白)。与快速关跟变速关不同,慢速关的出怪波动问题并不显著,这里我们面临的主要问题是僵尸死得太晚。这会导致对前排南瓜的频繁铲种,以及可能的曾哥被砸,从而浪费大量阳光。那么,怎么让僵尸死得及时一点呢?根据我粗浅的无炮理解,解决办法是早点用卡,或者,更正式地说,压缩循环时间。让我们来看具体实现:
可以看到我们打的是A|AIN’|N的C3节奏,这里可能用核弹开更好些,但这不是我们关注的重点。这里分了3个函数来分别处理这3种用卡,其实只用1个函数也可以,这里主要是想让代码清晰一点。我们先来看这里比较简单的N的实现:
第一张图完全是一些细节,这里不去管他,我们主要看第二张图。我们看到,这里的写法与精确逐波有两点重要的不同:判断下一波卡的cd,以及控制花盆。后者依然是屋顶场景特性,这里真正重要的是对下一波卡的判断。前面说到,我们要尽可能地压缩循环长度,那么对于循环长度的压缩,怎样才算到了极限呢?这里我的解决方法是,判断下一波的卡能不能在合理的时间接上。有人可能会想:慢速关刷新时间稳定,每波都按照规定时间差不多地来,自然就能接上,怎么会需要这样的判断呢?这里有两个理由。一是由于樱桃放在6列而非7列,樱桃炸过后有时不会立马刷新,如果对此不做处理,则会有僵尸死得过晚的问题。而若要对此做处理,则就需要讲之后的用卡时间提前,而如何决定提前量的多少呢?这就需要我们进行这样的判断。二是放灰烬需要避开小丑爆炸,这也会对节奏产生微小的扰动。
正是这个对下一波卡的判断,把原本独立的一波波用卡串了起来,并使它们有了一定的自我调节能力。这也就是“波动”逐波中“波动”之所在。接下来我们再往深处走,看一看AIN’的实现。
先看比较简单的第20波特判。这里主要体现了AIN’这个用卡的特殊性——三张卡是连在一起用的,而且有一个相对固定的时间间隔。而第20波不用放最前面的那个A,场上的情况也相对简单,可以作为热身来看。为了实现这个时间间隔,最基本的,是要在放I的时候判断N’的cd是否快要好了,以及核坑的情况是否理想。一切检查完毕之后,就是把I放下,然后预定一个90时间后的N’。但是,相信大家也看到了,我在图里445行说,“可以直接“预定,那么,什么情况下,我们不可以直接预定呢?
在辣椒的使用上,这里脚本没有直接在100时间(即辣椒生效所需时间)后直接预定一个冰,而是给出一个倒计时。这是因为无法预测100时间后小丑的开盒情况。如果这里定死时间,则复制核有被小丑炸掉的风险。我们继续来看IN’。
我们发现,AIN’这三张同一波的用卡之间,也通过倒计时的方式纠缠起来了。这里其实有一个问题我一直没有想清楚,那就是I和N’之间的时间间隔到底应该是多少,才能尽量避免复制核被小丑炸。可能以前我是想清楚了的,但总之现在我忘了。脚本里用的90仅供参考,还希望有人能论证下到底什么数值比较好。
至此,波动逐波的例子讲完了。总得来说,波动逐波的思想,就是让不同波的用卡,以及同一波的不同用卡之间产生关联,从而达到动态调控波长等目的。对于慢速关这样不容易提前刷新的出怪类型来说,波动逐波应能有不错的发挥。