11.3 战斗的相变与支配
把 enemyAttack 从 8 扫到 48,序参量取「slot1 严格支配 slot4 的种子比例」(千分比):参数小时为 1000‰,调大后一路下滑。粗扫步长 4 框住跨越 500‰ 的区间,二分两轮到临界 enemyAttack=30,步长 1 全网格复验一致,相变带宽 13,全程 41 格 656 次 run。
category
把 enemyAttack 从 8 扫到 48,序参量取「slot1 严格支配 slot4 的种子比例」(千分比):参数小时为 1000‰,调大后一路下滑。粗扫步长 4 框住跨越 500‰ 的区间,二分两轮到临界 enemyAttack=30,步长 1 全网格复验一致,相变带宽 13,全程 41 格 656 次 run。
用固定下标族 slot0…slot4 在 16 个种子上跑出得分矩阵,算严格/弱支配对、支配策略缺失度(千分比)与结果分布的 Shannon 熵(×1000):没有支配策略(缺失度 1000‰),但 slot4 被其余四条策略严格支配——策略空间既没被解死、也不是全有效,是一个有真实弱选项的可玩空间。
把《灰烬牌库》的战斗拆成三组可断言字段——伤害结算(min 截断与守恒)、时序(出牌次序与谁先手)、资源(能量门控与三分区守恒),每组各绑内核里一段确定性代码:S 层枚举手牌全排列,同一手牌同能量总伤害从 6 变到 20(极差 14);P 层六条断言全绿。
把自我决定理论的三要素映射成三个可算的代理指标——自主看可选升级路径数、胜任看升级成功间隔、关联看里程碑间隔——并在同一份规格上扫五档升级成本增长率(1020 至 1100),验证三个指标同向移动;全文显式声明它们只是 proxy,只做相对比较、禁绝对化、不证明好玩。
把放置的增长曲线钉成整数:升级成本给递推与 BigInt 闭式两种口径并实测整数溢出边界(Number 幂在 n=7 越过 2^53、n=103 起失真、n=104 起 NaN);再扫升级成本增长率,粗扫加二分找到里程碑达成率跌破 500‰ 的临界点 1042,端相分别对应进度失控与进度卡死。
把放置的五个机制字段——自动产出、离线收益、升级成本、里程碑、转生——各绑到 core/genre/idle.ts 里一段确定性代码:增长曲线用整数递推与 BigInt 闭式两种口径,规格骨架与 play_spec.json 同构、只覆盖 rules / params 两段;W 层把五格画进单文件 HTML 并真玩,P 层逐格断言 15 条全绿。
把纸面规则表与纸面记录机械地转成与 play_spec.json 同构的结构:字段一一对应,标出哪些能机械转(M)、哪些必须人工裁决(X)。X 补齐后回放纸面记录覆盖的动作序列,摘要必须与原始规格逐字一致——「机械部分无信息丢失」这才算被证明。
纸面推演只有结论就是无法复现的轶事。本节把一次两回合推演记成「动作序列 + 每步全量整数状态」的 JSON,再用引擎回放它、逐字段比对,误差必须是 0;每步还校验牌数、伤害、能量、格挡四条守恒。负对照把第 7 步抄错 1 点,回放必须精确定位到那一步。
把规则先写在纸面上,不写一行代码就能判断它是否完整:纸面规则表把每条规则写成触发、条件、效果、状态增量,脚本再校验它是「可执行的全函数」——没有悬空状态变量、条件可判定、引用不越界,并用负对照证明检查非空。这是《灰烬牌库》从纸面走向可执行规格的第一步。
《游戏设计》卷三《原型、可玩性与品类》目录:16 章 48 节,把同一份玩法规格 config/play_spec.json 实例化到六个品类变体(卡牌构筑 / 塔防 / 三消 / 平台跳跃 / 自走棋 / 放置),跑同一套仿真与确定性内核,要求 6/6 通过可玩性闸门,并给出 6×6 品类机制距离矩阵。本页给出与既有内容的分工、六档可运行性口径与全书 16 章 48 节完整清单。
《游戏设计》卷二《策略、涌现与体验度量》附录:把全卷 16 章的动态与体验指标定义式汇成一张整数公式表、把共享种子池与各章工作点汇成一张参数表、把 48 节的产物与生成脚本汇成一张数据集索引表,并给出一段真跑过的全卷指标总表聚合内核。全部指标都是代理指标,只做相对比较,禁绝对化。
曲线画得好不等于节奏对得上。本节把「节奏」操作化为每回合的行动数,用整数同序率量张力曲线与行动节奏是否同向:baseline 只有 290‰(低于 500‰ 随机基线,说明节奏前置、张力后置),把动作后置的策略能升到 810‰,而调高能量反而把同序率压到 0‰。
单局张力是一条读数,多局张力才是一条曲线。本节把固定种子池上的每局张力按回合取整数均值,并规定「已结束的局按 0 计入」这一释放口径,于是曲线自带上升—高潮—回落的形状;再从曲线抽出峰值、峰值回合、面积、蓄势、释放落差五个整数特征,画成纯 xml.etree SVG。
张力不是主观感受,而是可观测状态的代理指标。本节把每回合张力定义为「推进度」与「承压度」两个千分比分量的整数均值,在《灰烬牌库》上量出单局曲线,看峰值如何随 enemyAttack 抬高、取胜时张力怎样在决胜回合被释放、落败时又怎样无处释放;峰值只描述拉得多紧,释放落差才描述松没松开。
类型分布不是常数。本节用整数最佳回应动力学让人口占比按各类型最优得分相对平均分迭代,敌人攻击从 12 扫到 18,同一初始分布漂移 244‰ 到 278‰;再把每条策略当成行为固定的玩家做归类,分类漂移率从 0‰ 涨到 156‰——类型边界本身也在动,重排集中在 14 到 16 这一段。
映射度 = 施加一个机制旋钮后某类型的最优得分动了多少(千分比整数)。本节把 12 个旋钮逐个施加到切片规格上,对四个类型各重跑一遍策略空间,得到旋钮 × 类型矩阵:8 个普适、2 个偏向、2 个对照旋钮必须全零;而四个让战斗变短的旋钮反而让探索者受损。
玩家类型在散文里是四个标签,在机制里必须是四条目标函数。本节把类型写成六个结果轴(胜率、伤害进度、存活、出牌量、速通、伤害效率)上的整数权重向量,在 4096 条回合模式策略上枚举出 150 个结果画像,让四个类型各自挑出最优策略:主种子池上四类选出四条不同代表策略,换池掉到两条。
对齐在本节只有一个可判定的含义:每个动因分量能不能被某个旋钮单独推动。本节在固定工作点上逐个扰动五个旋钮,量出它们对自主与胜任的 Δ,判定专属、共享、死旋钮三类归属:自主有两个专属旋钮,胜任一个都没有,关联无任何旋钮,对齐度只有 333‰。
动因要能被工程使用,必须把归一化、权重、缺失处理三件事全部写成声明。本节把自主与胜任归一化到 0–1000,在 energyMax × handSize 网格上算出 20 个动因总分 M,并用三组权重各算一遍:最优格不变,但最优与次优的差距从 50 变到 66 再变到 33。
自我决定理论说人有自主、胜任、关联三种基本心理需要,但它们都不可直接测量。本节把每种需要落成代理指标(proxy):自主用决策点上的合法动作数、胜任用胜率与残余血量、关联因内核没有社交接口而显式记为 N/A,并在松中紧三个遭遇点上跑出 9 组读数。