任天堂随机器
任天堂随机器(Nintendo Randomizer[注 1])是一类生成方块序列的算法(即随机器)。这类随机器由任天堂开发,用于早期任天堂开发的俄罗斯方块游戏,因此得名。使用这类随机器的游戏包括 Tetris (NES, Nintendo) 与 Tetris (Game Boy)。
任天堂随机器是首个「考虑历史的随机器」(History Randomizer),首次引入了两个概念:
每当要决定一个新的方块时,随机器会考虑一定长度的历史块序,然后随机选取某种方块;若得到不同方块就确定为输出,若重复就再次随机;但随机次数存在最大值,若前几次全部重复,则最后一次无论是否重复都确定为输出。
这两个概念通常用首字母简称为 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)
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%
- J、I、Z:13.7%
- O、S、T:16.1%
注释
参见
- 随机器 - 上级条目,包括其他随机器与发展历史等
- Category:随机器 - 随机器分类
- Tetris (NES, Nintendo) - 使用任天堂随机器的游戏
- Tetris (Game Boy) - 使用任天堂随机器的游戏
外链
- YouTube:阿列克谢与亨克·罗杰斯在 Game Informer 的访谈
- YouTube:阿列克谢与亨克·罗杰斯在 DICE 2015 上的访谈
- Simon Laroche 对俄罗斯方块随机器历史的介绍,附带一些随机器的代码实现
任天堂 | |
---|---|
主机游戏 | 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 |