一個正確的 Klotski 解法恰好包含六個原子移動:滑塊下移、滑塊左移、閘右移、目標方塊下移三次,並且謎題會在最後獎勵 1,000 分。避免在 Klotski 中犯錯,歸結到底就是遵守三條嚴格的規則,這些規則規範了每一個被接受的動作。首先,每個矩形恰好在一個正交格子上移動 — 不能旋轉,不能多格滑動,也不能跳格。其次,非法移動會被原子化地拒絕:移動次數、歷史、分數、所選方塊以及位置全部保持原樣,因此一次失敗的嘗試除了浪費你按鍵的時間之外,不會造成任何損失。第三,最短路徑被證明為六步,因為一個獨立的廣度優先搜尋在第一個獲勝盤面於深度六出隊之前,發現了 3,234 個唯一狀態,並展開了 1,470 個佇列項目 — 因此任何耗費超過六步的計畫都已經偏離最佳路徑。理解這三條規則,正是乾淨俐落地以六步取勝與在某個死胡同原地打轉之間的差別。

how do i avoid common mistakes in klotski
如何避免在 Klotski 中犯下常見錯誤

Klotski 與其他滑塊遊戲有何不同

Klotski 是以 Lizely 的原創棋盤配置為基礎,而不是抄襲歷史上的既有排列。盤面為一個緊湊的 4 乘 5 網格:四個編號從 0 到 3 的欄,以及五個編號從 0 到 4 的列。六個固定矩形從已公開的位置開始,且全部都無法旋轉。方塊清單包含一個 2 乘 2 的目標方塊、兩個 1 乘 2 的柱子,以及三個 1 乘 1 的方塊。它們合計佔據 11 個不同的格子,留下 9 個空格可供移動。座標系統是明確的,且是每一個被接受移動的唯一真實來源。

數字鍵方塊形狀遊戲開始時的左上角位置
1目標方塊2 x 2x=1, y=0
2左柱1 x 2x=0, y=0
3右柱1 x 2x=3, y=0
4滑塊1 x 1x=1, y=2
5護衛1 x 1x=0, y=2
6閘1 x 1x=2, y=2

目標是將目標方塊的左上角放置在 x=1, y=3,這會使 2 乘 2 的佔位範圍橫跨第 3 列與第 4 列的欄 1 與欄 2,並對齊已公開的雙欄底部開口。因為盤面是有邊界的,目標方塊無法以斜向接近,也無法離開遊戲區域。這個謎題中的錯誤幾乎總是源自於誤判目前選中的方塊、誤判完整佔位範圍可移動的方向,或誤判方塊在網格上實際佔據的列與欄。在開始路線之前,請將上面的座標表走過一遍,確認每個起始格子,因為已公開的位置是可稽核的,任何建立在錯誤格子上的計畫,在最佳路徑上都無法挽回。

規範每一個動作的原子移動規則

每一個被接受的動作都會將選定的矩形恰好移動一格 — 上、下、左或右。在移動安裝之前,邏輯會建構完整的目的地佔位範圍,並檢查兩件事:它必須仍然位於 4 乘 5 的盤面之內,且不能與任何其他方塊佔據的格子重疊。如果其中任何一項檢查失敗,該移動會被原子化地拒絕,移動次數、歷史、分數、所選方塊以及位置全部保持原樣。長按方向鍵並不會讓方塊連續衝過好幾格,因為在第一次按下之後,重複的 keydown 事件會被忽略。

這條原子規則是防止代價高昂錯誤的核心保障。你可以朝著牆壁或阻擋方按方向鍵,盤面之後看起來完全一樣。結合以快照為基礎的復原,造成永久錯誤的唯一方式,就是明知會將關鍵方塊卡在六步路線無法挽救的位置,卻仍然接受該移動。一個常見的錯誤假設是認為方塊可以旋轉,或一次滑動多格以擠過柱子 — 如果你已經開始了已驗證的路線卻迷失方向,Klotski 方塊能否旋轉或一次移動超過一格的說明會再次強調為何每一格都至關重要,以及為何任何捷徑最終總會讓你付出代價。

在點選任何方塊之前應避開的錯誤

這些步驟能讓你留在最佳的六步路徑上,並避開那些最浪費移動次數的死角。

  1. 在移動之前確認你選中的方塊。 點擊該矩形,或按下其數字鍵(1 到 6)。會出現一個可見的外框,狀態列會顯示作用中方塊的名稱。錯誤:點擊你打算落腳的格子,而不是你想移動的方塊。該格子可能屬於另一個方塊或屬於空白區域,移動次數也不會增加。
  2. 確認整個佔位範圍所要移動的方向是暢通的。 一個 2 乘 2 的目標方塊需要四個對齊的空格子,1 乘 2 的柱子則需要兩個。錯誤:假設一格寬的暢通通道意味著 2 乘 2 的方塊也能從中穿過。
  3. 絕對不要嘗試旋轉矩形。 方塊在整個謎題中保持其已公開的寬度與高度。錯誤:試圖將目標方塊旋轉成橫向以擠過狹窄的縫隙 — 該移動會被拒絕,盤面也不會改變。
  4. 絕對不要長按方向鍵以串連移動格子。 第一次按鍵會被接受,後續的重複按鍵會被忽略。錯誤:期望長按能連續移動五格,結果卡在一個 BFS 無法辨識的位置。
  5. 將任何被阻擋的嘗試視為免費的資訊。 按下 U、Delete 或 Backspace,在嘗試下一個方向之前先復原上一個被接受的移動。錯誤:不斷地往牆上撞,而不退一步比較各條路線。
  6. 當路線迷失時,以乾淨的狀態重新開始。 重新開始會還原全部六個原始位置、選中目標方塊、清空歷史、將移動次數重設為零,並將分數歸零。錯誤:在明顯卡住時繼續硬按方向鍵推進,而不是選擇重新開始往往更快。

一條能避免失誤的六步驗證路線

最短路徑是經過機械驗證的。一個獨立的 BFS 會將所有座標攤平為已發佈的方塊順序,為其他五個方塊建構自己的佔用格子集合,為每個矩形嘗試四個方向,對序列化向量進行去重,並在 2 乘 2 的目標方塊抵達 x=1, y=3 時停止。第一個獲勝狀態在深度六時出隊。該搜尋發現了 3,234 個唯一狀態,並展開了 1,470 個佇列項目。因此,任何介於零到五步的原子移動路線都無法抵達出口,而任何需要七步以上的計畫都已經偏離最佳路徑。

其中一條最短路徑為滑塊下移、滑塊左移、閘右移、目標方塊下移三次。仔細閱讀它便能看出為何逐格計數如此重要。滑塊先落入第 4 列,接著移到最左欄,藉此清出目標方塊左下的通道。閘向右移入開放的第四欄,清出右下的通道。當兩個中央格子都空出來之後,2 乘 2 的目標方塊可以從 y=0 移動到 y=1,再到 y=2,最後到 y=3。最後一步會填入已公開的出口佔位範圍,並剛好獎勵 1,000 分。設計過程透過實際的狀態轉換測試了這條確切的路線,並驗證了每一個中間盤面。

任何其他嘗試先移動柱子、旋轉目標方塊,或將滑塊向上而非向下滑動的計畫,都是在浪費 BFS 已證明為多餘的步數。將每一次繞路都視為路線已迷失的證據,按下重新開始,並重新執行相同的六步。

為何復原與重新開始能讓實驗保持安全

復原是建立在不可變快照之上的。每一個被接受的移動,都會在安裝新位置之前,為先前的位置圖附加一個深層複製;復原則會移除最新的快照,並在將移動次數減一之後,還原其精確的座標。由於非法移動從不產生歷史紀錄,失敗的實驗完全不會留下任何痕跡。設計甚至已驗證:一次被接受的移動加上一次復原,將會回到已發佈的起始狀態。

重新開始是刻意設計的重玩機制。它會還原全部六個已公開位置、選中目標方塊、清空歷史、將移動次數重設為零,並將分數歸零。當你已經按下一連串被接受的移動,使得路線超過六步時,重新開始是最乾淨的回復方式 — 此時繼續復原仍然有效,但快照歷史是有限的,因此刻意地重新開始可以徹底避免不小心重播一個未完成的實驗。Klotski 中的錯誤之所以成為永久錯誤,只有在你持續不斷地朝同一個角落硬闖時才會發生。

分數、完成條件與後續

抵達出口即為終局。獲勝的那一步會將分數設定為剛好 1,000 分,並凍結方塊選擇、移動與復原功能。沒有速度加成、移動懲罰、提示費用、部分給分或隨機變數需要追逐。共用的遊戲框架提供了一個儲存在你瀏覽器本機的最佳分數、一個重新開始控制項,以及一個雙擊 Escape 的老闆鍵,可用類似試算表的畫面快速蓋住謎題以保護隱私。在外殼的時限內連按兩次 Escape 即可蓋住謎題,再按兩次即可返回。

所有遊戲過程都在瀏覽器本機執行。不會上傳任何盤面狀態、移動歷史、結果或互動資料,且這個謎題不需要帳號、相依套件、遠端 API、裝置權限或付費服務。這是休閒性的空間規劃練習,並非標準化的智力、性向、教育或心理評量,且這個六步結果僅適用於已公開的原創配置與其精確的原子移動定義。當你準備好親自走一遍這條路線時,請開啟Klotski,按數字鍵 1 選中目標方塊,依序執行這六步,並親眼見證分數精準落在 1,000。

如果你正在權衡選項,如何避免在《Knights and Knaves》中犯下常見錯誤對此有詳細說明。