游戏机制练习簿:批量背包整理的整批通过与逐项通过——容量[14, 13]下的九项整理(案例26)

  • 2026-10-27
  • 1

一次整理请求包含多次移动时,后面的动作可能依赖前面的结果。如果中途空间或数量不足,是撤销整批还是保留已经成功的部分,会直接影响最终库存,必须先明确规则。

以下是一组输入完整的独立案例。先读清规则,再按时间或操作顺序记录中间状态;遇到与预期不同的结果时,检查首次出现差异的位置。案例使用明确限定的教学模型,不假定所有作品都采用相同的处理方式。

规则和原始数据

两个容器各有总件数容量,物品分三类;移动需要来源数量足够且目标容量允许。比较整批原子方式与逐项尽力方式:前者任一失败就还原整批起点,后者跳过失败项继续后项;不允许负数量。

初始两容器三类数量[[4, 2, 2], [3, 3, 4]],总件数容量[14, 13] 每项[来源容器,类型编号,件数],目标为另一容器:[[1, 1, 2], [1, 0, 1], [1, 2, 3], [1, 2, 3], [0, 2, 4], [0, 0, 4], [0, 1, 1], [1, 1, 5], [1, 1, 4]]

逐步记录

逐项方式动作0:容器1向0移动类型1共2件,从[[4, 2, 2], [3, 3, 4]]出发,通过,结果[[4, 4, 2], [3, 1, 4]]。

逐项方式动作1:容器1向0移动类型0共1件,从[[4, 4, 2], [3, 1, 4]]出发,通过,结果[[5, 4, 2], [2, 1, 4]]。

逐项方式动作2:容器1向0移动类型2共3件,从[[5, 4, 2], [2, 1, 4]]出发,通过,结果[[5, 4, 5], [2, 1, 1]]。

逐项方式动作3:容器1向0移动类型2共3件,从[[5, 4, 5], [2, 1, 1]]出发,失败跳过,结果[[5, 4, 5], [2, 1, 1]]。

逐项方式动作4:容器0向1移动类型2共4件,从[[5, 4, 5], [2, 1, 1]]出发,通过,结果[[5, 4, 1], [2, 1, 5]]。

逐项方式动作5:容器0向1移动类型0共4件,从[[5, 4, 1], [2, 1, 5]]出发,通过,结果[[1, 4, 1], [6, 1, 5]]。

逐项方式动作6:容器0向1移动类型1共1件,从[[1, 4, 1], [6, 1, 5]]出发,通过,结果[[1, 3, 1], [6, 2, 5]]。

逐项方式动作7:容器1向0移动类型1共5件,从[[1, 3, 1], [6, 2, 5]]出发,失败跳过,结果[[1, 3, 1], [6, 2, 5]]。

逐项方式动作8:容器1向0移动类型1共4件,从[[1, 3, 1], [6, 2, 5]]出发,失败跳过,结果[[1, 3, 1], [6, 2, 5]]。

整批方式在动作3失败,整批恢复起点。整批结果[[4, 2, 2], [3, 3, 4]],逐项结果[[1, 3, 1], [6, 2, 5]]。

交叉核对与应用

逐类检查两个容器总量守恒,分别重放通过的动作。整批失败时必须与初始状态完全相同;逐项方式的失败项不能扣除任何来源数量,也不能向目标添加物品。

用户界面应让玩家知道采用哪种语义,否则同样的失败提示可能被误解为所有动作都没有发生。这里明确区分两种结果,但不建议在一次操作过程中未经说明地切换规则。

建议保留原始输入、每一步状态和最终输出,再只改变一个条件做对照。重点检查空输入、相等边界、重复请求以及先后顺序;把规则约定、计算过程和显示表现分别核对,比只比较最后一个数字更容易找到原因。