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