【屠龙之技】论消除规则
召唤与合成本质上是一个三消游戏,然而很遗憾的是,至今为止,没有人对召合的三消规则作出一个系统的论述。当然,是因为机制过于复杂了。
我不清楚【揭示机制】这样的做法会不会带来什么不好的后果,如果官方认为不妥,可以删除。
如果有一天我觉得内容造成了不好的影响,我也会果断删除。
本贴中的内容均是原创研究,如果需要转载、引用,请务必注明出处和作者(taptap,林木甜)。
在此,我希望作出第一步的尝试,来解决消除中最为扑朔迷离的一个问题——在掉落、补充后,如沙盘上存在可以消除的情况,消除的具体规则是什么呢?
这个问题很久以来都是悬而未决的,半年多前,在 关于编程求解消除王最大解的尝试(by:wallknight)一贴中,wall-knight总结出了一个简单的结论,对于简单的n个格子(n>=3)组成的横向、斜向、纵向消除块,以横向的左数第二格,斜向和纵向的从上往下第二格为消除点,在消除点出产生一个+(n-3)的绿怪,其余点的怪物被消掉。如下图的4种情况都会在粗边框格子中产生一个+1的绿怪,其余被消除。
这一结论是正确的,然而对于复杂形状的消除块,当时还并没有通用的可以解释的规则。
比如下图中左上相连的11只呆二龙,居然在(1,2)和(4,2)分别生成了一个+1和一个+4的绿怪,到底发生了什么?
在几个月内,我收集了大量的例子,并在近期才终于逐渐找到一个能和所有例子符合的规则。
具体步骤是:
1.准备一个与原始沙盘相同大小的空沙盘;(一个二维数组,不妨称之为 match[][] )
2.从上到下,从左到右遍历每一个格子中能否消除:依次判断向上、向左上、向右上、向左。(均延伸两格,共三格)
3.若能消除,将这三个格子对应的match数组赋予一个消除块序号,但如果同时这三个格子中有任一格子已经存在序号了,则赋予这个旧的序号,优先级为:相邻格子>最远格子>本身;
4.生成新的消除块序号的中间一格即为消除点,在match数组中具有同一序号的n个格子被消除,并在消除点出产生一个+(n-3)的下一形态的怪物。
以例子具体解释,上面的呆二龙消除块大致是这样:
我们在(1,3)处时向左是第一个可以消除的地方,这时第一行的三个都被赋予了序号1;
且(2,1)是序号1的消除点!
遍历到(3,1)时,由于远端已经存在序号1,因此(1,1)、(2,1)、(3,1)均被赋序号1;
注意(3,3)向上、左上、右上、左延伸都是不能消除了,遍历到(5,1)时,右上延伸产生了一个新的序号2,(4,2)是它的消除点!
遍历到(5,3)时,左上延伸是可以消除的,注意远端是1,近端是2,优先级近端>远端>自身,因此(3,1)被覆盖为2!后面的就不具体说了,很简单:
最后,发现序号1共4格,生成+1绿怪;序号2共7格,生成+4绿怪。与实际情况相符。
总的来说,这是一个屠龙之技,实际消除中,人类很难计算到这一地步,这种复杂的情况出现的几率也并不高。但是满足好奇心也是一种成果嘛。
多放几个例子给大家观赏一下吧