9.2 自走棋的经济与平衡
把自走棋的三个花钱方向——存钱吃利息、刷新换棋子、升级扩容量——都写成整数模型,在 32 个种子上实测:利息是 min(金币整除台阶, 上限),刷新不亏利息的阈值是 12 金;实跑给出一条可算判据(升级换的是新位、刷新只换最弱)和两个平衡破坏点。
tag
把自走棋的三个花钱方向——存钱吃利息、刷新换棋子、升级扩容量——都写成整数模型,在 32 个种子上实测:利息是 min(金币整除台阶, 上限),刷新不亏利息的阈值是 12 金;实跑给出一条可算判据(升级换的是新位、刷新只换最弱)和两个平衡破坏点。
把 16.1 检查表里最硬的一条展开成全链路回放:从 config/play_spec.json 出发,在 S 层 Python、P 层 TypeScript、W 层浏览器与第 13 章六个品类变体上各取一次 digest,证明逐字相同;再给出 B 层稳健性证明——只改一个规则参数 energyMax,链上三处宿主同步改变且仍逐字一致。附四个节点的 digest 对照表与六个变体的结果摘要。
练满之后还拦得住玩家吗?本节把天花板定义为熟练度全 1000 时的胜率、地板定义为全 0 时的胜率,用留一法算出每个技巧维度的边际增益,在难度网格上找出瓶颈归属、被证伪的维度、以及会变号的维度;B 层换四组种子池看瓶颈标签稳不稳、冠亚军差距会不会被摆动淹没。全程只用代理指标做相对比较,不绝对化。
把「游戏被解开的点」定义成序参量(胜率)跌破 500‰ 的参数值:先粗扫定位跨越区间,再二分细化到 ±1,最后在临界点邻域逐点细扫算出临界宽度。本节给出可跑的 S 层相变扫描脚本、实测临界点、临界宽度与总耗时,并解释临界点为什么恰好落在固定策略的伤害预算边界上。
规格合法不合法,要能给出具体理由。本节把校验拆成两级:模式校验查必填字段、类型与取值域,语义校验查引用完整性(strategy 的 p<i> 索引必须可达、卡池非空、turnLimit>0、energyMax>=0)。附可跑的 validate.ts 与六个负例,每个都必须被判为不合法,七条断言全绿。
同一份源码换宿主,语言原语的差异在三处咬人:Python 的 int 任意精度,JS 的 number 只到 2^53-1;幂与增长量必须走 BigInt;字符串的码点数、UTF-16 码元数、UTF-8 字节数是三个数。本节实测这些边界,并划清哪些量必须逐位一致、哪些只能按声明容差断言。
机制层增量要判的不是字段齐不齐,而是旧回放还算不算数。本节用三条可判定判据——digest 是否逐字一致、四条不变量是否保持、旧回放是否仍胜——把七条候选增量判成兼容 / 可迁移 / 破坏三档,再用接线判据揭穿「假兼容」:字段加了却没被消费,digest 不变只证明什么都没加。
组合爆炸要靠上界、剪枝与降级判据三条一起管:k 个旋钮各 m 档的全空间是 m^k,先按 12.1 的死旋钮剪掉指数,再设枚举预算,超出即降级为可播种采样。本节给出闭式与实测耗时,并用 B 层软告警量化降级采样把整体难度的估计带偏了多少,以及采样的可信边界在哪。
协同与反协同是可判定的:定义交互项 I = 两机制同时变化的效果 − 各自单独变化的效果之和,先按观测量的好坏方向定向,再归一化成千分比。本节给出整数判据、实跑出的两处协同与两处反协同,并说明为什么「定向」这一步不能省——少了它,反协同会被符号读成协同。
把「机制耦合」写成一个可算的整数:在一个工作点上对每个参数做单参数扰动,看其它量的整数差,落成 7×5 的耦合矩阵与热力格。本节解释为什么 dealt 列恒零、为什么 rewardGold 与 punishHp 是死旋钮,以及为什么耦合是工作点的函数,而不是机制的内禀属性。
增长与衰减曲线在整数域上必须闭式与递推逐项一致,否则同一份规格在不同宿主会跑出两条曲线。本节用有理数 115/100 与 90/100 各跑 11 项,证明保分子的递推与闭式逐项恒等,而逐步地板除的朴素递推会累积漂移:十级之后差 8,幂运算必须走 BigInt 才不丢位。
以状态、事件、计时器、UI、分数和关卡为主线,搭建可验证、可扩展的 Defold 游戏机制。