任天堂随机器

来自俄罗斯方块中文维基

任天堂随机器Nintendo Randomizer[注 1])是一类生成方块序列的算法(即随机器)。这类随机器由任天堂开发,用于早期任天堂开发的俄罗斯方块游戏,因此得名。使用这类随机器的游戏包括 Tetris (NES, Nintendo)Tetris (Game Boy)

任天堂随机器是首个「考虑历史的随机器」(History Randomizer),首次引入了两个概念:

  • 历史块序History):已经被确定的方块序列[注 2]。块序长度作为参数由设计者决定。
  • 随机次数Roll):对待定方块进行随机选取的次数[注 3]。最大次数作为参数由设计者决定。

每当要决定一个新的方块时,随机器会考虑一定长度的历史块序,然后随机选取某种方块;若得到不同方块就确定为输出,若重复就再次随机;但随机次数存在最大值,若前几次全部重复,则最后一次无论是否重复都确定为输出。

这两个概念通常用首字母简称为 H & R,结合参数作为玩家社区对特定随机器的特征命名,如「1H2R」、「2H3R」等。

任天堂随机器的算法一定程度上避免了玩家连续得到相同方块(「涝」,Flood),但仍然难以避免玩家长时间无法得到想要的方块(「旱」,Drought)。

Tetris (NES, Nintendo)

NES 版俄罗斯方块使用 1H2R 随机器:仅考虑当前方块,最多进行两次随机。

此外,在 NES 方块中,每种方块按 0-6 编号。但是,随机器第一次生成的值在 0-7 之间。若为无效值7或与当前方块重复,就再次随机。第二次也是最后一次随机生成的值则在 0-6 之间,且无论是否重复都确定为输出。

NES 方块的随机器一定程度上降低了连续得到相同方块的概率,并且有意识地控制概率不要过度降低(由于无效值的存在,连续相同的概率从 1/7 降至 1/28 而非 1/49)。但是,该随机器完全没有改善无法得到想要方块的问题,玩家往往会遇到连续数十块的干旱。

Tetris (Game Boy)

GBrandomizer.png

GB 版俄罗斯方块使用 2H3R 随机器:历史块序包括当前方块和预览方块[注 4],最多进行三次随机,每次生成的是预览块再之后的一块。该随机器由亨克·罗杰斯设计[注 5]

然而,在 GB 方块的代码编写过程中,由于使用的是按位或运算,这个 2H3R 随机器并未完全达到设计目的,不同方块连续出现的几率变得不同。

这是因为在 GB 方块中,每种方块同样按 0-6 编号,二进制编号从 000 到 110。而在随机生成一个值后,游戏代码进行的判定公式是:

当前块 OR 预览块 OR 待定块 != 当前块

如果满足判定(三元按位或运算的结果不同于当前块),就确定为输出;否则再次随机。

在该代码的实现中,待定块二进制编号中 0 的个数越多,其被拒绝的概率就越大。例如,L 块的二进制编号为 000,那么假设预览块是 L 块,则无论当前块是什么,新随机到的 L 块都不会满足判定(XXX OR 000 OR 000 = XXX),故连续得到两个 L 块的概率显著低于其他方块。根据计算,连续得到两个相同方块的相对概率为:

  • L:10.7%
  • JIZ:13.7%
  • OST:16.1%

注释

  1. 玩家社区出于习惯和方便起见的称呼,并非官方命名。
  2. 在俄罗斯方块的随机器中,「历史」的概念指代所有「已被确定的方块序列」,而不是狭义的「已经出现过的方块序列」。
    根据游戏开发者的需要,这个概念可能包括当前块、已经确定顺序但尚未入场的预览块、甚至完全没有出现过的被强行定义的块。
  3. 也有人认为是「重抽次数」(Reroll),则显然总是比随机次数少一次。本条目采用随机次数作为参数。
  4. 每局游戏的最初两块完全随机决定,从第三块开始使用 2H3R 随机器生成。
  5. 根据对他的访谈。请见外链章节中的视频链接。


参见

外链


任天堂
主机游戏 Tetris (NES, Nintendo) · Tetris 2 · Tetris & Dr. Mario · 3D Tetris · The New Tetris · Tetris 99
掌机游戏 Tetris (Game Boy) · Tetris Blast · Tetris DX · Pokémon Tetris · Tetris DS · Tetris Axis
相关条目 任天堂旋转系统 · 任天堂随机器 · 任天堂世界锦标赛 1990
其他相关游戏 Dr. Mario · Tetris Attack · Tetrisphere