摘要
游戏里的兵种被近战攻击后通常会反击,每回合有反击次数上限;有些兵种带宝物后反击次数无限,Simulator 用 −1 表示“无限”。英雄攻击的子技能“混乱打击”会从目标当前反击库存里减 1。
实验 0067 的一局(种子 67421)在第 9 回合中止,Simulator 报单位技能流水核对不一致。追踪后发现:混乱打击把麒麟的 −1 算成了 max(0, −1 − 1) = 0;但之后麒麟只要有状态被替换(被加速、被攻击等),代码又因为“容量无限”把它重置回 −1。同一局里麒麟的剩余反击在 0 和 −1 之间来回切换了 6 次。本实验在新规则版本 Core451 中让无限反击被减时保持无限。
要回答的问题
“从无限反击库存中减一次”应该得到什么?两条减反击的路径为什么给出不同结果?
依据
- Simulator 已有约定(深渊触须的减反击):0 仍为 0,−1 无限仍为 −1,因为从无限资源中减一次不会使它变成有限。
- 混乱打击的说明是“从目标当前反击库存中减 1,不改每回合上限”,没有对无限库存另作规定。
- 两条路径对同一种操作给出不同结果,而且旧结果本身前后不一致(随状态替换随机恢复)。
- 证据类别:仅 Simulator 内部约定一致性,没有原生代码或实测证据。
方法(事前冻结)
- 新规则 Core451:英雄攻击减反击时,若剩余反击为负(无限),保持不变;英雄攻击的数据格式升一版。
- 旧版本 Core450 及更早存档的读取器保留旧行为,规则与目录哈希不变。
- 不改其他规则。
结果
- 新增 5 项测试:Core451 下保持 −1,Core450 读取器下仍为 0,有限库存在两个版本下都照常减 1;两个版本的规则清单只在英雄攻击格式一项不同。
- 30 局已保存的 Core450 天梯对局用 Core450 读取器回放,结果完全一致。
- 种子 67421 在 Core451 下完整跑完。
- 全量:Simulator 14884 通过 / 2 跳过;game_ai 7089 通过 / 2 跳过 / 1 个原有预期失败(在实验 0349 那批改动之前)。
局限
这是“内部一致性”修正:真实游戏里无限反击被混乱打击后会怎样,没有原生审计或实战画面证明。若以后有实测证据,需要重新评估。
结论
Core451 统一了两条减反击路径的语义,消除了这次随机中止的根因;旧存档回放不受影响。
Comments