附录 A 品类参数表、机制距离矩阵与数据集索引
《游戏设计》卷三《原型、可玩性与品类》附录:把六个品类变体的规则段与参数段关键字段汇成品类参数表、把 6×10 整数特征向量与 6×6 机制距离矩阵(L1 与归一化千分比两级)汇成距离表、把全卷 16 章的 S/P/W/D/B 产物按章汇成数据集索引。距离与全部指标都是代理指标,只做相对比较,禁绝对化。
category
《游戏设计》卷三《原型、可玩性与品类》附录:把六个品类变体的规则段与参数段关键字段汇成品类参数表、把 6×10 整数特征向量与 6×6 机制距离矩阵(L1 与归一化千分比两级)汇成距离表、把全卷 16 章的 S/P/W/D/B 产物按章汇成数据集索引。距离与全部指标都是代理指标,只做相对比较,禁绝对化。
把涌现度写成「可达阵容数 / 规则条数 × 1000」的代理指标:本规格枚举出 9390 个可达阵容、16 条规则,涌现度 586875‰;但如实报告一个退化解——敌方强度扫到 20 时只剩 1 个阵容每回合都能赢,21 起无解,涌现度必须与退化检测同读。
把自走棋的三个花钱方向——存钱吃利息、刷新换棋子、升级扩容量——都写成整数模型,在 32 个种子上实测:利息是 min(金币整除台阶, 上限),刷新不亏利息的阈值是 12 金;实跑给出一条可算判据(升级换的是新位、刷新只换最弱)和两个平衡破坏点。
把自走棋拆成六个机制字段——商店刷新、购买、合成升星、上阵、利息、连胜连败——每格都绑到新建品类内核里的一段确定性代码:W 层把六格商店与待命、上阵画进单文件 HTML 并真玩,P 层逐字段做变异断言,改一格摘要必变,两处 digest 与基线逐字一致。
把「挑战(关卡要求的容差帧数)− 技巧(玩家可达到的容差帧数)」做成带宽区间而不是单点:扫第一块落点平台宽度得到单调不降的容差曲线,再给高手 / 熟练 / 休闲三档玩家各算一条带宽上下界与越界判据,全部读数都是代理指标,只做相对比较、禁绝对化。
把「技巧」操作化成一个可算的量:玩家每一跳的按压时刻相对帧级完美点偏移 ±n 帧,枚举 (2n+1)^跳数 条序列报通关率,得到一条单调不增的技巧曲线;n≤2 恒为 1000‰,tol1000 = 2 帧、tol500 = 8 帧。通关率是代理指标,只做相对比较。
把平台跳跃的六个机制字段——水平速度、跳跃高度、重力、土狼时间、输入缓冲、平台判定——各绑到 core/genre/platformer.ts 里一段确定性代码,位置与速度一律用千分格整数表达,禁浮点;规格骨架与 play_spec.json 同构、只覆盖 rules / params 两段,W 层把字段画进单文件 HTML 并真玩,P 层逐字段断言,两处 digest 与基线逐字一致。
三消没有回合,节奏量不出时长,只能量每步结算的形状:256 局 6144 步的连锁长度分布(1 层 639‰、2 层 232‰、尾巴拖到 10 层)与每步消除数分布(3-5 格 533‰、平均 6.182 格),加代表种子 70701 的24 步节奏线与 CSV + 纯 xml.etree SVG,并用 Python 镜像做跨语言逐字对账;节奏指标是代理指标。
三消的随机不是抽一张牌,是整块棋盘:每次补牌都可能补出一个没有任何合法交换的死局。本节用同一批 256 个种子量死局率,再把「连续 N 次无可消就重排整板」的保底写成可播种的整数代码——保底把死局率从 121‰ 压到 0‰,同时把分数标准差从 265 削到 132;死局率与方差是代理指标,只做相对比较。
把三消的五个机制字段——棋盘、交换、消除、掉落、连锁——各绑到 core/genre/match3.ts 里一段确定性代码,用一张字段表把机制名词与可断言实现对齐:规格骨架与 play_spec.json 同构、只覆盖 rules / params 两段,W 层把字段画进单文件 HTML 并真玩,P 层逐字段断言,两处 digest 与基线逐字一致。
把波次强度 waveHpStep 从 0 往上推,用粗扫 + 二分找「防守被解开」的临界点:临界点是 14,两侧胜率 13→937‰、14→343‰、15→0‰,临界宽度只有 1;粗扫 + 二分只用 7 格 224 run 就钉到,占步长 1 全网格的 114‰,并给出二维网格超预算时退回采样的判据。胜率是代理指标,只做相对比较。
把塔防的「塔位 × 塔种 × 升级次序」枚举成策略空间:忽略花费剪枝的上界 271453 经剪枝压到 529 条可达布防,空间熵 9046、结果分布熵 2293、支配缺失度 331‰;全配置上界 469070941 远超枚举上限,只能按索引采样 512 次,并给出「何时改用采样」的判据。熵与支配度是代理指标,只做相对比较。
把塔防的五个机制字段——路径、波次、索敌、塔位、升级——各绑到 core/genre/towerdefense.ts 里一段确定性代码,用一张字段表把机制名词与可断言实现对齐:规格骨架与 play_spec.json 同构、只覆盖 rules / params 两段,W 层把字段画进单文件 HTML 并真玩,P 层逐字段断言,两处 digest 与基线逐字一致。
把牌组规模当成被扫的构筑参数:往《灰烬牌库》里加废牌,牌组从 12 张膨胀到 32 张,128 个种子上的胜率从 1000‰ 掉到 46‰。粗扫步长 4 框住跨越 500‰ 的区间 [20, 24],二分 2 轮钉出临界牌组规模 22,与步长 1 的全网格逐个一致;相变带宽 13,2688 次 run 实跑约 28 毫秒。
把构筑的方差量成整数:精确枚举 C(12,5)=792 种起手,三副牌组的起手强度方差相差 5.8 倍;「均匀」与「起伏」两副牌起手期望完全相同(均值 30),方差却是 12727 对 57272,胜率一样而结束回合的方差相差 2.3 倍——方差不是坏东西,它是节奏的来源。
把《灰烬牌库》的五个机制字段——洗牌袋、抽牌、出牌、能量、弃牌——各绑到确定性内核里的一段代码,用一张字段表把机制名词与可断言的实现对齐:W 层把五个字段画进单文件 HTML 并真玩,P 层逐字段断言,两处 digest 与基线逐字一致,W 层 3 断言、P 层 7 断言全绿。
区间要变成决策,判据必须是三态而不是两态。本节用整数判据输出通过 / 不通过 / 样本不足:先看半宽之和能否分辨 Δ,再看点差够不够。实跑三个案例恰好各出一态,其中小样本案例点差高达 375‰ 却被诚实地判为「样本不足」,而参数微调案例点差为 0 判不通过。
样本量决定「看得见的最小差别」。本节把样本量落到整数 Wilson 区间上:对占比类可解率用 z=2 的整数近似(isqrt,非 1.96),对非占比类用块极差;六档种子数实跑显示半宽之和从 n=8 的 545‰ 收到 n=256 的 117‰,刚好跨过 Δ=150‰。
「我想验证难度会不会太高」不是假设,是愿望——它没法被判伪。本节把测试目标写成可机检的五元组:指标、方向、阈值、样本量与一对互斥命题;先做可证伪性自检,再用 32 个种子的试点反推所需样本量,实跑得 nRequired=256,与设计门槛 Δ=150‰ 对齐。
把「种子 + 整段策略序列」编码成可回放的链接片段 #s=301&seq=...,页面读取 location.hash 后逐字重现同一局。本节给出编解码契约、页面侧 replay() 的三步、以及回放一致性的断言:Python 侧重跑与 Node 构建期 digest 逐字相同,再编码必须无损。