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