《游戏设计师修炼之道:数据驱动的游戏设计》一3.2游戏中的随机选择

3.2游戏中的随机选择

大多数游戏都包括某种随机选择,以向结果中添加不确定性。少数几种游戏(比如《国际象棋》和《西洋跳棋》)不依赖于随机选择,能否赢得游戏完全依赖于玩家的技能。这样的游戏称为完全信息博弈(perfect information game),因为不会对玩家隐藏任何东西,所以他们能够准确地知道从一个回合到下一个回合可能发生什么。在这样的游戏中没有隐藏的信息(例如,采用面朝下的方式发牌),也没有随机选择。
大多数视频游戏都依赖于一些随机选择,它们不仅可以使玩家猜测接下来将发生什么,而且允许重玩游戏,因为每种玩游戏的经历都将不同,即使起始条件总是相同的。这样的游戏是不完全信息博弈(imperfect information game),因为玩家不能预测使用随机选择的游戏动作的结果。《俄罗斯方块》(Tetris,由Alexey Pajitnow设计)就是不完全信息博弈的一个示例,因为玩家不知道哪些方块(拼板)将以什么顺序出现在屏幕的顶部。游戏中有7种方块,并且它们将随机出现,让玩家迅速断定把它们放在哪里。

3.2.1随机数生成器

在过去的日子里,用于计算机和视频游戏的处理能力非常有限,程序员可能创建一大张随机数的图表,并且游戏引擎将随机地选择起始数字。例如,计算机将使用当前的毫秒来确定图表中的起始位置。这种方法是有问题的,因为玩家可能从表格中发现结果的模式,从而能够进行欺骗。此外,图表中的数字实际上可能不是随机的并且遵循看不见的模式,这同样允许玩家发现重复的模式。
随着游戏平台变得更强大,程序员转而求助于伪随机数生成器——生成长长的随机数系列的算法,它们的值由称为种子(seed)的固定值确定。这种方法的问题是:最终数字序列将开始重复,或者算法将会使用别的位置所需要的过多内存。用于生成伪随机数的算法随着时间的推移而变得更复杂,因此玩家不太可能发现他们可以做出反应的模式。
可以证明在游戏制作期间极其有用的一个工具是文本捕捉程序,它可以把随机数生成算法的结果加载进一个文本文件中。虽然设计师可以尝试从视觉上分析结果,但是创建另一个用于在文本文件中搜索模式的工具将是有帮助的。只要没有找到明显的错误或者重复的序列,玩家将不太可能注意到游戏中有什么出错了。如果检测到问题,程序员就可能希望试验不同的算法。

3.2.2把骰子用于随机选择

在棋盘游戏中,随机选择可能具有多种形式。玩家可能需要使用转盘来生成随机数,或者从一摞纸牌中抽出一张纸牌使每一个回合都不同。通常,与棋盘游戏最紧密关联的方式是掷骰子(两粒或更多粒骰子)来生成随机数,然后把它们用于确定移动、战斗或其他游戏动作。
一些游戏使用单独一粒6面的骰子(在游戏用语中称之为d6)来生成随机数。在这种情况下,掷出任一数字的几率是1/6(166%)。使用单独一粒骰子只能提供有限数量的结果,并且出现任何一种结果的概率是相等的。
大多数游戏倾向于使用两粒6面的骰子(称为2d6),以获得更高的数字和结果的不同概率。与单独一粒骰子不同,其中出现所有结果的概率是相等的,在掷两粒骰子时,结果可能会有极大的变化。掷两粒骰子可以出现36个可能的结果。注意:没有结果“1”,因为每粒骰子的最小数字是“1”,并把它们相加到一起时,结果就等于“2”。表32显示了掷2d6骰子所得结果的百分比,图32则把结果显示为形象的钟形曲线。
《游戏设计师修炼之道:数据驱动的游戏设计》一3.2游戏中的随机选择

《游戏设计师修炼之道:数据驱动的游戏设计》一3.2游戏中的随机选择

《游戏设计师修炼之道:数据驱动的游戏设计》一3.2游戏中的随机选择

在掷出“7”时很可能出现一个意义双关的结果(在两种情况下都是16.7%),注意到这一点是有趣的。在游戏中使用两粒骰子很流行,尤其是在**游戏中。结果偏向于中间的数字(6、7和8),并且玩家极少掷出极端的结果(2和12)。在具有大约40个空格的棋盘上,比如《大富翁》的棋盘,中间的结果意味着以一种优雅的速度移动标记,急速或极其缓慢的移动只会偶尔发生。

3.2.3看待掷骰子的另一种方式

迄今为止,在游戏中使用6面的骰子有一些缺点。掷多粒骰子并把数字累加起来意味着对于两粒骰子最小的结果永远不会是“1”,对于3粒骰子最小的结果永远不会是“2”,对于4粒骰子最小的结果永远不会是“3”,等等。此外,大多数结果都挤在钟形曲线的中间,不可能给所有的骰子结果分配相等的几率。还有其他一些方式处理两粒骰子,并且可以得到比简单的钟形曲线更有趣的结果。
一种方法是掷出骰子并按顺序处理结果,而不是把它们累加起来。例如,在一款游戏中,玩家可以选择一次一粒地掷出两粒骰子(2d6)。他掷出第一粒骰子,并且在决定掷出第二粒骰子之前考虑结果。也许使用第一粒骰子的结果就可以让他把他的标记移到一个具有积极结果的空格上,因此他决定使用这个结果,并且完全忽略第二粒骰子。或者,如果他不得不掷出第二粒骰子,那么他将在第一次移动标记之后再把标记移动第二次掷骰子所确定的空格数——实际上是在同一个回合中移动两次。在《西洋双陆棋》(Backgammon)中使用了类似的方法,其中玩家可以把掷骰子的结果分给两颗棋子,或者使用组合的结果来移动一颗棋子。
另一种方法是使用结果的矩阵。在这种情况下,对应于第一次掷骰子的行与对应于第二次掷骰子的列是交叉引用的。在这种情况下,有36个潜在的结果,并且获得任何结果的几率是相等的。例如,在表3-3中,第一次掷出的“3”与第二次掷出的“4”交叉引用,从而得到结果16。在一些游戏中使用了矩阵,尤其是在纸面上的战争游戏中解决战斗。

《游戏设计师修炼之道:数据驱动的游戏设计》一3.2游戏中的随机选择