两个练习机器人在同一拍都提交了动作,先后处理和同时结算可能产生不同结果。关键是动作资格检查依据拍开始的能量,还是前一个动作已经修改过的能量。
本篇使用一组可以手算或逐行复查的虚构游戏记录。先读清操作顺序与边界,再看完整过程;它不是某一款现有游戏的隐藏公式,也不要求读者安装工具。
规则与输入
每组双方初始能量为正整数,各自动作扣减对方给定数值,最低为零。同时模式按开始时双方都能行动处理;依次模式固定甲先行动,乙只有在甲行动后仍有能量时才能行动。只模拟一拍,没有护盾、回复或随机性。
[甲初值,乙初值,甲扣减值,乙扣减值]:[[6, 10, 17, 8], [12, 13, 17, 5], [4, 4, 15, 12], [14, 6, 6, 6], [12, 11, 3, 17], [16, 10, 7, 4], [10, 9, 3, 9], [15, 8, 6, 3], [7, 8, 7, 14], [11, 8, 7, 17], [13, 14, 15, 9], [7, 8, 18, 11]]
逐步计算与结果
初始甲乙能量6、10,甲动作扣17、乙扣8。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[6, 0]。两列都按甲、乙顺序记录。
初始甲乙能量12、13,甲动作扣17、乙扣5。同时结算剩余[7, 0];甲先结算后乙不能行动,依次模式剩余[12, 0]。两列都按甲、乙顺序记录。
初始甲乙能量4、4,甲动作扣15、乙扣12。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[4, 0]。两列都按甲、乙顺序记录。
初始甲乙能量14、6,甲动作扣6、乙扣6。同时结算剩余[8, 0];甲先结算后乙不能行动,依次模式剩余[14, 0]。两列都按甲、乙顺序记录。
初始甲乙能量12、11,甲动作扣3、乙扣17。同时结算剩余[0, 8];甲先结算后乙仍可行动,依次模式剩余[0, 8]。两列都按甲、乙顺序记录。
初始甲乙能量16、10,甲动作扣7、乙扣4。同时结算剩余[12, 3];甲先结算后乙仍可行动,依次模式剩余[12, 3]。两列都按甲、乙顺序记录。
初始甲乙能量10、9,甲动作扣3、乙扣9。同时结算剩余[1, 6];甲先结算后乙仍可行动,依次模式剩余[1, 6]。两列都按甲、乙顺序记录。
初始甲乙能量15、8,甲动作扣6、乙扣3。同时结算剩余[12, 2];甲先结算后乙仍可行动,依次模式剩余[12, 2]。两列都按甲、乙顺序记录。
初始甲乙能量7、8,甲动作扣7、乙扣14。同时结算剩余[0, 1];甲先结算后乙仍可行动,依次模式剩余[0, 1]。两列都按甲、乙顺序记录。
初始甲乙能量11、8,甲动作扣7、乙扣17。同时结算剩余[0, 1];甲先结算后乙仍可行动,依次模式剩余[0, 1]。两列都按甲、乙顺序记录。
初始甲乙能量13、14,甲动作扣15、乙扣9。同时结算剩余[4, 0];甲先结算后乙不能行动,依次模式剩余[13, 0]。两列都按甲、乙顺序记录。
初始甲乙能量7、8,甲动作扣18、乙扣11。同时结算剩余[0, 0];甲先结算后乙不能行动,依次模式剩余[7, 0]。两列都按甲、乙顺序记录。
十二组中有6组结果不同;差异来自行动资格检查的时点。
怎样独立复核
同时模式分别用对方提交值扣减两边初始能量。依次模式先判断乙剩余量,再决定甲是否受到乙动作影响。比较结果时要注明模式,不能把运行顺序导致的差异误当作扣减算术错误。
这是非写实的游戏数值练习,不涉及现实伤害。双方同归零是同时模式允许的结果,依次模式未必出现。哪种方式更适合游戏取决于规则设计;把循环顺序换一下并不是没有影响的小改动。
练习时可以只改变一个输入,再预测哪一步会最先改变。保留中间记录,检查空状态、相等数值和刚好落在边界的情况。最终结果碰巧相同,并不能证明两个过程等价;反过来,采用不同规则得出不同结果,也不应立即视作程序故障。
