【屠龙之技】消除规则的补完

2020/6/101449 浏览攻略
【屠龙之技】论消除规则 中,我尝试分析了掉落补充后的消除规则,在【屠龙之技终有用】战棋辅助工具的实现 中提及了整体的消除过程,但是补充规则仍有缺漏之处,此贴意在补完消除规则。
(在此感谢@深蓝 的评论带来的启发)
简言之,单步消除分为交换和拖出,此前我曾经认为的过程分别为:
交换:交换怪物位置→ 初始消除→ ①下落→ ②补充→③一般消除→ 如③进行则跳转至①
拖出:拖出怪物→ ①下落→ ②补充→ ③一般消除→如③进行则跳转至①
(初始消除的规则为消除于交换点,一般消除的规则见《论消除规则》)
1. 偏见
实际上,以上的过程只是我的猜想,或者说——个人偏见,在此猜想中,下落的规则不言自明,在简单棋盘(指n×n)+无石块的情形下,补充规则也仅仅是简单的(从左到右逐列补充单个)并循环,而在有石块或并非简单棋盘时,这一规则就变得扑朔迷离了起来。这一问题已经很久没有进展,这是因为偏见比无知离真理更远
如果你认真观察过消除动画,就知道,下落和补充是同时进行的。这是说,如果我们一开始就把二者分开,可能会得到令人困惑的结果,实际上,(从左到右逐列补充单个)并循环本身就很奇怪,因为它是一个更简单、朴素规则的等效
2.事实
当我们说,“下落和补充是同时进行”,这究竟代表是什么意思?以2019年2月17日消除王第一的第一步举例,第二次一般消除后,棋盘变成了左上的样子,补充队列的前六位为112211,按照先前的猜想,首先掉落,然后逐列补充1122,再逐列补充11,变为左上角的样子。(注:棋盘上方是补充队列,灰色是石头,绿色是高级形态,黄色的刚刚补充的棋子)
TapTap
然而事实并不是如此,逐帧分析后,我们发现这个过程和猜想是如此的不同!并且规律已呼之欲出!
下落是逐格进行的!从算法角度,我们从下到上遍历,若棋子为空则置换为上方的第一个空格或棋子,若没有则进行补充!这样逐格进行下落-补充循环,就与实际相符了。
3.等效
这并不是说前面的 下落-补充-一般消除 循环就一无是处,我们仍然可以将这一等效扩展至一般情形。
考虑实际规则,确确实实是逐列补充的,但补充顺序取决于最上方空格或棋子的位置,越低则越优先。
因此可以先确定补充的列顺序,再依此顺序逐列补充。
如:
TapTap
当然了,如棋盘1和3这样部分由石块形成的上缘,这一列顺序应在石头消失时进行更新。至此,消除规则已经完全清楚了。
11
14
8