如何制作你自己的“意想不到”的数字生成器

421 位读者喜欢这篇文章。
Make your own random number generator

Seth Kenlon。CC BY-SA 4.0。

有时,随机数生成是计算机科学中一个经典的著名问题,这让人们感到惊讶,因为它看起来应该很容易;只需选择一个数字即可。然而,要让计算机变得随机是很困难的。许多 Linux 用户对 /dev/random/dev/urandom 设备有所了解,而且大多数人都意识到,从技术上讲,那里生成的数字并非真正、科学意义上的随机。

这在人类世界中也有体现。在你被要求持续想出一个随机数之前,你不会意识到这一点。如果你只需要一个随机数,你可以深入思考,随意提取你脑海中浮现的任何数字(你说的是 3、7、23 还是 42?)。与计算机中的非加密过程一样,“大致随机”就足够了。但是,如果你被要求每分钟“生成”一个新的随机数,你就会开始犹豫;你会对某个范围或模式的数字产生偏好,即使你没有,你的大脑也会在你提出的数字中找到模式,所以你会怀疑你的随机性。

随机数生成问题与游戏息息相关,因为无论你面对的是哪种人工智能(AI),如果其中加入一定程度的随机性,感觉都会更真实。有些游戏根本没有人工智能,完全依赖掷骰子来决定冲突。

骰子的问题

模拟游戏很久以前就解决了获得随机数的问题,最显着的是骰子。掷骰子,得到一个足够随机的数字。问题解决了。

对我来说,骰子的麻烦在于你并不总是能轻易拿到骰子,而且你并不总是有地方掷骰子。具体来说,我在飞机上遇到了这个问题。在从新西兰飞往美国的 14 小时航班(以及随后的 6 小时飞往东海岸的航班)上,我经常通过单人 RPG 冒险来消磨时间;这有点像“选择你自己的冒险”书籍,但增加了技能点、战斗等级和其他统计变量的维度。为了确定在单人 RPG 或地下城探索游戏中接下来要去哪里,一系列的掷骰子决定了战斗或敏捷的结果(例如,如果试图避开突然出现的陷阱)。

如果一个怪人在你旁边 compulsively 摇晃一杯骰子,那么乘飞机旅行就够让人不愉快的了。
可以在飞机上带上骰子,但我从来没有想到过。即使我想到了,我也会为将骰子掉进我的空咖啡杯并每三分钟摇晃它们来玩游戏而感到不自在。即使你不在飞机上,你也可能在你需要的时候手边没有骰子;也许你在咖啡馆消磨时间,或者你在等待预约,或者你在公交车站有几分钟的空闲时间。

今年 11 月 14 日,另一个变得非常真实的场景是 7.5 级地震后撤离我的家;在等待海啸警报消失时,我发现自己有很多时间玩游戏,但没有骰子。

由于骰子可能带来的社交尴尬,以及骰子通常不适合放在你的钱包里,我决定需要一种替代方案。我想要一种可以产生具有随机性幻觉的数字,并且可以放在我的钱包或书的折叠处的东西。

如果你寻找,互联网确实提出了骰子的替代方案。有一些有趣的数学技巧,比如自播种模运算,或者使用一副标准的扑克牌(抽一张牌,得到一个数字)、幸运轮等等的想法。这些方法中的大多数都非常好且非常可用,但我想要一些像骰子一样方便、高效和简单的东西。

小册子和 PocketMods

碰巧的是,我在当地一家艺术画廊参加了一个独立杂志工作坊,在那里我学到了一种很酷的折纸技巧,用来制作一种叫做小册子的东西,互联网告诉我,它现在更广为人知的名字是PocketMod。无论名称如何,这都是一种非常简单的方法,可以将一张美国信纸或 A4 纸变成一本 8 页的小册子,无需订书钉或装订。最终得到的小册子足够小,可以放进你的钱包。

参加完工作坊后,我想到 PocketMod 的外形尺寸非常方便和简单,它将是骰子替代品的完美分发方式。我所要做的就是发明和设计它。

意想不到的数字生成

它在加密或任何容易受到重复暴力破解或分析的东西上效果不佳,但对于单人游戏和合作游戏,我们通常想要的是意想不到的数字。我们实际上并不关心它有多随机,只要当我们看到这个数字时,我们真的感到惊讶。即使在竞技游戏中,意想不到的数字也与随机数字一样有效,只要它对所有玩家来说都是同样意想不到的。

你可以安全地假设你的对手(或者你自己,如果玩单人游戏)如果可以选择,每次被要求掷骰子时都会选择尽可能高的结果。任何呈现你无法预测的数字的系统都会感觉足够随机,因为即使你翻了白眼并说“他们当然会掷出 6”,但最终他们只掷出了 3。这是一个真正的惊喜,所以它感觉是随机的,并且它与游戏结果固有的不确定性保持一致。

我有一个想法,数字网格可以作为它自己的偏移量,这反过来会欺骗人脑做出足够随机的选择来产生意想不到的数字。

例如,如果我有一个简单的网格

1 2 3
4 5 6

当我要求你选择一个数字时,然后我可以使用你选择的任何数字来选择一个新的网格(来自隐藏的六个备用网格),布局不同,让你的“掷骰子”结果成为你在你选择的单元格中找到的任何数字。例如,假设你从上表中选择数字五 (5)。这会将你发送到表五,底行的中间列。假设这是表五

3 5 1
4 2 6

根据我们的系统,你“掷出”了数字二。

在你的下一个回合中,你将使用表二(因为你上次掷出了数字二),只要你在查看表二之前选择一个单元格,你仍然会对结果感到惊讶,因为无法预测哪个数字在哪个单元格中。

至少在您习惯哪个表是哪个表之前是这样,但是可以通过使用未编号的表来解决这个问题。我没有为表分配标签,而是决定按位置指定它们:具体来说,是 PocketMod 小册子中未编号的页面。玩家的任务

  1. 从小册子中的任何页面开始
  2. 在表格中选择任何单元格
  3. 使用你选择的单元格中的数字,翻到那么多页

它实际上是一个随机数生成器;不是科学意义上的,而是心理意义上的。到目前为止,来自玩家的反馈证实,该系统充分混淆了人脑,以至于任何形式的偏差(“我会在这一页上选择一个低数字,因为我很确定我记得向右翻 5 页会在相同位置呈现一个高数字”)都被证明是足够不可靠的,以至于打消了大脑设计秘密的、强制性破解方法的念头。

我发现我可以在设计该系统的物理实现方面做更多技巧,我使用非常出色且完全开源的 Scribus 桌面排版应用程序完成了这项工作。

Scribus

我通常不使用文字处理器或 WYSIWYG 应用程序,因为它们都倾向于假设你正在为单一输出进行设计。但是,对于这个项目,我确实在为特定输出进行设计;我想生成一个可以在单张美国信纸和 A4 纸上打印的文件,然后将其折叠成 PocketMod,并放在钱包中,或用作游戏书中的书签。由于曾在以前的工作中将其用于专业印刷工作,并用于一些社区会议,我知道 Scribus 是完成这项工作的工具。

当开始使用页面布局应用程序时,通常第一步是设置目标页面尺寸。为了确保一切都正确折叠,需要为美国信纸和 A4 纸分别创建一个文件。

页面尺寸和方向。页面尺寸和方向。

接下来,我需要定义小册子中“页面”的含义。我可以伪造它,或者花几个小时在 Scribus 中拖放参考线,但我更喜欢让软件为我进行计算。从页面菜单中,我选择了管理参考线,并在出现的参考线管理器窗口中使用了列/行设置

Guides.
参考线。

接下来,我生成了一些简单的网格。为了避免页码翻页和掷骰子结果之间的混淆,我决定使用字母作为参考。玩家选择一个字母,它具有到达目的地的页码翻页次数,使他们的“掷骰子”结果成为他们在翻页时在网格中找到的与该字母相同的数字。

Tables.
表格。

PocketMod 设计的一个优点是,如果你愿意,它可以是一本无限循环的书,没有明显的开始或结束。如果玩家觉得他们的掷骰子的意外性正在降低,那么只需将新页面设为“第一”页,就可以更改初始页码翻页的偏移量。突然,所有目标表格都改变了!不可预测性回归了。

为了增加更多的意外性,我意识到小册子不仅是无限的,而且还是可翻转和可翻动的。无需定义开始、结束、从左到右或从右到左,或顶部或底部。因此,我在每页上都添加了倒置表格,让玩家可以选择每次掷骰子时书应该朝哪个方向。

最后,为了使系统更加多样化,我决定提供六单元格表格和十单元格表格。

A sample page.
示例页面。

六单元格表格模拟六面骰子(游戏术语中的“d6”),十单元格表格模拟十面骰子(“d10”)。此外,可以通过掷两次骰子并取掷骰子结果的总和,或通过取目标页面上正立和倒置表格的结果来模拟 d12 和 d20。

统计学上不正确

我的系统的“问题”在于,严格来说,它在统计学上是不正确的。“掷骰子”的动作是通过多个表格中不同排列的单元格来模拟的。在 d6 上,骰子有六个面,因此应该有六个骰子排列的快照。但是,PocketMod 小册子有八页。每页加倍表格会导致 16 个快照,因此无论如何,该系统都有空间容纳比可能的掷骰子配置更多的快照。

当然,在数学上有一种“正确”的方法来解决这个小故障,但最终我选择走上追求更大意外性的道路,而牺牲了统计上准确的(伪)随机性。

该项目已获得 知识共享 许可,但是,如果统计学家有兴趣制定“正确”的表格来平衡潜在结果,则可以对其进行改进!

说明

为了使系统成为独立的,我想在打印页面的另一面写上如何使用它的说明,以及可能更重要的是,如何将其折叠成小册子的说明。网上有将页面折叠成 PocketMod 的说明,但我找不到许可信息,所以我决定自己重新创建说明。

我手绘的首选工具是出色的开源 Krita。配备廉价的 Wacom 平板电脑(所有平板电脑都附带 Linux 驱动程序)和 Krita,你的插图可以看起来很专业,甚至有点艺术感。

一般来说,我发现诀窍在于笔刷的选择。例如,一个带有锥形笔触和可变粗细的真正出色的 Krita 笔刷与直接从 KolourPaint 中取出的像素标记之间的区别可能会产生很大的不同

Krita made the pretty one.
Krita 制作了漂亮的那个。

由于我发现网上大多数说明都有些令人困惑,因此我主要根据我在独立杂志工作坊中学到的内容编写了说明。我花了不超过 15 分钟就完成了。我保存了文件并导出了一个 png 版本,我将其导入到 Scribus 中并将其放置在我的设计的第二页上。

该项目的所有设计文件都是开源的,可从位于 gitlab.com/notklaatu/pocketdicerollergit 存储库中获取。

分发

有很多方法可以分发单张模拟骰子滚动模拟器;分发途径对于开源软件和自由文化来说不是问题。但是,我不想假设玩家会知道 git 是什么,甚至知道如何从 Scribus 打印或构建 PDF。我希望能够将最终产品交付给玩家,以便他们在家中打印。袖珍骰子滚动器最好在你身边放多份副本时使用;一个在你的钱包或手提包里,一个塞在你的 RPG 规则书中,另一个在你的背包里,还有一个备份在你的笔记本中。只有这样,你才能确保你永远不会没有意外数字生成器。

令我惊讶的是,许多在线分销商都希望你出售你的产品。我不想为我的产品收费,但最终我找到了一个完美的网站:rpgnow.com/product/195037/Pocket-Dice-Roller。这是一个已经吸引了硬核游戏玩家受众的网站,虽然它确实允许供应商为他们的工作收费,但它没有内置收费的期望。该网站允许游戏玩家通过浏览他们已经访问的网站来发现该系统,免费下载该产品,然后在家里打印出来。

游戏测试

是的,但是这个系统有效吗?

我最近有幸连续飞行了 24 个多小时(不包括每次飞行之间的中途停留)。这让我有足够的时间玩一些基于骰子的单人纸牌游戏。使用 Tunnels and TrollsLone Wolf 游戏系统,我玩了数小时,所有骰子滚动都由袖珍骰子滚动器模拟。后一个游戏系统使用 d10(10 面骰子),前一个使用 d6,因此我可以广泛测试这两个表格。

在没有实际骰子的情况下,我很高兴地发现游戏仍然像以往一样困难、复杂、扣人心弦。这些数字是完全不可预测的;即使当我开始认为它变得可预测时,它也让我惊讶地证明我无法知道翻到种子页面后会落在哪个数字上。

我的模拟器也比我在设计时意识到的更灵活。

首先,你可以使用滚动种子(你之前的滚动值成为你的新种子),或者你可以每次从任何表格重新播种。你甚至可以使用错误的表格作为种子;仅仅因为你正在玩 d6 并不妨碍你从 d10 播种。如果你对你的袖珍骰子滚动器小册子的方向感到非常困惑,你可以自由地跳过种子过程;只需选择一个字母并翻到随机页面。

Lone Wolf 系统使用战斗比率来计算你和你的敌人的伤害,因此每次攻击只需要掷一次骰子,但 Tunnels and Trolls 系统需要掷两次骰子:一次计算你的伤害,另一次计算你的敌人的伤害。当一个游戏需要掷两次骰子时,我发现自己选择一个字母并翻到一页,并使用正面表格上的字母结果,或同一页上的两个表格(朝北和朝南的表格)。我建立了一个关于哪个结果是英雄,哪个结果是敌人的规则,所以这本质上是两个动作合二为一,这加快了实体游戏的速度,实际上使攻击过程更加激动人心,就好像一切都在同时发生一样。

在经过几个小时的纸牌地下城探索游戏和为期两天的飞行(去程 24 小时,回程 24 小时)RPG 马拉松之后,我确信袖珍骰子滚动器与掷骰子的结果一样令人满意地不可预测。下载它并尝试一下。更好的是,打开 Scribus 并使其成为你自己的!

Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时从事这两个行业。

评论已关闭。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.