两个练习机器人在同一拍都提交了动作,先后处理和同时结算可能产生不同结果。关键是动作资格检查依据拍开始的能量,还是前一个动作已经修改过的能量。

本篇使用一组可以手算或逐行复查的虚构游戏记录。先读清操作顺序与边界,再看完整过程;它不是某一款现有游戏的隐藏公式,也不要求读者安装工具。

规则与输入

每组双方初始能量为正整数,各自动作扣减对方给定数值,最低为零。同时模式按开始时双方都能行动处理;依次模式固定甲先行动,乙只有在甲行动后仍有能量时才能行动。只模拟一拍,没有护盾、回复或随机性。

[甲初值,乙初值,甲扣减值,乙扣减值]:[[4, 8, 12, 11], [12, 12, 4, 5], [7, 3, 13, 4], [14, 7, 16, 13], [7, 10, 15, 16], [16, 13, 2, 15], [5, 16, 6, 16], [11, 3, 7, 9], [9, 15, 17, 9], [9, 6, 7, 10], [10, 16, 3, 15], [6, 11, 7, 13]]

逐步计算与结果

初始甲乙能量4、8,甲动作扣12、乙扣11。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[4, 0]。两列都按甲、乙顺序记录。

初始甲乙能量12、12,甲动作扣4、乙扣5。同时结算剩余[7, 8];甲先结算后乙仍可行动,依次模式剩余[7, 8]。两列都按甲、乙顺序记录。

初始甲乙能量7、3,甲动作扣13、乙扣4。同时结算剩余[3, 0];甲先结算后乙不能行动,依次模式剩余[7, 0]。两列都按甲、乙顺序记录。

初始甲乙能量14、7,甲动作扣16、乙扣13。同时结算剩余[1, 0];甲先结算后乙不能行动,依次模式剩余[14, 0]。两列都按甲、乙顺序记录。

初始甲乙能量7、10,甲动作扣15、乙扣16。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[7, 0]。两列都按甲、乙顺序记录。

初始甲乙能量16、13,甲动作扣2、乙扣15。同时结算剩余[1, 11];甲先结算后乙仍可行动,依次模式剩余[1, 11]。两列都按甲、乙顺序记录。

初始甲乙能量5、16,甲动作扣6、乙扣16。同时结算剩余[0, 10];甲先结算后乙仍可行动,依次模式剩余[0, 10]。两列都按甲、乙顺序记录。

初始甲乙能量11、3,甲动作扣7、乙扣9。同时结算剩余[2, 0];甲先结算后乙不能行动,依次模式剩余[11, 0]。两列都按甲、乙顺序记录。

初始甲乙能量9、15,甲动作扣17、乙扣9。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[9, 0]。两列都按甲、乙顺序记录。

初始甲乙能量9、6,甲动作扣7、乙扣10。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[9, 0]。两列都按甲、乙顺序记录。

初始甲乙能量10、16,甲动作扣3、乙扣15。同时结算剩余[0, 13];甲先结算后乙仍可行动,依次模式剩余[0, 13]。两列都按甲、乙顺序记录。

初始甲乙能量6、11,甲动作扣7、乙扣13。同时结算剩余[0, 4];甲先结算后乙仍可行动,依次模式剩余[0, 4]。两列都按甲、乙顺序记录。

十二组中有7组结果不同;差异来自行动资格检查的时点。

怎样独立复核

同时模式分别用对方提交值扣减两边初始能量。依次模式先判断乙剩余量,再决定甲是否受到乙动作影响。比较结果时要注明模式,不能把运行顺序导致的差异误当作扣减算术错误。

这是非写实的游戏数值练习,不涉及现实伤害。双方同归零是同时模式允许的结果,依次模式未必出现。哪种方式更适合游戏取决于规则设计;把循环顺序换一下并不是没有影响的小改动。

练习时可以只改变一个输入,再预测哪一步会最先改变。保留中间记录,检查空状态、相等数值和刚好落在边界的情况。最终结果碰巧相同,并不能证明两个过程等价;反过来,采用不同规则得出不同结果,也不应立即视作程序故障。