我们将遗憾地发现,《水果忍者》这个游戏中出现水果的种类、个数和时间等,也并非真的是随机出现的。它也是一个伪随机性的游戏。我们的测试平台有二,一是ios,一是android。其他平台如windows phone暂不讨论。
接下来,为了验证以上的说法。我们先对《水果忍者》这个游戏所玩的关卡进行一个标记。不妨将我们第一次启动这个游戏时,我们玩的第一局称为关卡1,第二局为关卡2,以此类推。如果你把游戏重启的话,你还要从关卡1开始玩。首先,我们发现你每次玩的关卡1都是一样的。我们这里先讲IOS上的《水果忍者》——android大同小异——只要你打开水果忍者并选择香蕉模式,一开始你肯定会碰到这5个家伙:
接着如果你一个水果都不切的话,那么在第50秒在屏幕中间的上方会掉下一个冰香蕉(Freeze):
不要切这个冰香蕉,也不切其他水果的话,第16秒屏幕左边会扔一个狂热香蕉(Frenzy):
这就是伪随机。程序是固定的。
有同学又要说了,我的《水果忍者》关卡1可不是这样的。首先你要确定你玩的到底是不是关卡1。怎么让自己从关卡1开始呢:退出游戏,注意是退出而不是后台,重新启动游戏,如果你看到这个画面:
那么你的ios进入香蕉模式就和上面一样了
而在android上什么都不切的话,香蕉出现的顺序为:冰香蕉38(秒) 狂热香蕉24 狂热21 狂热13
但是发现这个伪随机没什么不起的。因为玩高分总是要切水果的,上面的根本一个水果都没切。可是我们切了水果之后发现和没切水果是不一样的,特别明显的是16秒时的狂热香蕉不见了,在其他时候还出现了别的香蕉。那到底是什么因素导致了水果出现顺序与格局的改变。最直接的方法就是查看程序源码,但这就没意思了,和作弊一个意思,也超出了我的能力。所以只好闷头继续玩关卡1,
水果(不包括香蕉)
香蕉(包括frenzy,freeze和double)
连切(combo)
炸弹
最后排除水果、连切和炸弹3个因素的影响。因为在50秒以前不论如何切水果、如何连切、如何切炸弹都不影响50秒的时候掉出冰香蕉——除非你在51秒切到炸弹把冰香蕉轰没了。
同时发现切不切冰香蕉会导致后面的格局不尽相同。
显然香蕉是最重要的因素,因为香蕉影响后面出来的香蕉,而且要玩高分香蕉越多也就越容易。
但是每次玩关卡1切到香蕉之后再出来香蕉的时间和种类也似乎不一样了。里面肯定还有什么没发现的变量,我不认为是随机事件或者大家习惯称的人品。因为只要你尽量保持和上次的切法,甚至能切出和上次一样的格局和差不多的分数——为什么不是一样的分数呢,因为水果和连切不影响出香蕉,所以这次你多切几个水果和连切分数自然就高了——历史会重演即是最好的证明,只要你能保持和上次一模一样的轨迹,分数肯定相同。
到这里毫无头绪的时候,我想去找找有没有相关的攻略,我心想大部分人倾向于认为得分高低是人品作祟,所以想必不会有这方面的攻略。但是我还是去找了,甚至还让我找到了一个视频。我不知道视频作者是否认同上述的观点,但是其玩法的本质和我的想法不谋而合。视频里面的一句话也一针见血地提醒了我——第一个冰香蕉一定要消灭在萌芽状态——是不是前面提到的未知变量就是香蕉出现后所处的位置或时间呢。
果然,我又玩了几局关卡1。对于未知变量的结论是切到香蕉的时间。每个香蕉大概出现1秒钟,将这一秒钟分为几段,在每段内切到香蕉都会导致后续香蕉的变化。以50秒出现的冰香蕉为例子,一出来就把它切掉,在第31秒屏幕左边会扔出一个双倍香蕉;而在50秒的冰香蕉快掉落时切掉,在第33秒则又掉落一个冰香蕉。接着对31的双倍香蕉和33秒的冰香蕉进行分析也得出相同的结论。为了让结论更有代表性,于是我试了一下关卡2。一样的结论,但是有意思的是,关卡1的香蕉对关卡2的香蕉也有影响,也就是说我们打开游戏进入香蕉模式,然后点左下角的暂停按钮再点右边的循环按钮直接进入关卡2,和我们在关卡1切了一个香蕉后再进入关卡2,这两个关卡2是不一样的。细心的同学这时肯定发现了,《水果忍者》里面的伪随机码就是香蕉,而不是前面提到的每个关卡。
我们做一个简单的假设。把一个香蕉出现的时间(假设1秒)分为2段区间:[0,0.4]和(0.4,1],且在区间1切到香蕉导致的下一个香蕉相同,区间2亦然。加上我们可以选择不切这个香蕉,一共3种结果。于是我们甚至可以通过画3叉树来枚举关卡1所有的情况:
既然能枚举出所有的情况。我们所要做的就是用贪心算法找出那个能使你分数最高的香蕉切法——香蕉最多或者3个香蕉一起出都不错对吧——然后多玩几次把分数达到极限。如果尝试了关卡1所有情况还是不能达到令你满意的分数,那就是试一下关卡2吧,或者切一个香蕉再进入关卡2。
如果你觉得这么做还是太麻烦的话,还记得我上面说的视频吗——那是个上1000分的视频。只要你照着这个视频去做,历史会重演的。