|
本帖最后由 hbghlyj 于 2021-6-27 15:09 编辑 原文地址(很多处翻译得不好,有更好的翻译,还请指出 )
如果俄罗斯方块的生成遵循7个1包,7个1包的原则(I,J,L,O,S,T,Z为1包,每包内部随机排列,即7!种排列,英文是7-bag randomizer),且提供3个"预览"方块(preview),且允许手动"搁置"1个方块(hold),我们就有完备的永生策略:
将表格分为左4列,中间2列,右4列.
S,T,Z放在左4列,I放在中间2列,L,J,O在右4列.
STZ循环:4包一循环.(以下的"第i个T"指"第i,i+4,i+8...包中的T")
这个技术不需要任何"预览"方块,但需要允许手动"搁置"方块.
第一个Z必须在第一个T的后面(因为Z是封死的,S不会把T封死,所以S和T谁先谁后都行),必要时用hold来调序
第二个/第三个T不能是同一包里的第一块,必要时用hold来调序
第二个T必须和第三个T必须放在diagonally adjacent的位置(即,有1个公共顶点,但没有公共边)
第四个T必须在最后,用于封顶
LJO循环:1包一循环.
根据方块的顺序,需要使用不同的构造.为了选择合适的方块,至少需要预览5个方块(最坏情况是隔着4个STZI才能看到下一个L或J或O).或者,也可以只用3个预览和"巧妙"地使用 Hold.
O第一个出的情况(OJL, OLJ)
O第三个出的情况(JLO, LJO)
O第二个出的情况(下图所示是JOL.其镜像就是LOJ)
为了使STZ与LJO循环的Hold需求不冲突,需要使用一些高级技巧:
最坏情况下的包的配置,例如H?XX?X?和H?XXX?.其中“H”表示一个必须被搁置才能遵循STZ循环的方块.LJO循环中的被搁置方块用“?”表示,其余部分用“X”表示.使用3个预览和Hold,在第二件进入屏幕之前只能看到前4件. 这意味着您只能看到 H?XX,并且只知道 LJO 循环的第一部分. 因为必须将 H搁置,所以您被迫在不知道 LJO 循环其余部分的顺序的情况下做出决定. 如果 O 首先出现,则您可以按照上述步骤操作而不会出现问题. 剩下的情况你会遇到这样的困难:
不可能的 O 放置(例如 HLXXJXO、HLXXXJO):
......... |
|