使用方法
- 骰子模拟器的「投掷表达式」按 NdM 记法填写,默认 3d6+2(示例值):3 颗六面骰,点数总和再加 2。修正值可省略(写 2d20 即可),也可以是负数(如 2d20-1)。
- 点「掷一次」,或直接在输入框里按 Enter。结果区会给出完整拆解,例如「3d6+2 → [4, 1, 6] + 2 = 13」,方括号里是每颗骰子的独立点数,一眼能看出是哪颗骰子拖了后腿。
- 想观察分布,点「连掷 10 次」再点几次:统计卡片会实时更新投掷次数、点数总和、平均点数与最高最低值。掷得越多,平均点数越贴近理论期望 12.5。
- 「复制记录」把投掷历史按纯文本复制;「导出 CSV」下载带 BOM 的表格文件,Excel 打开中文不乱码;「复制概率表」把下方 3d6+2 的分布表按 TSV 复制。
- 「载入示例」把表达式恢复成 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 次。与控件默认值、概率表三处咬合。逐项对照:
- 单颗点数范围 1~6,三颗总和范围 3~18,加修正值后最终点数范围 5~20;
- 全部 216 种等概率组合中,掷出最高点 20 的概率是
1/216 ≈ 0.4630%(即三颗全 6); - 掷出 15 以上的概率是
20/216 ≈ 9.26%,大约每掷 11 次遇到一次; - 期望 12.5,标准差约 2.958——示例输出里三次结果 13、12、19,前两次都在期望附近一个标准差内,19 偏离约 2.2 个标准差,属于少数但正常的情形;
- 连掷 600 次单颗 d6 时,每个点数期望出现 100 次、标准差约 9.13 次——即使掷了几百次,各点数次数不相等依然是正常波动。
把示例落到页面上:打开时结果区直出的三条演示记录用的是固定数字,点「掷一次」后每一次都会追加进历史,统计卡片同步刷新。如果连掷 10 次平均点数落在 10.5~14.5 区间之外,那更值得怀疑的是手感(样本只有 10 次),而不是骰子有问题。
输入范围与 3d6+2 概率对照表
表达式各成分的允许范围如下表:
| 成分 | 含义 | 允许范围 | 示例 |
|---|---|---|---|
| N | 一次掷的骰子颗数 | 1~20 的整数 | 3 |
| d | 分隔字母,不区分大小写 | 固定为 d 或 D | d |
| M | 每颗骰子的面数 | 2~100 的整数 | 6 |
| ±K | 加到总点数上的修正值,可省略 | -100~+100 的整数 | +2 |
| 完整表达式 | NdM±K | 数字与字母之间允许空格 | 3d6+2 |
默认表达式 3d6+2 的点数分布(穷举 3 颗六面骰的 216 种等概率组合,点数 = 三骰之和 + 2):
| 点数 | 有利组合数 | 概率 |
|---|---|---|
| 5 | 1/216 | 0.46% |
| 6 | 3/216 | 1.39% |
| 7 | 6/216 | 2.78% |
| 8 | 10/216 | 4.63% |
| 9 | 15/216 | 6.94% |
| 10 | 21/216 | 9.72% |
| 11 | 25/216 | 11.57% |
| 12 | 27/216 | 12.50% |
| 13 | 27/216 | 12.50% |
| 14 | 25/216 | 11.57% |
| 15 | 21/216 | 9.72% |
| 16 | 15/216 | 6.94% |
| 17 | 10/216 | 4.63% |
| 18 | 6/216 | 2.78% |
| 19 | 3/216 | 1.39% |
| 20 | 1/216 | 0.46% |
- 16 个点数概率相加正好 100%:216 种组合每种 1/216,穷举没有遗漏。
- 分布关于点数 12.5(期望)对称,12 和 13 并列最高,各占 12.50%。
- 两端各只有 1 种组合(全 1 或全 6),所以极值点数罕见是结构性的,不是骰子质量问题。
- 其他 NdM 表达式的概率可按同样方法穷举:N 颗 M 面骰共 MN 种组合,3d6 是 216 种、4d6 是 1296 种。
边界、期望与方差说明
- 颗数上限 20、面数上限 100。骰子模拟器拒绝超出边界的组合并给出具体提示;上限组合 20d100 的总点数范围是 20~2000,已覆盖主流桌面角色扮演的全部骰型(d4 到 d100);更大的颗数会让结果区一行放不下明细,且实际规则里几乎用不到。
- 面数下限 2。d1 每次恒为 1,没有随机意义,本页直接拒绝并提示;想做硬币正反面请写 1d2。
- 修正值范围 -100~+100,加在总和上。修正值不参与每颗骰子的取数,因此不影响方差,只平移期望与整个分布。
- 历史记录只保留最近 50 次。超出后自动丢弃最旧的,统计卡片按当前保留的记录计算。记录不写本地存储、不上传,刷新即清空。
- 单次结果没有「应该是什么」。3d6+2 的期望是 12.5,但单次掷出 5(概率 0.46%)与掷出 12(概率 12.50%)都是合法结果;期望是长期平均,不是每次的预测值。
- 随机源缺失时明确报错。没有
crypto.getRandomValues的环境下本页拒绝投掷并提示更换浏览器,不会静默回退到低质量随机数。
常见问题
掷了十几次,怎么每个点数都不是「轮着来」的?
骰子没有记忆,每次投掷独立,各点数概率恒定(单颗 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 打开不乱码。