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