更新于 2026-09-01 · 方法:solver-v2 + 人工审查

如何不靠猜测解决推箱子

推箱子的核心是规划推动,而不是先减少走路。可靠方案从目标反推,保护推动侧,并延后不可逆动作。

快速总结

实用的推箱策略应从最后一推开始,而不是从最近的可动箱子开始。先标出目标格、箱子的目标前一格,以及人物完成推动所需的站位;每次推动都要保护这三处,并检查通路是否丢失、是否触发已证明的死锁。

温室风格的概念性推箱场景,木箱位于两块花朵标记地砖之间,旁边有两条颜色不同的光线路径
概念性策略插图,并非可玩的 Crate Bloom 棋盘或关卡解答。

为什么合法的一推也会毁掉可解局面

推箱子的基本规则很短:人物只能向四个方向移动,每次只能推动一个箱子,而且不能拉箱子。正是“不能拉”让每次推动都很重要;落点合法,并不代表之后还能把箱子救回来。

走路通常只改变人物位置,推动却会改变空间结构:箱子占据新格子、挡住新路线,也可能拿走下一次推动所需的一侧。因此不要只问“能不能推”,还要问“推完之后还剩什么有效推动”。

每次准备推动时,检查三个位置:

  • 箱子这次要进入的落点;
  • 下一次有效推动时人物必须站立的支撑位;
  • 人物抵达该支撑位所需的通路。

从最后一推向前反推

先选择一个受限目标,并设想完成它的最后一推。箱子必须从哪一格进入?人物要站在哪里才能推动?墙体、其他目标和窄入口可能只留下一个可行答案。

建立三段反向计划,再向前倒推一次推动。判断合适的箱子怎样到达目标前一格,同时不占用最终站位,也不封住去往该站位的路线。只需反推到足以决定下一次安全推动即可。

反推是一种决策方法,不是任何关卡都能直接套用的万能证明。多个箱子的互动仍可能难以局部判断,因此还需要专门的死锁检查。

  1. 目标格:箱子最终必须占据的位置。
  2. 目标前一格:箱子进入目标前所在的相邻格。
  3. 最终站位:人物完成最后一推时必须站在箱子后方的位置。

先决定箱子顺序,再考虑距离

离目标最近的箱子不一定最合适。贴墙或走廊尽头的目标可能只能从一个方向进入,而开放目标有多种入口。先分析限制最多的目标,并为它保留合适的箱子。

完成后的箱子仍占据一格,应把它当作新墙体继续检查剩余计划。过早填上容易的目标,可能关闭共享通道、挡住人物绕行,或占掉唯一可以换边推动的暂存格。

安排顺序前,逐项比较:

  • 哪个目标的最终进入方向最少;
  • 哪个箱子能抵达入口,同时保留人物站位;
  • 哪些通道由两个或更多未完成箱子共享;
  • 现在填上某个目标会挡住什么。

用可恢复的暂存格保护通路

暂存格是让箱子暂时等待、人物可以绕到另一侧的位置。中央空地通常比墙边或单出口走廊灵活,但“在中央”并不等于安全。只有人物还能抵达有效推动侧、箱子也仍有通往目标的路线时,这个位置才有价值。

使用暂存格前检查以下四项。无限撤销和重做可以让你回到上一个空间决策点比较方案;它们是规划工具,不是失败惩罚。

  • 落点不是已证明的死格。
  • 人物至少还能走到箱子后方,完成一个已计划的下一推。
  • 这一推不会封住人物绕过墙体或箱群的唯一通路。
  • 其他箱子仍保有通往受限目标的共享路线。

识别已证明的死锁,但不要害怕每一面墙

Crate Bloom 明确区分有证明的“已死锁”和范围更宽的“需谨慎”。当前静态检查只覆盖三类有界局面:

  • 箱子进入非目标角落;
  • 忽略其他箱子后,某个墙边区域仍无法通过反向拉动可达性到达任何目标;
  • 墙和箱子组成冻结的 2×2,并且至少有一个被困箱子不在目标上。

箱子贴墙并不自动等于失败。只要还能沿墙移动到目标,局面就可能恢复。目标角落也是“角落必死”的明确反例:箱子可能已经正确到位。

出现静态证明时应立即停下;界面只显示“需谨慎”时,应重新检查通路,而不是直接认定关卡失败。

来自“隔断苗床”的求解器验证决策

Crate Bloom 当前主线在三个世界中共有 36 个项目原创关卡。第 13 关“隔断苗床”是一个三箱紧凑局面,难点在人物通路,而不是冗长走路。

公开的主线验证清单记录:在准入的推动状态图中,最少推动数为 6;同时还有一条合法的 22 步参考回放。这是两类不同结论:推动数在准入图内获得证明,参考回放的走路步数不宣称是全局最短。

合法参考回放给出了一个可复现的局部顺序,无需公开完整路线。第一次推动先把下方箱子从 (3,3) 横向推到 (4,3);第二次才把左上箱子从 (2,2) 向下推到 (2,3) 的目标。这个顺序不能颠倒:若下方箱子仍在 (3,3) 时先占据 (2,3),完成的箱子会堵住下方箱子向右推动所需的站位,而 (3,4) 的墙又排除了纵向脱身。

  1. 移动箱子前,先标出 (2,3):它既是目标,也是把下方箱子向右推动时的人物站位。
  2. 趁该站位仍空着,先把下方箱子从 (3,3) 暂存到 (4,3)。
  3. 然后再把左上箱子从 (2,2) 推入 (2,3) 的目标。
  4. 重新检查剩余站位;保存的回放以 6 推完成,但本文刻意省略余下路线。

这并不是“目标都要延后”的口诀。关键是:一个共享格在被完成箱子永久占据前,必须先完成它作为人物站位的作用。

使用“反推—推动—证明”循环

一个紧凑的推箱策略循环可以让每个不可逆动作都能复核:

  1. 反推:选择受限目标,标出箱子最终位置和人物站位。
  2. 推动检查:查看落点、下一站位、绕行路线、共享通道和静态死锁。
  3. 只推一次:先做一个改变空间结构的动作,不连续盲推。
  4. 证明:重新画出人物可达区域和剩余箱子的路线。
  5. 恢复:必要通路消失时,撤销到决策点,不用额外推动盲目补救。

常见问题

推箱子首先应该规划什么?

先规划受限目标的最后一推。找出箱子的目标前一格和人物必须站立的位置,再安排能够同时保留这两处通路的箱子顺序。

箱子贴墙就一定死锁吗?

不一定。只有不存在通往目标的可行路线时,贴墙才会致命。Crate Bloom 只把有界静态证明标为“已死锁”,不确定的贴墙情况只标为“需谨慎”。

应该先减少走路还是推动?

先规划推动,因为推动会改变箱子结构和未来通路,之后再缩短走路。Crate Bloom 的最少推动结论限定在准入的推动状态图内;保存的移动数是参考回放,不是全局最短走法。

外部参考资料

以下原始来源支持通用规则与研究背景;Crate Bloom 的关卡和检测器事实来自上方链接的项目证据。

一次只验证一推

打开主线,选择一个受限目标,在移动箱子前保护下一次推动所需的站位。完整路线仍由你自己发现。

游玩 Crate Bloom 主线