<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>《游戏设计》卷一《玩法机制与可执行规格》· 全书目录与章节索引（50 篇） on PlumePHP</title><link>https://plumephp.com/posts/books/%E7%8E%A9%E6%B3%95%E6%9C%BA%E5%88%B6%E4%B8%8E%E5%8F%AF%E6%89%A7%E8%A1%8C%E8%A7%84%E6%A0%BC/</link><description>Recent content in 《游戏设计》卷一《玩法机制与可执行规格》· 全书目录与章节索引（50 篇） on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 17 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://plumephp.com/posts/books/%E7%8E%A9%E6%B3%95%E6%9C%BA%E5%88%B6%E4%B8%8E%E5%8F%AF%E6%89%A7%E8%A1%8C%E8%A7%84%E6%A0%BC/index.xml" rel="self" type="application/rss+xml"/><item><title>8.3 节奏与惩罚的度量</title><link>https://plumephp.com/gd-mech-08-3-rhythm-punishment-metric/</link><pubDate>Wed, 14 Oct 2026 10:40:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-08-3-rhythm-punishment-metric/</guid><description>奖励给多少、惩罚忍多久，只有放进同一根轴才能比。本节把金币密度、挫败密度、净节奏、兑换率四个千分比算出来：奖励期每动作 1170‰ 金币、惩罚期每动作 1010‰ 挫败，全程净节奏 -232‰。再扫一张 5×4 参数基准表，越界场次从 15 提前到 4，两条软告警标出「预算形同虚设」与「节奏对难度过敏」。</description></item><item><title>8.2 惩罚机制与挫败预算</title><link>https://plumephp.com/gd-mech-08-2-punishment-frustration-budget/</link><pubDate>Wed, 14 Oct 2026 10:20:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-08-2-punishment-frustration-budget/</guid><description>惩罚有两条独立通道：远征血量（每负一场扣 params.punishHp）与挫败预算（失败扣分 + 被拒指令扣分，累计 ≥ 100 即越界）。实测第 9 场累计挫败 137 越界，此时远征血量还剩 52——血量阈值要 15 次失败才耗尽，远慢于玩家的耐心。把「还能忍多久」写成一个整数阈值，并给出闭区间上界的越界判据。</description></item><item><title>《游戏设计》卷一《玩法机制与可执行规格》目录</title><link>https://plumephp.com/gd-mech-toc/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-toc/</guid><description>《游戏设计》卷一《玩法机制与可执行规格》目录：16 章 48 节，把玩法设计文档写成可执行规格 play_spec.json，让同一份规格被 S 层仿真、P 层确定性内核、W 层可玩原型与 B 层相变扫描四处消费，产出逐字一致的摘要。本页给出七处分工说明、六档可运行性口径、《灰烬牌库》机制总览与全书 16 章 48 节完整清单。</description></item><item><title>1.1 机制的最小构成：动词、规则、状态</title><link>https://plumephp.com/gd-mech-01-1-mechanism-minimal-anatomy/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-01-1-mechanism-minimal-anatomy/</guid><description>机制不是一段文字描述，而是三张能逐字段核对的小表：动词（玩家能做什么）、规则（动词受什么约束、状态怎么变）、状态（规则作用在什么上）。本节用《灰烬牌库》的 play_spec.json 把三张表从规格里解析出来——2 个动词、6 个动作符号、13 条规则、12 个状态分量，并查出 0 个孤儿分量与 2 个没人消费的参数。</description></item><item><title>1.2 资源与目标</title><link>https://plumephp.com/gd-mech-01-2-resources-and-goals/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-01-2-resources-and-goals/</guid><description>上一节的三张表里，状态分量按「会不会被花掉」再分一次，就得到四种资源：能量、手牌、生命、格挡；而目标就是这四种资源的期末余额。本节给一张每回合的收入-支出表，用《灰烬牌库》跑一局账：能量入 12 出 10 余 2、格挡产 10 只吸收 6、伤害 50 有 5 点被溢出截断，账本末态与引擎摘要逐字对拍一致。</description></item><item><title>1.3 反馈：机制与玩家的接口</title><link>https://plumephp.com/gd-mech-01-3-feedback-mechanic-player-interface/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-01-3-feedback-mechanic-player-interface/</guid><description>机制每回合产生十几次状态变化，玩家只看见其中一部分——「哪些分量被呈现」这份名单，就是机制与玩家的接口。本节把《灰烬牌库》的状态按呈现与否分成 8/12 两堆，从轨迹里抽出 17 条反馈事件与逐回合的净位移/总位移：最强回合 29、最弱回合只有 6，还有 4 条指令的反馈是「什么都没发生」。</description></item><item><title>10.1 状态的可达性</title><link>https://plumephp.com/gd-mech-10-1-state-reachability/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-10-1-state-reachability/</guid><description>状态空间不是「所有可能的状态」，而是「从开局真的能走到的状态」。本节用广度优先展开动作序列的前缀树、以 digest 去重，把《灰烬牌库》12 步内的可达集真的枚举出来：7637 个状态，只占粗粒度上界的十亿分之 250；再拿 8 类「永远不该出现」的状态去扫，命中数全为 0。</description></item><item><title>10.2 不变量清单</title><link>https://plumephp.com/gd-mech-10-2-invariant-checklist/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-10-2-invariant-checklist/</guid><description>第 1、3、4 章各散落着一部分不变量：资源边界、守恒、状态封闭。本节把它们收成一张 8 条的可执行清单，逐条给出整数判据与一个故意造违反的负例。清单在真实轨迹的 26 个状态上全 true，8 条负例全被判 false——把「机制自洽」从零散断言变成可回归的验收面。</description></item><item><title>10.3 死锁与可解性检测</title><link>https://plumephp.com/gd-mech-10-3-deadlock-solvability-detection/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-10-3-deadlock-solvability-detection/</guid><description>「卡住」有四种形态：无合法动作的死锁、有动作却不改变状态的停滞、资源不可达目标的不可解、以及撞上上限的截断。本节把 4.3 的搜索器包成一张判据表，用四个夹具各命中一类，并钉死结论的可靠性边界——solvable=true 有证据恒可靠，false 只在 exhausted=true 时才是证明。</description></item><item><title>11.1 整数化与跨语言一致</title><link>https://plumephp.com/gd-mech-11-1-integerization-cross-language-consistency/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-11-1-integerization-cross-language-consistency/</guid><description>浮点让同一份规格在两个宿主上算出不同的末位，跨语言一致就无从谈起。本节给出三条跨语言纪律——预算与阈值一律整数、随机一律自实现可播种 PRNG、config 禁浮点——并把暴击判定、倍率、千分比、向上取整、整数幂逐条改写成整数写法，用一张对照表列出两语言的同一结果。</description></item><item><title>11.2 增长与衰减的闭式与递推</title><link>https://plumephp.com/gd-mech-11-2-growth-decay-closed-form-recursion/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-11-2-growth-decay-closed-form-recursion/</guid><description>增长与衰减曲线在整数域上必须闭式与递推逐项一致，否则同一份规格在不同宿主会跑出两条曲线。本节用有理数 115/100 与 90/100 各跑 11 项，证明保分子的递推与闭式逐项恒等，而逐步地板除的朴素递推会累积漂移：十级之后差 8，幂运算必须走 BigInt 才不丢位。</description></item><item><title>11.3 数值的可复现</title><link>https://plumephp.com/gd-mech-11-3-numeric-reproducibility/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-11-3-numeric-reproducibility/</guid><description>可复现分两层。机制层的 digest 是纯整数与布尔的规范化 JSON，跨语言必须逐字相等；表现层的像素位移由宿主浮点算出，浮点加法不满足结合律，换个求和顺序末位就变，只能按声明容差断言。本节给出两侧逐字相同的 digest 字符串，并演示为什么禁写「逐位相等」。</description></item><item><title>12.1 机制之间的耦合</title><link>https://plumephp.com/gd-mech-12-1-mechanic-coupling/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-12-1-mechanic-coupling/</guid><description>把「机制耦合」写成一个可算的整数：在一个工作点上对每个参数做单参数扰动，看其它量的整数差，落成 7×5 的耦合矩阵与热力格。本节解释为什么 dealt 列恒零、为什么 rewardGold 与 punishHp 是死旋钮，以及为什么耦合是工作点的函数，而不是机制的内禀属性。</description></item><item><title>12.2 协同与反协同</title><link>https://plumephp.com/gd-mech-12-2-synergy-antisynergy/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-12-2-synergy-antisynergy/</guid><description>协同与反协同是可判定的：定义交互项 I = 两机制同时变化的效果 − 各自单独变化的效果之和，先按观测量的好坏方向定向，再归一化成千分比。本节给出整数判据、实跑出的两处协同与两处反协同，并说明为什么「定向」这一步不能省——少了它，反协同会被符号读成协同。</description></item><item><title>12.3 组合爆炸的控制</title><link>https://plumephp.com/gd-mech-12-3-combination-explosion-control/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-12-3-combination-explosion-control/</guid><description>组合爆炸要靠上界、剪枝与降级判据三条一起管：k 个旋钮各 m 档的全空间是 m^k，先按 12.1 的死旋钮剪掉指数，再设枚举预算，超出即降级为可播种采样。本节给出闭式与实测耗时，并用 B 层软告警量化降级采样把整体难度的估计带偏了多少，以及采样的可信边界在哪。</description></item><item><title>13.1 机制增量与兼容</title><link>https://plumephp.com/gd-mech-13-1-mechanic-increment-compatibility/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-13-1-mechanic-increment-compatibility/</guid><description>机制层增量要判的不是字段齐不齐，而是旧回放还算不算数。本节用三条可判定判据——digest 是否逐字一致、四条不变量是否保持、旧回放是否仍胜——把七条候选增量判成兼容 / 可迁移 / 破坏三档，再用接线判据揭穿「假兼容」：字段加了却没被消费，digest 不变只证明什么都没加。</description></item><item><title>13.2 赛季与 DLC 的机制设计</title><link>https://plumephp.com/gd-mech-13-2-season-dlc-mechanic-design/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-13-2-season-dlc-mechanic-design/</guid><description>赛季与 DLC 的差别不在体量，而在叠加层动什么：赛季只覆盖 params（可逆），DLC 追加卡牌实体（不可逆）。本节把五个叠加层压在整条难度阶梯上跑，给出整数差与千分比，并检查相变带有没有被移动、不变量有没有被破坏、哪个叠加层是纯增益膨胀。</description></item><item><title>13.3 机制的退场</title><link>https://plumephp.com/gd-mech-13-3-mechanic-retirement/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-13-3-mechanic-retirement/</guid><description>删一个机制之前得先证明它真的没人在用。本节把「退场」写成两级探针加消费层绑定的可判定判据：全域无反应才是死参数，近探针无反应而全域有反应是休眠，同一参数在机制底座里判死、在远征层里却仍然判为活。附六步退场清单、不变量恒真检查与删完后的回归验法。</description></item><item><title>14.1 机制到体验的映射</title><link>https://plumephp.com/gd-mech-14-1-mechanic-to-experience-mapping/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-14-1-mechanic-to-experience-mapping/</guid><description>「体验目标」不能直接测量，只能落到机制参数上变成可观测的约束。本节给出映射四元组（体验目标 → 机制参数 → 观测列 → 期望方向 sign），并让同一张表在两个工作点各跑一遍：胜局工作点上 12 条映射有 6 条方向成立，换到败局工作点变成 0 条成立、2 条方向反转——映射的有效性以工作点为条件。</description></item><item><title>14.2 可观测的体验指标</title><link>https://plumephp.com/gd-mech-14-2-observable-experience-metric/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-14-2-observable-experience-metric/</guid><description>把体验写成四个全部可算的代理指标：回合数、每回合有效动作率、资源闲置率、决策点密度，全是整数或千分比，落 CSV 并用纯 xml.etree 画图。16 个种子上实测闲置率均值 204‰、决策点密度 585‰、每回合动作 2150‰。它们都是代理指标，只用于相对比较，禁绝对化。</description></item><item><title>14.3 从机制到体验的断言</title><link>https://plumephp.com/gd-mech-14-3-mechanic-experience-assertion/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-14-3-mechanic-experience-assertion/</guid><description>把体验约束写成能失败的断言：闲置率 ≤ 300‰、决策点密度 ≥ 400‰、每回合动作 ≥ 1500‰、回合数落在 [3,8]。设计工作点四条全过，三个故意违反的负例各自让目标断言 fail；B 层软告警指出断言有效域在 enemyHp 75→80 之间断裂。这些断言是代理性的，不保证与真实玩家感受一致。</description></item><item><title>15.1 跨语言摘要与 digest</title><link>https://plumephp.com/gd-mech-15-1-cross-language-digest/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-15-1-cross-language-digest/</guid><description>摘要不是打印用的，它是「三处消费」的契约：ashlib.digest 与 digestSnap 必须逐字相同。本节写出完整的 172 字符 digest 字符串，逐条说明键序、整数、无浮点三者缺一不可，并给出终态、前缀、换 seed 三个场景在 Python、Node、浏览器三处的对照表。</description></item><item><title>15.2 同源不同宿主</title><link>https://plumephp.com/gd-mech-15-2-same-origin-different-host/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-15-2-same-origin-different-host/</guid><description>同一份源码换宿主，语言原语的差异在三处咬人：Python 的 int 任意精度，JS 的 number 只到 2^53-1；幂与增长量必须走 BigInt；字符串的码点数、UTF-16 码元数、UTF-8 字节数是三个数。本节实测这些边界，并划清哪些量必须逐位一致、哪些只能按声明容差断言。</description></item><item><title>15.3 偏差与容差</title><link>https://plumephp.com/gd-mech-15-3-deviation-tolerance/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-15-3-deviation-tolerance/</guid><description>容差不是随口写的数字，是可执行判据 |left − right| ≤ tol。本节给出三档容差：整数精确（tol=0，必须相等）、千分比（tol=1‰，地板与四舍五入两种口径最多差 1）、浮点表现层（tol=1e-6，且必须显式断言 left !== right）。</description></item><item><title>16.1 规格装配检查表</title><link>https://plumephp.com/gd-mech-16-1-spec-assembly-checklist/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-16-1-spec-assembly-checklist/</guid><description>把全书散落的检查项汇成一张可执行的装配检查表：规格字段完整性、模式与语义校验、不变量清单、确定性、三处 digest 一致、B 层扰动可跑、整数与跨语言口径、W 产物自足。每项给一条真命令与一条通过判据，用一个脚本逐项真跑落盘——这是卷一交付前的最后一道闸门。</description></item><item><title>16.2 四处消费的联调</title><link>https://plumephp.com/gd-mech-16-2-four-consumption-integration/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-16-2-four-consumption-integration/</guid><description>把 S / P / W / B 四处真的跑一遍：Python 仿真、TS 内核 node --test、浏览器 Playwright 真玩、B 层参数扰动，四处产出同一条 172 字符的摘要，再改一个规则参数（energyMax 3→2）看四处是否同步改变。这是「一份规格，四处消费」主张的可验证形态。</description></item><item><title>16.3 交付卷二</title><link>https://plumephp.com/gd-mech-16-3-deliverable-handoff-volume2/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-16-3-deliverable-handoff-volume2/</guid><description>卷一的交付物不是一份文档，而是一组冻结的接口：规格版本、digest 键清单、PRNG 常数、params 键集合、基线 digest、四处消费入口。用一个脚本逐条核对它们是否被冻住，并说明卷二《策略、涌现与体验度量》接住什么——策略空间、支配策略、涌现与体验度量。</description></item><item><title>2.1 play_spec.json 的字段</title><link>https://plumephp.com/gd-mech-02-1-play-spec-fields/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-02-1-play-spec-fields/</guid><description>本章把《灰烬牌库》的玩法收敛成一份 play_spec.json：12 个必填字段位、8 个难度参数、4 张卡的卡池、3 条目标与 4 条不变量。本节逐字段给出类型、取值域与作用，附完整 JSON 与一个只读断言测试——卡池总数必须等于 12，params 必须全为整数，跑通七条断言全绿。</description></item><item><title>2.2 模式校验与语义校验</title><link>https://plumephp.com/gd-mech-02-2-schema-and-semantic-validation/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-02-2-schema-and-semantic-validation/</guid><description>规格合法不合法，要能给出具体理由。本节把校验拆成两级：模式校验查必填字段、类型与取值域，语义校验查引用完整性（strategy 的 p&lt;i&gt; 索引必须可达、卡池非空、turnLimit&gt;0、energyMax&gt;=0）。附可跑的 validate.ts 与六个负例，每个都必须被判为不合法，七条断言全绿。</description></item><item><title>2.3 规格的版本与迁移</title><link>https://plumephp.com/gd-mech-02-3-spec-version-migration/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-02-3-spec-version-migration/</guid><description>规格会随设计长出新字段，旧规格必须还能被新校验器接受。本节设计 v1→v2 的迁移：v2 只新增 params.critRate（默认 0），迁移写成纯函数，幂等且不动既有字段。迁移前后 runSpec 的 digest 逐字相同，语义等价因此是可断言的事实，六条断言全绿。</description></item><item><title>3.1 从规格到轨迹</title><link>https://plumephp.com/gd-mech-03-1-spec-to-trajectory/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-03-1-spec-to-trajectory/</guid><description>快照只留终态，轨迹留每一步的状态序列。本节把 run_spec 的规则拆成「一步」，逐步重放策略并记录每步的能量、双方血量、格挡与累计伤害，导出 out/mech03_trajectory.csv。基线策略实际执行 12 步，未执行的 13 个指令不计入轨迹长度，且轨迹末态与快照逐位一致。</description></item><item><title>3.2 资源守恒与不变量检验</title><link>https://plumephp.com/gd-mech-03-2-resource-conservation-invariant/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-03-2-resource-conservation-invariant/</guid><description>机制自己得先自洽，才谈得上好玩。本节对同一份规格在 8 组显式种子上跑同一策略，逐局检验四条不变量：牌数守恒、伤害守恒、能量范围、格挡非负，输出误差表且全部为 0；四条判据都是整数，合格标准是误差恰好为 0 而不是约等于。再给一个「出牌忘进弃牌堆」的人为负例，证明检验器真的会报错。</description></item><item><title>3.3 仿真输出的可读化</title><link>https://plumephp.com/gd-mech-03-3-simulation-output-readable/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-03-3-simulation-output-readable/</guid><description>误差表是给机器看的，血线图是给眼睛看的。本节用纯 xml.etree 画一张多局面血线对比图 out/mech03_hp.svg，每行一种子、每回合一根条，画出敌方 HP 从 50 掉到 0 的过程；再回读该 SVG 断言矩形数量与 data-value 逐个正确，并踩一次 xmlns 命名空间的坑。</description></item><item><title>4.1 规格驱动的状态机</title><link>https://plumephp.com/gd-mech-04-1-spec-driven-state-machine/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-04-1-spec-driven-state-machine/</guid><description>状态机不是「带 if-else 的循环」，而是三件东西：一个状态集合、一个转移函数、一条输入序列。《灰烬牌库》的 runSpec 把三者写成不到 60 行的纯函数，本节用 9 条断言把它钉死——同 seed 同输入 200 次回放 digest 全同、换输入 digest 必变、换 seed digest 必变，最后扫一遍内核源码证明它既不读时钟也不读随机源。</description></item><item><title>4.2 不变量断言：守恒、不可达、单调</title><link>https://plumephp.com/gd-mech-04-2-invariant-assertions/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-04-2-invariant-assertions/</guid><description>不变量就是「永远不该出现的状态」。本节把《灰烬牌库》的不变量分成三类：守恒（牌数恒 12、伤害恒等于已扣敌方血量）、不可达（非法动作与欠费动作执行后状态逐字不变）、单调（enemyHp 与 playerHp 逐步不增）。关键手法是逐步查而非只看终态，并且每一类都配一个负例断言为 false。</description></item><item><title>4.3 无死锁与可解性</title><link>https://plumephp.com/gd-mech-04-3-deadlock-solvability/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-04-3-deadlock-solvability/</guid><description>死锁是「未结束却无事可做」，不可解是「怎么打都赢不了」，两者都不是崩溃，因而不会被异常捕获，只能靠搜索证明。本节给《灰烬牌库》写一个带三重上限的广度优先穷举器：基线 spec 8 步可解、不可解夹具穷尽前沿后判不可解，并区分「有取胜序列作证据」与「前沿穷尽才是证明」这两种可靠性等级。</description></item><item><title>5.1 规格内联进单文件 HTML</title><link>https://plumephp.com/gd-mech-05-1-spec-inline-single-file-html/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-05-1-spec-inline-single-file-html/</guid><description>用 web/pack.mjs 的 bundle() 把 core/src/ashdeck/ 内核按手工拓扑序擦类型，再与 play_spec.json 一起内联进一个 9448 字节的 HTML：无 CDN、无 import、离线双击可跑。页面画敌方血条、我方血条与手牌，并暴露 globalThis.__ashdeck 的 run/snapshot 接口，附构建脚本与实跑输出。</description></item><item><title>5.2 Playwright 真玩：注入策略、断言状态</title><link>https://plumephp.com/gd-mech-05-2-playwright-inject-strategy-assert/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-05-2-playwright-inject-strategy-assert/</guid><description>用 web/verify_mech05.mjs 做无头真玩：注入 25 步整段策略序列，断言页面 digest 与 Node 侧 digestSnap(runSpec(spec)) 逐字相同，再换一段截断序列证明注入真被消费。含预热页的必要性、canvas 已绘制断言、两遍确定性、48443 字节截图与完整实跑输出。</description></item><item><title>5.3 原型与内核的同源性</title><link>https://plumephp.com/gd-mech-05-3-prototype-kernel-same-origin/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-05-3-prototype-kernel-same-origin/</guid><description>浏览器与 Node 跑的不是两份对齐的实现，而是 web/pack.mjs 的 bundle() 把同一个 combat.ts 擦类型后内联的同一段源码，所以结果必须逐字相同。给出 Node / 浏览器 / Python 三方 digest 对照、产物级同源与自足检查（内核标记在、外部引用为 0），并说清 Python 侧是移植而非同源。</description></item><item><title>6.1 参数敏感度</title><link>https://plumephp.com/gd-mech-06-1-parameter-sensitivity/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-06-1-parameter-sensitivity/</guid><description>固定 16 个显式整数种子，把 params.enemyHp 从 20 扫到 80、步长 5，逐格统计胜率千分比（1000×wins÷total，禁浮点）与平均剩余 HP：本节给出 B 层单参数敏感度的完整做法、可跑的 S 层脚本、CSV 与纯 xml.etree 折线图，并说明为什么「胜率全程 1000‰」不等于机制平衡。</description></item><item><title>6.2 相变扫描：游戏被解开的点</title><link>https://plumephp.com/gd-mech-06-2-phase-transition-scan-solved-point/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-06-2-phase-transition-scan-solved-point/</guid><description>把「游戏被解开的点」定义成序参量（胜率）跌破 500‰ 的参数值：先粗扫定位跨越区间，再二分细化到 ±1，最后在临界点邻域逐点细扫算出临界宽度。本节给出可跑的 S 层相变扫描脚本、实测临界点、临界宽度与总耗时，并解释临界点为什么恰好落在固定策略的伤害预算边界上。</description></item><item><title>6.3 稳健性与告警</title><link>https://plumephp.com/gd-mech-06-3-robustness-warning/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-06-3-robustness-warning/</guid><description>把临界点附近的胜率逐格分类成稳健步与脆弱步，输出软告警清单：本节给出可跑的 S 层告警脚本、临界点邻域的胜率表、out/mech06_warnings.json 的告警条目，以及一个 B 层基准——把分类阈值本身缩放 50%~200%，看脆弱区间会不会翻盘。</description></item><item><title>7.1 正反馈与负反馈</title><link>https://plumephp.com/gd-mech-07-1-positive-negative-feedback/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-07-1-positive-negative-feedback/</guid><description>反馈循环不是「赢了更强」这句形容词，而是一条整数递推：x_{t+1} = trunc(G·x_t/1000) + c。本节把回路增益 G 跑成三档——G=1100‰ 发散、G=1000‰ 临界线性、G=900‰ 收敛到不动点区间 [111,120]，产出逐回合实测增益、CSV 与纯 xml.etree 曲线，并说清为什么判据是参数 G 而不是观测到的比值。</description></item><item><title>7.2 反馈延迟与回路增益</title><link>https://plumephp.com/gd-mech-07-2-feedback-delay-loop-gain/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-07-2-feedback-delay-loop-gain/</guid><description>延迟不改增益，只把递推的读指针往后挪 d 回合：x_{t+1} = trunc(G·x_{t-d}/1000) + c。本机实跑同一份 G=900‰：d=0 单调逼近（方向反转 0 次、6 回合稳定），d=1/2/4 变成振荡逼近（反转 18/12/7 次、稳定要 10/16/21 回合）；发散档同理，延迟把爆发拆成阶梯。</description></item><item><title>7.3 循环的稳定性</title><link>https://plumephp.com/gd-mech-07-3-loop-stability/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-07-3-loop-stability/</guid><description>渐近稳定只由增益决定：G&lt;1000‰ 收敛、=1000‰ 临界、&gt;1000‰ 发散，与延迟无关。但游戏只有有限回合——本机按 play_spec 的 turnLimit=20 扫 (G, d) 平面：有限时域稳定域从 d=0 的 G≤950‰ 收缩到 d=4 的 G≤850‰，B 层再把设计点放进 ±10% 增益扰动网格，失稳只发软告警。</description></item><item><title>8.1 奖励节奏谱</title><link>https://plumephp.com/gd-mech-08-1-reward-rhythm-spectrum/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-08-1-reward-rhythm-spectrum/</guid><description>奖励节奏不是「多久给一次」的拍脑袋，而是一条可算的谱。一次 16 场远征里，每个胜场发 params.rewardGold 金币，节奏单位取玩家动作数而非回合数：实测前 8 场每 9–12 个动作换一次奖励、金币密度 1170‰，后 8 场 95 个动作零奖励。间隔序列、极差、逆序对把「节奏什么时候断」写成数字，同时闭合第 1 章的规格-实现漂移。</description></item><item><title>9.1 随机性的结构：均匀、加权、洗牌袋</title><link>https://plumephp.com/gd-mech-09-1-randomness-structure-uniform-weighted-bag/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-09-1-randomness-structure-uniform-weighted-bag/</guid><description>同一句「随机」在实现层是三种结构：均匀（可放回等概率）、加权（整数权重前缀和落点）、洗牌袋（打乱一副袋不放回抽）。本节对三者各抽 600 次，用整数与千分比量出重复率、最长连号与方差代理量——洗牌袋频次恰好每面 100 次、方差代理量为 0，均匀是 10020 千分比，加权偏斜到 186420。</description></item><item><title>9.2 方差与体验</title><link>https://plumephp.com/gd-mech-09-2-variance-and-experience/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-09-2-variance-and-experience/</guid><description>同一份机制在两种发牌结构下，体验能差多少？本节取「起手 5 张的总伤害」为体验代理量，对 200 组显式种子分别用洗牌袋（真实发牌）与可放回（假想）各算一次：洗牌袋极差 42、方差代理量 2505 千分比；可放回极差 64、方差代理量 3878。可放回把哑火局与爆开局的占比都抬高了一档。</description></item><item><title>9.3 可播种随机与确定性回放</title><link>https://plumephp.com/gd-mech-09-3-seeded-rng-deterministic-replay/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-09-3-seeded-rng-deterministic-replay/</guid><description>随机一旦可播种，整局就是一段确定性函数。本节把同一份规格在 Python（sim/ashlib.py）与 TypeScript（core/src/ashdeck/）两处各跑一遍，终态 digest 逐字相同；再换 seed 证明种子真的进了洗牌。P 层 10 条断言全绿，其中两条是负例，证明「回放真的依赖输入」不是一句空话。</description></item><item><title>附录 A 玩法规格字段表、机制公式与数据集索引</title><link>https://plumephp.com/gd-mech-appendix-a/</link><pubDate>Wed, 14 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/gd-mech-appendix-a/</guid><description>《游戏设计》卷一《玩法机制与可执行规格》附录：把全卷 16 章散落的玩法规格字段、机制整数公式、四条不变量与数据集汇成四张表，给出卷内文件命名约定与 S / P / W 三层完整复现命令，并附一段与工作区逐字节一致的跨语言摘要内核，作为「一份规格四处消费」的可验证落点。</description></item></channel></rss>