规则
推箱子的规则一句话说得完:把所有箱子推到目标点上。
- 你操作的是仓库里的搬运工,可以上、下、左、右走一格。
- 走到箱子前面并继续朝那个方向走,就会把箱子推走一格——前提是箱子后面那一格是空地,是墙或另一个箱子都推不动。
- 一次只能推一个箱子,两个箱子并排靠着时推不动。
- 只能推,不能拉。这是推箱子全部难度的来源:箱子进了死角就再也拿不出来。
- 所有箱子都停在目标点上,这一关就算完成。
本站这个版本的具体设置:
- 30 关原创关卡,全部为 Hi8 自己设计,不是经典关卡集的搬运;每关棋盘不超过 10×10,箱子 1 到 6 个。
- 难度由易到难:前 5 关只有一两个箱子,用来熟悉推和绕;第 11 关起三到四个箱子,开始要讲顺序;第 25 关起五到六个箱子,是真正要坐下来想的关。
- 每一关在上线前都用程序里的求解器(按推动数做广度优先搜索)验证过确实有解,不会出现怎么推都过不去的死关。
- 步数和推数分开计:步数是小人走的格数,推数是推动箱子的次数。
- 撤销不限次数,键盘按 Z 或 Backspace,一路退到开局都行;按 R 或点「重开」从头再来。
- 顶栏有 30 关的下拉菜单和「上一关/下一关」,过掉的关号后面会打上勾。
- 过关后显示「第 N 关完成,M 步 K 推」,一秒后自动进入下一关。
- 纪录记的是每一关的最少推动数,同时就是通关进度,纪录区显示「已过 X / 30 关」。
操作方式:电脑上用方向键或 WASD;手机上在棋盘上朝要走的方向滑一下,或者用棋盘下方的屏幕方向键。页面会记住你上次玩到第几关,下次打开直接接着来。
技巧
推箱子看着简单,第一次卡住往往在第十关之前。下面这几条按「最该先记住」的顺序排。
一、先想终局,再动第一步。 推箱子最贵的一步是第一步。动手之前先看一眼:每个目标点打算收哪个箱子?收的时候箱子从哪个方向进来?人要站在哪一格才推得出那一下?把这条链子在脑子里倒着走一遍,再落第一个动作,比边推边想省一半时间。
二、永远别把箱子推进墙角。 箱子一旦进了角落,四个方向里有两个方向背后是墙,另外两个方向你站不到人——除非那个角本身就是目标点,否则这一关当场作废。走之前先扫一眼:这一推之后,箱子会不会贴上第二面墙?
三、贴墙的箱子只剩一条线。 箱子被推到贴着一面墙时,它就只能沿着这面墙来回走了,再也离不开这一行或这一列。所以贴墙之前先确认:这条线上有目标点吗?没有的话,这个箱子就跟推进角落一样废了。
四、学会认「死格」。 把整张图上那些「箱子一旦进去就再也出不来」的格子认出来——墙角、以及贴着长墙又这一整条线上没有目标点的格子,统统是死格。老手扫一眼地图就在心里把死格标好,剩下的路线自然清楚了。这也是求解器剪枝用的同一套判断。
五、先推离目标远的、先收难收的。 多箱子的关里,顺序几乎就是全部。通常的做法是先处理路线长、绕得远的那个箱子,因为通道空着的时候它最好走;也要先收那些进出口窄的目标点——等旁边的目标点先被箱子占住,那个窄口往往就堵死了。
六、小心自己把路堵死。 箱子会挡住人。把一个箱子推到走廊正中间,你可能就绕不到另一个箱子的背后去了。狭窄的关里,落子前多问一句:推完这一下,我还走得到我要去的地方吗?
七、两个箱子挨在一起,等于一堵临时的墙。 并排的两个箱子互相推不动;靠墙的两个箱子更是谁都动不了。多箱子的关里,别让箱子在通道里排队。
八、撤销别怕用。 撤销不限次数,正确的玩法就是大胆试:推一段觉得不对,退回去换个顺序再推。追求推数纪录的时候更是这样——第一遍先过关,第二遍再想哪几步是白推的,然后重开刷一遍更干净的路线。
常见问题
推箱子的规则是什么?
控制搬运工在仓库里上下左右走,把所有箱子推到标着目标点的格子上。一次只能推一个箱子,只能推不能拉,箱子后面必须是空地。所有箱子都落到目标点上就过关。规则就这么多,难的是顺序和路线。
这里一共有多少关?难度怎么排?
30 关,全部原创设计。前 5 关一到两个箱子,用来熟悉推和绕路;第 6 到第 10 关两到三个箱子,开始要考虑先推谁;第 11 关起三到四个箱子;第 25 关起五到六个箱子,棋盘也更紧凑。每关都用求解器验证过有解,也算出了理论上的最少推动数。
箱子卡住了、推不动了怎么办?
按撤销(键盘 Z 或 Backspace,或者点顶栏的「撤销」)一步步退回去,撤销不限次数,退到开局都行。整关想推倒重来就按 R 或点「重开」。推箱子本来就是试错游戏,卡死很正常——认出哪些格子是死格,下一遍就不会再往里推了。
有通关答案或者自动演示吗?
没有,本站不放答案,也没有自动求解按钮。但撤销是无限的,等于给了你无限次重来的机会:把箱子推到一半发现走死了,退回分歧点换个顺序,比照着答案抄一遍记得牢得多。过关后会记下你用了多少推,想挑战更优解就重开再刷。
手机上怎么玩?
在棋盘上朝想走的方向滑动一下,小人就走一步;棋盘下方还有一组屏幕方向键,触屏设备上会自动出现,适合单手点。选关、撤销、重开都在顶栏,手机上照样能点。棋盘会按屏幕宽度缩放,10 列的关在手机上也放得下。
和华容道有什么区别?
两者都是滑块类谜题,但机制不一样:华容道是把不同大小的方块在盒子里挪来挪去,目标是把曹操移到出口,块可以横竖两个方向拉动;推箱子是你自己站在图里,只能推、不能拉,而且要同时安排好几个箱子的归宿。推箱子的不可逆性更强——华容道走错了总能挪回来,推箱子推错一步可能整关就废了。喜欢这类题的话,数独和扫雷也在益智分类里。
步数和推数,纪录按哪个算?
按推数。步数是小人走的格数,推数是真正推动箱子的次数;绕到箱子另一边只算步数、不算推数。纪录区显示你在当前这关的最少推动数,以及总共过了多少关。想比得更细的话,先把 30 关都过一遍,再回头挑那些推数明显偏多的关重刷。
历史与冷知识
- 推箱子(そうこばん/Sokoban,日文原意就是「仓库番」,也就是仓库管理员)由今林宏行在 1981 年设计,1982 年由日本公司 Thinking Rabbit 发售,最早跑在 PC-8801 这类日本八位机上。
- 英文世界里它长期被叫作 Sokoban,中文圈叫推箱子,早年在 DOS 和小霸王上流行的版本还留下了 boxman(推箱子人)这个别名——今天搜 boxman 出来的多半还是它。
- 推箱子在计算复杂性理论里是个有名的例子:判断一关有没有解已被证明是 PSPACE 完全问题(Culberson,1997 年),也就是说不存在又快又通用的解法;它同时是 NP 难的。这从数学上解释了为什么箱子一多,人和计算机都会明显吃力。
- 正因为难,推箱子成了搜索算法的经典试验场——双向搜索、死格剪枝、隧道宏走法(tunnel macro)这些技巧最早就是在推箱子求解器上打磨出来的。本站验证关卡用的按推动数广搜加死格剪枝,只是其中最朴素的一种。
- 它还催生了一种少见的社区文化:关卡本身就是作品。1980 年代末的 XSokoban 把游戏带进 Unix 世界并配上公开关卡集,此后几十年里业余作者不断发布自己的关卡集,其中 David W. Skinner 的 Microban 因为小巧、干净、专门照顾新手而流传最广。本站这 30 关沿着同样的思路自己设计,没有直接搬用任何一套现成关卡集。
- 推箱子的关卡好坏通常不看大小,而看有没有一个必须想明白的点:一个真正好的小关,可能只有五个箱子,却要求你按某个特定顺序收箱,顺序错一步就全盘卡死。
- 对求解器来说,推箱子的状态空间大得吓人:一张普通地图上箱子的摆法就能轻松上亿,所以现代求解器几乎都把「人在哪」压缩成「人能走到哪片区域」来算——本站的求解器也是这么做的。