本篇用一份独立的虚构游戏记录练习存档恢复与分支状态。先按规则预测最后状态,再逐行对照运算,可以找出差异究竟来自输入、边界条件,还是结算先后。下面所有数值都只服务于这一道练习。
初始物品甲8个、乙4个,存档槽为空。增加立即改变当前数量;存档复制当前两项并覆盖旧存档;读档恢复两项,空槽读档不改变状态。
操作:存档;增加甲7;增加乙6;读档;增加乙5;存档;增加甲3;读档
恢复存档会回到保存那一刻记录的状态,而不是把之前所有操作继续相加。复盘时应明确哪些信息属于当前状态,哪些只是已经发生过的操作历史。
本题只有一个可覆盖的存档槽,存档同时记录两个物品的数量。读取存档只恢复当前数量,不会再次修改存档内容;没有存档时读取是无操作。
第1步存档:用当前两项数量覆盖存档槽;当前甲8、乙4,存档为甲8、乙4。
第2步增加:给物品甲增加7;当前甲15、乙4,存档为甲8、乙4。
第3步增加:给物品乙增加6;当前甲15、乙10,存档为甲8、乙4。
第4步读档:恢复存档中两项数量;当前甲8、乙4,存档为甲8、乙4。
第5步增加:给物品乙增加5;当前甲8、乙9,存档为甲8、乙4。
第6步存档:用当前两项数量覆盖存档槽;当前甲8、乙9,存档为甲8、乙9。
第7步增加:给物品甲增加3;当前甲11、乙9,存档为甲8、乙9。
第8步读档:恢复存档中两项数量;当前甲8、乙9,存档为甲8、乙9。
最终当前状态为甲8、乙9,存档里是甲8、乙9。
读档前已经执行过的增加仍然出现在操作历史中,但不会自动叠加到恢复后的状态。若把整条历史里的增加全部相加,就会把已被读档回退的分支也混入最终结果。
自己复核时,可以把纸分成“操作前状态、这一条输入、操作后状态”三栏。先遮住解答完成一遍,再只查找第一次出现分歧的位置;后面的错误往往只是前一步状态传递的结果。确认规则没有改变后,再重新继续,避免只改最终答案却保留中间错误。
第二轮练习只改一条输入,提前写下你预计哪些后续步骤会变化,再重新演算验证。不要同时更改多个条件,否则很难分清是哪条规则造成差别。若实际游戏还涉及随机结果、其他角色、装备或额外判定,应先把这些条件补入记录,本例不会替它们作假设。