游戏规则观察:储物箱预约量与实际库存(练习08)
多个制作任务共享一个箱子时,尚未取走的材料也可能已经被预约。把实际库存、各任务预约和未预约余量分开,才能避免同一批材料被同时答应给两个任务。
以下是为了练习规则阅读而设计的独立场景。所有输入在这里完整列出,可以先自己记录结果,再对照后面的计算。它不声称对应某款现成游戏;如果实际说明中的边界或处理顺序不同,应以该说明重新演算。
条件与输入
本例只有一种材料,预约不搬走实物。领取自己预约的数量时,库存和该预约一起减少;取消只释放预约。任何请求不足都整次拒绝,不允许部分完成。
预约只能占未预约余量;取或退只能针对自己的预约。取减少实物,退不改变实物。
初始库存31,两任务预约均为零 约表示预约、取表示领取自己的预约、退表示取消预约 操作[['约', '甲', 32], ['约', '甲', 8], ['约', '乙', 8], ['取', '甲', 2], ['退', '乙', 2], ['约', '甲', 13], ['退', '乙', 8], ['取', '乙', 1], ['取', '乙', 1], ['退', '甲', 4], ['约', '甲', 11], ['约', '乙', 9], ['取', '乙', 3]]
逐项复盘
任务甲约32件:整次拒绝;实存31,预约甲0乙0,可用31。
任务甲约8件:通过;实存31,预约甲8乙0,可用23。
任务乙约8件:通过;实存31,预约甲8乙8,可用15。
任务甲取2件:通过;实存29,预约甲6乙8,可用15。
任务乙退2件:通过;实存29,预约甲6乙6,可用17。
任务甲约13件:通过;实存29,预约甲19乙6,可用4。
任务乙退8件:整次拒绝;实存29,预约甲19乙6,可用4。
任务乙取1件:通过;实存28,预约甲19乙5,可用4。
任务乙取1件:通过;实存27,预约甲19乙4,可用4。
任务甲退4件:通过;实存27,预约甲15乙4,可用8。
任务甲约11件:整次拒绝;实存27,预约甲15乙4,可用8。
任务乙约9件:整次拒绝;实存27,预约甲15乙4,可用8。
任务乙取3件:通过;实存24,预约甲15乙1,可用8。
最终库存24,预约{'甲': 15, '乙': 1},可用8。
如何自行核对
始终检查库存等于全部预约加可用量。预约和取消不改变实物总数,只有实际领取会减少库存。若取消之后库存增加,便是把释放额度错误地当成新增材料。
若任务会自动超时,应把超时记成一条明确的取消事件。否则表面看起来还有很多库存,实际却一直被已经结束的任务占住。
练习时保留原输入,只改一处条件,再观察哪些结果发生变化。若结果与预期不同,先查编号起点、边界是否包含以及前一步留下的状态。这样的记录能把“感觉不对”变成可复现的问题,也更方便向同伴说明自己的判断依据。
