旋转系统

来自俄罗斯方块中文维基
(重定向自踢地

旋转系统Rotation System)是方块旋转的规则总和,规定了不同情况下按下旋转键时方块的行为。

所有游戏都有旋转系统,不同的旋转系统之间可能有明显的区别。旋转系统会极大地影响操作的手感和效率,很大程度上决定不同游戏的体验和策略。

按照字面意义,旋转系统仅包括旋转本身的规则。但是,由于特定的旋转系统往往对应一整套特定的游戏规则,因此在玩家社区讨论时,广义的旋转系统一词也可能包括与其成套出现的其他规则,例如方块生成时的状态、方块的配色、甚至锁定延迟重置规则等。

旋转状态

定义

旋转状态是方块所有可能处在的情况,是旋转系统必须首先定义的内容。

旋转状态包括方块的朝向、位置等信息,不过很多玩家习惯将其统称为朝向OrientationFacing)。

在俄罗斯方块游戏中,方块有 4 种不同状态,对应 4 种朝向。每种状态都有对应的位置,方块切换至某一状态时,一定处于固定的位置。

Tet.pngTTet.png
TTT
Tet.pngTet.pngTet.png
Tet.pngTTet.png
Tet.pngTT
Tet.pngTTet.png
Tet.pngTet.pngTet.png
TTT
Tet.pngTTet.png
Tet.pngTTet.png
TTTet.png
Tet.pngTTet.png

超级旋转系统中 T 块的所有状态

衍生概念

很多旋转系统的设计符合「方块绕中心点旋转」的几何直觉。在每个方块的所有状态中,存在一个中心格或中心点始终保持位置固定,称为方块的旋转中心Rotation Center)。

在大多数情况下,设置固定的旋转中心主要是为了符合玩家的直觉,在示意图中绘制旋转中心也可以方便读者理解、区分对称的状态等。旋转中心本身没有实际游戏机制上的意义,也很可能不存在于游戏代码的定义中。

为方便同时描述不同状态的朝向、位置等信息,示意图一般会将方块绘制在 3×3 至 5×5 的区域内,保证可以容纳方块的所有状态,被一些玩家称为范围框Bounding Box)。

一些旋转系统会将所有方块定义在相同的 4×4 或 5×5 区域内,主要用于对齐不同方块的初始位置。此外,一些玩家认为范围框应当是符合条件的最小区域,但同样缺乏实际意义,主要用于绘制示意图、方便读者理解。不存在一个区域会随方块一起旋转或参与判定。

Tet.pngTet.pngTet.pngTet.png
II1I2I
Tet.pngW3W4Tet.png
Tet.pngTet.pngTet.pngTet.png
Tet.pngTTet.png
TCTT
Tet.pngTet.pngTet.png
Tet.pngO1O2
Tet.pngO3O4
Tet.pngTet.pngTet.png
JTet.pngTet.png
JCJJ
Tet.pngTet.pngTet.png
Tet.pngTet.pngL
LCLL
Tet.pngTet.pngTet.png
Tet.pngSS
SCSTet.png
Tet.pngTet.pngTet.png
ZZTet.png
Tet.pngCZZ
Tet.pngTet.pngTet.png

超级旋转系统中所有方块的范围框与旋转中心

历史与不同实现

从表面的直观朝向来看,只有 J、L、T 块有 4 种情况;I、S、Z 块有 2 种情况;O 块则只有 1 种情况。

因此,很多早期游戏的旋转系统不会为每个方块定义完整的 4 种状态。无论顺、逆时针旋转,I、S、Z 块都只会在 2 种状态间切换,O 块则完全没有改变。在这样的早期游戏中,I、S、Z 块在旋转后一定会固定地偏向某方向 1 格。

较新的旋转系统大多会为 6 种方块定义完整的 4 种状态,以解决相差 180° 的对称情况,更符合几何直觉。但不同旋转系统对 O 块的定义仍然可能各不相同,O 块可能只有 1 种状态,也可能有 4 种完全相同的状态等。

Tet.pngTet.pngTet.png
Tet.pngSS
SSTet.png
STet.pngTet.png
SSTet.png
Tet.pngSTet.png
Tet.pngTet.pngTet.png
ZZTet.png
Tet.pngZZ
Tet.pngZTet.png
ZZTet.png
ZTet.pngTet.png

GB 方块的旋转系统「偏左」

Tet.pngTet.pngTet.png
Tet.pngSS
SSTet.png
Tet.pngSTet.png
Tet.pngSS
Tet.pngTet.pngS
Tet.pngTet.pngTet.png
ZZTet.png
Tet.pngZZ
Tet.pngTet.pngZ
Tet.pngZZ
Tet.pngZTet.png

NES 方块的旋转系统「偏右」

默认旋转

默认旋转是在没有任何干扰的自由情况下方块的旋转,是旋转系统必须拥有的功能。

在定义过每个方块的旋转状态后,旋转会使方块在状态之间离散切换,而非连续运动。

如果旋转系统定义了全部 4 种状态,则顺、逆时针的不同旋转会进行不同的切换。

如果方块旋转后的位置超出场地边界,或与已有的地形重叠,则默认旋转无法实现。如果旋转系统没有进一步定义偏移旋转的规则,则旋转会失败。

偏移旋转

定义

偏移旋转Offset)是在默认旋转无法实现时方块的旋转和位移,是较早的旋转系统没有、更强大的旋转系统增加的功能。

旋转系统预设几种特定的偏移值,如果默认旋转无法实现,系统会按顺序检测偏移后的旋转能否实现,从而可能将方块修正至其他位置并旋转成功;如果偏移后的位置也无法实现,旋转才会失败。

玩家社区将这种偏移旋转俗称为Kick),其中「撞墙」的水平偏移俗称踢墙Wall Kick),「触地」的竖直偏移俗称踢地Floor Kick)。玩家社区普遍也习惯用「踢墙」一词泛指所有的偏移。

偏移规则不仅使方块的旋转更加灵活,可以避免方块卡死的情况,还衍生增加了很多进阶的特殊旋转(Spin)技巧[注 1],令特定情况下的方块旋转卡入特定的地形,从而方便堆叠,或者在现代方块游戏中得到判定和奖励。

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngGGGGGGG
GTet.pngGGGGGGGG

无偏移的情况
顺时针旋转

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngGGGGGGG
GTet.pngGGGGGGGG

超出场地墙
无解决方案

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngGGGGGGG
GTet.pngGGGGGGGG

旋转失败

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngGGGGGGG
GTet.pngGGGGGGGG

有偏移的情况
顺时针旋转

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngGGGGGGG
GTet.pngGGGGGGGG

超出场地墙
检测偏移

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
TTTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngGGGGGGG
GTet.pngGGGGGGGG

(1, 0) 偏移可行
「踢墙」旋转成功

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
GGTet.pngAIAIAIAITet.pngTet.pngTet.png
GGGGGGGTet.pngTet.pngTet.png
GGGGGGGGGTet.png

无偏移的情况
顺时针旋转

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
GGTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
GGGGGXGTet.pngTet.pngTet.png
GGGGGXGGGTet.png

与地形重叠
无解决方案

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
GGTet.pngAIAIAIAITet.pngTet.pngTet.png
GGGGGGGTet.pngTet.pngTet.png
GGGGGGGGGTet.png

旋转失败

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
GGTet.pngAIAIAIAITet.pngTet.pngTet.png
GGGGGGGTet.pngTet.pngTet.png
GGGGGGGGGTet.png

有偏移的情况
顺时针旋转

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
GGTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
GGGGGXGTet.pngTet.pngTet.png
GGGGGXGGGTet.png

与地形重叠
检测偏移

Tet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
Tet.pngTet.pngTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
GGTet.pngTet.pngTet.pngAITet.pngTet.pngTet.pngTet.png
GGGGGGGTet.pngTet.pngTet.png
GGGGGGGGGTet.png

(0, 2) 偏移可行
「踢地」旋转成功

偏移表

偏移表Offset Table),或俗称踢墙表Kick Table),是常见的描述偏移规则的数据结构。

偏移表的基础形式是一维表格,即一个有顺序的偏移值 (Δx, Δy) 序列,表示系统会按此顺序检测序列中的偏移。

根据旋转系统的设计不同,不同的方块、不同的状态、不同的旋转方向都可能使用不同的偏移表。因此一种进阶的实现方式是多维表格,记录每个方块、从每个状态、往每种旋转方向使用的偏移序列。

俄罗斯方块准则规定的标准的超级旋转系统所使用的偏移规则可以使用一组二维偏移表完全描述。

历史与不同实现

最早期、最简单的旋转系统只有默认旋转。20世纪90年代以后,大多数旋转系统都增加了各具特色的偏移规则,且整体上逐渐增多加强,可以实现越来越多的偏移旋转。

很多其他旋转系统的偏移规则与超级旋转系统不尽相同,一些旋转系统还会增加额外的判定规则。

一些较早期游戏的旋转系统仅在方块超出场地边界时应用偏移,将方块修正回场地内部,例如世嘉俄罗斯方块的旋转系统。这种规则可以视为较为「原始」的偏移旋转,之后的旋转系统大多会将已有的地形也纳入考虑。

一些游戏的旋转系统会对特定的偏移增加额外的限制,从而提高难度或避免一些情况,例如 Arika 旋转系统。该旋转系统对 J、L、T 块的偏移旋转增加了「卡中」限制;只允许 I、T 块在落地后「踢地」竖直偏移,且有次数限制等。

如果「踢地」竖直偏移的规则设计不当,一些旋转系统有可能存在任意拖延的漏洞。在特定地形下,方块可能在接近地面的位置通过「踢地」旋转提升高度,因为没有触发落地判定而避免锁定延迟重置,从而无限拖延。

旋转系统列表

参见:分类:旋转系统

所有的游戏都有旋转系统,很多游戏对旋转都有自己的实现方式,细节上往往不尽相同。因此,历史上出现过大量的不同旋转系统。

一些著名的旋转系统示例:

需要注意的是,以上很多旋转系统都并非官方命名,而是玩家社区总结性的命名。

为方便交流,玩家社区会使用首字母缩写作为一些著名的旋转系统的简称,例如超级旋转系统简称 SRS、Arika 旋转系统简称 ARS 等。但是,这种缩写极其容易重复撞车,例如世嘉旋转系统、雅达利旋转系统的缩写也分别是 SRS、ARS,难以推广到所有旋转系统。因此,只有极少数最常用的缩写能形成共识。

注释

  1. 特殊旋转不完全依赖偏移,存在无偏移的特殊旋转,在最早的方块游戏中即可实现。偏移规则增加了更多可实现的特殊旋转。