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