骰子模拟器

按桌面角色扮演通用的 NdM 记法输入表达式(例如 3d6+2),一次掷出多颗骰子并加修正值。页面用穷举法算出默认表达式各点数的精确概率,给出期望与方差,全部数字可复算。

投掷次数0
点数总和0
平均点数—
最高 / 最低— / —
示例展示(打开页面时的固定演示值,点「掷一次」会换成新的随机结果):

3d6+2 → [4, 1, 6] + 2 = 13
3d6+2 → [2, 5, 3] + 2 = 12
3d6+2 → [6, 6, 5] + 2 = 19

提示:在表达式输入框里按 Enter 可以直接掷一次;记录只留在浏览器内存里,刷新页面即清空。

使用方法

  1. 骰子模拟器的「投掷表达式」按 NdM 记法填写,默认 3d6+2(示例值):3 颗六面骰,点数总和再加 2。修正值可省略(写 2d20 即可),也可以是负数(如 2d20-1)。
  2. 点「掷一次」,或直接在输入框里按 Enter。结果区会给出完整拆解,例如「3d6+2 → [4, 1, 6] + 2 = 13」,方括号里是每颗骰子的独立点数,一眼能看出是哪颗骰子拖了后腿。
  3. 想观察分布,点「连掷 10 次」再点几次:统计卡片会实时更新投掷次数、点数总和、平均点数与最高最低值。掷得越多,平均点数越贴近理论期望 12.5。
  4. 「复制记录」把投掷历史按纯文本复制;「导出 CSV」下载带 BOM 的表格文件,Excel 打开中文不乱码;「复制概率表」把下方 3d6+2 的分布表按 TSV 复制。
  5. 「载入示例」把表达式恢复成 3d6+2 并连掷 3 次演示;历史最多保留最近 50 次,超出自动丢弃最旧的。

这个骰子模拟器能解决什么问题

一是跑团时手边没有实体骰子。桌面角色扮演常见 d4、d6、d8、d10、d12、d20、d100 七种骰,实体骰容易丢、容易滚下桌,本页把 d2 到 d100 全部收进一个输入框。

二是需要带修正值和大数量投掷。规则里常见的「4d6 去最低取属性」「8d6 火球伤害」用手算又慢又容易错,本页一次给出每颗骰子的明细与总和。

三是想要可核对的概率,而不是「感觉」。「3d6 掷出 15 以上到底难不难」这类问题,正文用穷举法给出精确答案:20/216 = 9.26%,不靠印象。

四是教学演示。一颗骰子是均匀分布,多颗求和会变成钟形分布——这是中心极限定理最直观的实验器材,连掷几十次看平均点数收敛即可亲手验证。

本页不做这些事:不做带权重的抽签(转盘类工具的领地),不做彩票号码挑选(彩票页的领地),也不做拒绝采样数学的完整推导(魔法8球页已讲透,本页只在随机源一节带过一句)。只想掷单颗二十面骰的话,D20骰子滚轴页面更专注。

原理:NdM 记法与多骰求和分布

NdM 是桌面角色扮演社区的通用记法。N 表示骰子颗数,d 是分隔字母(大小写均可),M 表示每颗骰子的面数,后面可以跟一个加到总点数上的整数修正值。本页用正则 /^ *(\d{1,2}) *d *(\d{1,3}) *([+-] *\d{1,3})? *$/i 解析表达式,把输入拆成颗数、面数、修正值三个整数,再逐颗取随机数求和。

随机源一句话带过。每颗骰子取数走 crypto.getRandomValues 并丢弃越界值:232 = 4,294,967,296 除以常见面数都有余数(比如除以 6 余 4),直接取模会让某些点数略微占便宜,拒绝采样把偏差清零,接受率约 99.99999991%,重试代价可忽略。整套推导的完整版本在魔法8球页,此处不再展开。

期望与方差有闭式公式。N 颗 M 面骰的期望是 N × (M+1) / 2,方差是 N × (M²−1) / 12,修正值加在期望上、不影响方差。以默认的 3d6+2 为例:期望 3 × 7 / 2 = 10.5,加 2 后为 12.5;方差 3 × 35 / 12 = 8.75,标准差约 2.958。这些公式值与下方穷举 216 种结果算出的经验值完全一致,可互相验证。

多骰求和向钟形收敛。1d6 的六个点数概率各 16.67%,是均匀分布;两颗求和后形状立刻改变——2d6 和为 7 的概率是 6/36 = 16.67%,而和为 2 或 12 各只有 1/36 ≈ 2.78%。到 3d6,分布已经很接近正态曲线,中央点数 10 和 11 合计占 51.85%。骰数越多越接近正态,这就是中心极限定理在骰桌上的样子。

多骰与单颗大骰不等价。2d6 与 1d12 期望相近(7 对 6.5),但波动差别很大:2d6 标准差约 2.415,1d12 约 3.452。多骰求和结果集中在中间,单颗大骰则处处可达——游戏设计里「稳定输出」与「赌博式爆发」的差异正源于此。TRPG 里经典的 4d6 去最低取属性法,期望约 12.2446(穷举 1296 种组合算得),明显高于 3d6 的 10.5。

修正值加在总和上,不逐颗加。这是本页的固定口径:3d6+2 的「+2」只加一次。个别桌面规则有「每颗都加」的写法,那种情况请把表达式写成 3d8 之类的变体或心算累加,本页不提供第二种修正口径,避免同一次投掷出现两种解释。

完整示例(数值仅作演示)

示例条件:表达式 3d6+2,掷 3 次。与控件默认值、概率表三处咬合。逐项对照:

把示例落到页面上:打开时结果区直出的三条演示记录用的是固定数字,点「掷一次」后每一次都会追加进历史,统计卡片同步刷新。如果连掷 10 次平均点数落在 10.5~14.5 区间之外,那更值得怀疑的是手感(样本只有 10 次),而不是骰子有问题。

输入范围与 3d6+2 概率对照表

表达式各成分的允许范围如下表:

成分含义允许范围示例
N一次掷的骰子颗数1~20 的整数3
d分隔字母,不区分大小写固定为 d 或 Dd
M每颗骰子的面数2~100 的整数6
±K加到总点数上的修正值,可省略-100~+100 的整数+2
完整表达式NdM±K数字与字母之间允许空格3d6+2

默认表达式 3d6+2 的点数分布(穷举 3 颗六面骰的 216 种等概率组合,点数 = 三骰之和 + 2):

点数有利组合数概率
51/2160.46%
63/2161.39%
76/2162.78%
810/2164.63%
915/2166.94%
1021/2169.72%
1125/21611.57%
1227/21612.50%
1327/21612.50%
1425/21611.57%
1521/2169.72%
1615/2166.94%

怎么读这张表
  • 16 个点数概率相加正好 100%:216 种组合每种 1/216,穷举没有遗漏。
  • 分布关于点数 12.5(期望)对称,12 和 13 并列最高,各占 12.50%。
  • 两端各只有 1 种组合(全 1 或全 6),所以极值点数罕见是结构性的,不是骰子质量问题。
  • 其他 NdM 表达式的概率可按同样方法穷举:N 颗 M 面骰共 MN 种组合,3d6 是 216 种、4d6 是 1296 种。

边界、期望与方差说明

常见问题

掷了十几次,怎么每个点数都不是「轮着来」的?

骰子没有记忆,每次投掷独立,各点数概率恒定(单颗 d6 每面 16.67%)。「轮流出现」是人对随机的错觉。掷 600 次时每个点数期望出现 100 次,但标准差约 9.13 次,某一面出现 85 次或 118 次都在正常范围。

连续两次掷出同一个数,是不是程序卡住了?

不是。单颗 d6 连续两次同点的概率是 1/6 ≈ 16.67%,平均每 6 次就发生一次,相当常见。每次投掷独立,前一次结果不影响后一次——这恰是真随机的特征,序列里没有重复反而可疑。

2d6 和 1d12 都是 12 以内,用哪个有区别吗?

区别很大。2d6 期望 7、标准差约 2.415,结果集中在 6~8;1d12 期望 6.5、标准差约 3.452,2~12 各点等概率出现。要稳定输出选多骰,要爆发波动选单颗大骰——这是桌面规则设计的常用取舍。

修正值是加在每颗骰子上还是总和上?

本页口径是只加在总和上一次:3d6+2 的三颗骰子各自是 1~6 的纯随机值,最后 +2。如果你的桌面规则要求逐颗加值,可以把表达式改写后分别计算再相加,本页不做第二种修正口径,避免同一次投掷有两种解释。

为什么不支持 0d6 或 1d1?

0 颗骰没有点数可言,掷了等于没掷,本页要求颗数至少为 1;1d1 每次恒为 1,输出毫无随机性,直接拒绝并提示改用 1d2 以上。边界拒绝都是为了防止「看似成功实则无意义」的结果污染记录。

随机数是什么来源?会不会被预测?

来自 crypto.getRandomValues,由操作系统熵源驱动,本页再对取模偏差做拒绝采样(接受率约 99.99999991%)。采样数学的完整推导见魔法8球页。它不是密码学场景下的承诺,但对骰子用途而言,等概率与不可预测性都足够。

我想掷 20 颗以上的骰子,或者更大的面数,可以吗?

骰子模拟器上限是 20 颗 × 100 面,单次总点数最高 2000,已覆盖 d4 到 d100 的全部常见骰型。需要任意区间的批量随机数(比如 1 到一百万),那属于通用随机数问题,请用随机数生成器页面。

投掷记录会保存吗?下次打开还在吗?

不保存。记录只存在当前页面内存里,最多保留最近 50 次,不写 localStorage 也不发网络请求,刷新、关闭标签页即清空。要留档请在离开前点「复制记录」或「导出 CSV」,导出文件带 BOM,Excel 打开不乱码。

相关工具