四尺见方的窄地,五虎上将围住一个曹操。你要做的只有一件事——把他从底下那个豁口放出去。棋子只能推,不能提;一步之差,满盘重来。
新手总盯着曹操,想着「怎么把他往下推」。老手盯的是那两格空地。棋子不会自己动,是空格在盘上游走,路过谁,谁才能挪。把注意力换成「我要把空地挪到哪里」,一半的迷雾就散了。
曹操宽两格,要下行,必须在他正下方备出两格并排的横向空地。所以真正的功课不是推曹操,而是把关羽这枚横块和两名小卒从他脚下清走。多数人卡住,都卡在这一步。
小卒只占一格,是全盘唯一能灵活钻缝的棋。把它们看成润滑剂:先用小卒把空地「运」到你要的位置,再让大块跟进。竖将(张飞、赵云、马超、黄忠)笨重,尽量少动,一动就要还回来。
横刀立马的开局左右镜像。若你在左路推演不通,把整个思路镜像到右路再试一遍,往往豁然。这不是取巧,是省一半脑力。
此局的最短解也要一百多步,其中大量是「大块暂退、小卒绕行、大块再进」的循环。走回头路不等于走错路——只要每个循环结束时,空地的位置比开始时更靠近你要的地方。
盘面死局往往只坏在最近的三五步。连按几次「悔一步」退到岔口,换个方向重试,比推倒重来划算得多。真想练最短解,就从「齐头并进」(八十五步)入手,成了再回头啃横刀立马。
华容道取意于赤壁之后曹操败走华容道、为关羽所释的故事。棋盘四列五行,共二十格,十枚棋子占去十九格,只留两格空地——所有的腾挪,都在这两格里发生。
它在数学上属于滑块问题。横刀立马一局,坊间常说最少八十一步——那是把一枚棋子朝同一方向连推数格算作一步。本页按格计步,一格即一步,故最短解为 一百一十六步。两个数都对,只是尺子不同。侧栏那行「理论最少」,是我拿广度优先搜索把三种开局各穷举了一遍所得,并非抄自他处。
有意思的地方在于:这游戏没有一丝运气成分。走不出去只有一个原因——想得不够远。
全部逻辑不过两百余行,落子、判定、悔棋、记数,皆在你的浏览器里跑完,服务器一无所知。之所以先做它而不做别的,是因为它足够小,小到能一眼看清;又足够难,难到值得一玩再玩。