Skip to content

骰子

你可以使用以下两种方法来描述一个骰子。

方法一:使用 DiceExpression(推荐)

这是最简便的方式:直接用一个形如 mdn 的字符串来表示掷出 mn 面骰子的点数总和。

  • 基本格式{数量}d{面数},例如 2d6 表示投掷两个六面骰子并求和。
  • 数量可以省略,省略时默认为 1。例如 d6 等价于 1d6
  • 支持恒定修正:你还可以在表达式末尾附加 +- 加一个固定值,例如 2d6+31d20-1,这种恒定修正会直接附加到骰子总和上。

示例:

  • d6:一个六面骰子(1~6)。
  • 2d4:两个四面骰子,点数加和(2~8)。
  • 3d6+2:三个六面骰子点数加和后再加2(5~20)。
  • d20-1:一个二十面骰子减1(0~19)。

方法二:使用 ADVDice

当你需要完全控制掷骰逻辑,或者想要实现一些特殊的随机效果(例如加权骰子、从服务器获取随机数等),可以传入一个 ADVDice 对象。

ADVDice 类的参数如下:

参数名类型描述
namestring骰子的名称,会显示在检定提示中,例如“力量检定骰”。
roll(dice: (exp: DiceExpression)) => number一个返回随机整数的函数,代表一次投掷的结果。参数 dice 会为你提供一个函数用于模拟投掷,传入 DiceExpression,返回投掷后的结果

例如,定义一个始终掷出最大值的“幸运骰子”:

typescript
const luckyDice = new ADVDice('幸运骰', () => 20); // 始终返回20

定义一个用两个 d6 相乘的骰子:

typescript
const dice = new ADVDice('d6*d6', (d) => d('d6') * d('d6'));