新闻中心

格块旋转遇到墙壁时怎样按候选顺序尝试平移:机制演算第21例

2026-11-11

旋转后的格块可能与墙或已有方块重叠。某些游戏会按固定顺序尝试几个小位移,找到第一个合法位置;这个顺序本身也是规则的一部分。

采用自定义L形格块和整数枢轴,局部坐标顺时针旋转为负y、x。旋转后依次尝试零位移、向左一格、向右一格、向上一格、向左两格、向右两格;只要所有格子在边界内且不重叠,就立即接受。

本例的输入和输出

六列八行地图,枢轴[1, 2],局部格子[(0, 0), (0, 1), (0, 2), (1, 2)]。已占用坐标[(0, 0), (1, 7), (3, 0), (3, 6), (4, 1), (5, 4), (5, 7)]。坐标向右和向下为正。

尝试平移 | 旋转后的世界格子 | 不合法原因 [0, 0] | [[1, 2], [0, 2], [-1, 2], [-1, 3]] | [[-1, 2, '越界'], [-1, 3, '越界']] [-1, 0] | [[0, 2], [-1, 2], [-2, 2], [-2, 3]] | [[-1, 2, '越界'], [-2, 2, '越界'], [-2, 3, '越界']] [1, 0] | [[2, 2], [1, 2], [0, 2], [0, 3]] | [] 接受的位移:[1, 0]。

表格中的编号只标识当前例子的元素,不应把对象身份、数组下标与计算数值混为一谈。阅读时先核对输入和边界,再沿记录检查每一步;空结果表示规则下没有可用项,并不是默认返回数值零。

复核与适用条件

逐个记录越界或碰到已占格子的具体位置。不能跳过前面已经合法的候选而挑一个自己更喜欢的落点;若全部失败,保留旋转前的位置和形状。

这里没有使用任何现成游戏的正式旋转系统,也不规定落地锁定、连续旋转或特殊格块的规则。候选顺序只是本文明确给出的模型,理解后可按自己的规则另行设计。

练习时先独立复算一小段,再检查整体结果是否满足文中条件。遇到差异应保留中间记录并定位第一处不一致,而不是只调整最后答案。更换输入或操作规则后,需要重新计算,原记录只对这一例负责。

准备好开始吧,它既快速又简单。