給初學者的積木堆疊謎題,是一款在固定五乘五盤面上進行的有限方塊建造遊戲,每一個體素都必須落在工作台範圍內、不能重疊,而且必須放在地面上,或是正好被下方的體素支撐住。這個以加號顯示的五乘五目標形狀,是一個固定的輪廓,你必須用手邊給定的、以字母標示的小型物件清單,精準地重新建構出來。在 Block Stacking Puzzle 中,初學者追的不是不斷下落的方塊流、移動的板塊,也不是消除整列的計時器;初學者要做的,是研究目標形狀、規劃建造順序,並不斷旋轉方塊,直到每一個已佔用的格子都對上輪廓為止。「Check shape」會執行一次嚴格的最終檢查:體積必須與目標一致、不能有重複的格子、目標中的每一個座標都必須出現、不能有座標超出目標範圍,而且每一個抬高的格子都必須被直接支撐。完美吻合會獲得恰好 200 分,並解鎖下一個原創目標。五個形狀全部吻合,就會得到剛好 1,000 分的滿分。整個遊戲都在瀏覽器中執行,不需要帳號,也不需要上傳任何內容,而且整套引擎都可以被檢驗,因為每一次放置都是原子性的——一次被拒絕的嘗試,不會對盤面上的任何東西造成改變。

block stacking puzzle for beginners
給初學者的積木堆疊謎題

初學者一開始在畫面上會看到什麼

當你第一次打開這個遊戲時,畫面上有兩個最重要的東西:一個佈滿加號的五乘五盤面,以及下方一小排以字母標示的方塊按鈕。這些加號並不是暗示某個方塊該放在哪裡的隱藏提示;它們單純就是你必須重現出來的目標輪廓。每一個方塊按鈕,都會以相對座標顯示該方塊經過標準化後的幾何形狀,讓你在真正放置之前,能先比對它的形狀與加號輪廓是否吻合。

控制列裡還包含「Rotate」「Undo」「Check shape」「Next level」與「Restart」。每個按鈕的高度至少有 44 像素,而五欄的盤面也能塞進 390 像素寬的檢視畫面裡,所以不論在手機還是桌機上都能正常使用。已放置的體素會顯示自己所屬的方塊字母,讓你能分辨目前盤面上放的是哪一種幾何形狀;而放置歷史紀錄,只會記錄你已經做過的操作——不會在可見的文字、無障礙標籤、隱藏欄位或資料屬性中,內嵌任何解答錨點、正確起點、答案用的旋轉角度,或私下的排列順序。

你必須最先學會的三項放置規則

在你放置任何東西之前,先牢記三項規則。它們決定了盤面上每一次的成功與每一次的失敗。

  1. 在範圍內。 從選定的起點平移後,這個經過旋轉的方塊的每一個格子,都必須落在五乘五盤面的範圍之內。只要有一個格子超出範圍,整個放置就會被拒絕。
  2. 不可重疊。 任何格子都不能疊在你已經放好的體素上面。兩個方塊在任何時候都不能共用同一個座標。
  3. 直接支撐。 每一個抬高的體素,都必須正好位於另一個已佔用體素的正上方。體素可以放在地板上,也可以放在下方另一個體素上,但不能懸空。

這三項規則,會被套用到整個方塊,把它當成一個整體來判斷。只要其中一個格子違反了任何一項規則,整個方塊就完全不會被放置——盤面會恰好回到你點按之前的狀態。同一個剛放置的方塊內部的格子,彼此之間可以互相支撐,所以一根垂直的長條,可以當成一個穩定的整體直接放在地板上,不需要額外的支撐結構。

放置你的第一個方塊:逐步說明

以下就是你每放一個體素到盤面上時,都要重複的確切步驟。

  1. 選一個還沒用過的字母方塊。 點按一個字母仍然可用的方塊按鈕,並讀取它的相對座標,這樣你在旋轉之前,就能先了解它的形狀。
  2. 旋轉,直到形狀符合你的計畫。 按「Rotate」,直到這個方塊的輪廓,符合你打算先填滿的目標區域。方塊每次以 90 度為單位旋轉,所以你總共有四種方向可以選擇。
  3. 設定左下角的起點。 點按盤面上你希望這個旋轉後方塊的左下角落腳的格子。引擎會以這個起點為基準,平移這個方塊的每一個格子。
  4. 觀察這次原子性的檢查。 如果每一個格子都在範圍內、沒有被佔用,而且有支撐,這次放置就會被確認,這些格子上會顯示對應的方塊字母。如果有任何一個格子不符合條件,畫面上不會出現任何內容,盤面也不會有任何改變。
  5. 需要時用「Undo」修正。 如果你放了一個方塊之後,發現它擋住了更好的排列方式,按「Undo」就能移除最近一次放置的方塊,並把它放回可用的物件清單中。
  6. 當盤面吻合時按下「Check shape」。 當你已佔用的格子,完全覆蓋了加號構成的目標時,按下「Check shape」。完美吻合會獲得恰好 200 分,並解鎖下一個原創目標。

五個初學者關卡一覽

這五個目標形狀,遵循一條刻意設計的初學者難度曲線,從一個平坦的地基,一路發展到最後的階梯。完整的解法數量,已經由一套獨立的窮舉式驗證程式鎖定,這套程式會列舉每一種旋轉方式、目標範圍內的每一個起點、每一種遞迴組合,以及每一種合法的依序建造順序,因此你可以把自己的建造方式,拿去和一個經過驗證的基準互相比對。

關卡目標構想分數經驗證的解法數量
1方形地基2004
2高台階2001
3低矮平台2001
4雙層長方形2002
5最終階梯2004
總計1,000

第一關與第五關同樣都有四種合法解法,這件事並不是在暗示你去背誦某一種固定排列。它其實是在提醒你:任何能產生出恰好符合支撐條件的佔用結果的建造順序,都會被接受,所以應該把重點放在支撐與吻合上,而不是死記某個排列。相較之下,第二關與第三關只有唯一一種經過驗證的解法,這讓它們成為測試你的放置方式,是否與鎖定排列完全一致的天然練習場。

初學者策略:先算體積,再看支撐

對初學者來說,最有用的單一習慣,就是在放置任何東西之前,先數清楚格子的數量。每一關的數量都恰好平衡:每一個方塊裡所有格子的總和,正好等於目標形狀上加號的數量。如果你數出來的數量對不上,不管用什麼順序放置,都不可能解出這一關。如果數量對得上,這個謎題就會簡化成「哪個方塊要覆蓋哪一叢加號」的問題。

確認過體積之後,接著看目標形狀最底層那一列。每一個抬高的加號,都必須沿著一條連續的垂直鏈,一路連到地面。長條的水平方塊,看起來很適合當成抬高的平台,但它整個跨度都必須有支撐才行。垂直方向的放置通常比較寬容,因為同一個方塊內部的格子,會支撐住它上方的格子,所以一根單獨的高方塊,不需要額外的支撐結構也能站得住。

先放置那些最明顯的地基方塊,再用「Undo」逐步往上建造,而不是硬放一個沒有支撐的懸空結構。如果你想更深入了解這套先算體積、再看支撐的方法,可以參考 volume, support, and 1,000-point route guide 這篇指南。

修正錯誤:Undo 與第二次排列規則

初學者幾乎一定會把第一個方塊放錯位置,這完全沒關係。Undo 就是設計來讓你使用的。它只會移除你最近一次整個方塊的放置,把那個方塊放回可用的物件清單中,並完整保留在此之前每一次合法放置的狀態。接著你就可以旋轉這個方塊,或改變它的起點,重新嘗試一次,而不必從頭重建整個關卡。

「Check shape」有一個不太顯眼的安全機制。如果你對同一個不吻合的排列連按兩次「Check shape」,引擎會把這次按下判定為重複,你不會因此多消耗一次錯誤次數。但如果第二次是一個確實不同、而且真的不吻合的排列,就會結束這次嘗試。這項規則的用意,是鼓勵你修正之後再試一次,而不是無止盡地重複同一個錯誤。當一個修正後的排列在一次失敗的檢查之後成功時,失敗紀錄會在進入下一關之前清空。

如果你想從第一關重新開始,「Restart」會重建出完全一樣的起始狀態:沒有放置任何方塊、沒有任何歷史紀錄,只有加號。

給第一次上手的人:鍵盤與觸控操作方式

指標與觸控輸入使用的是原生按鈕。點按一個方塊來選取它,需要旋轉幾次就按「Rotate」幾次,然後點按盤面上的一個格子,設定左下角的起點。每一個控制項的可觸控範圍,高度都至少有 44 像素,讓手機上的點按操作更容易命中。

如果某個目標太小,不方便直接點按,你也可以改用鍵盤來操作盤面:方向鍵移動目前可見的起點游標,R 鍵旋轉目前選取的方塊,空白鍵或 Enter 鍵則會放置它。方塊選取按鈕、「Rotate」「Undo」「Check shape」「Next level」與「Restart」,在取得焦點時仍然維持一般原生按鈕的行為,所以在同一關裡,你可以自由混用鍵盤與指標操作。

一切都在瀏覽器中本機執行。想要拿到滿分 1,000 分,不需要帳號、不需要上傳、不需要伺服器端計算、不需要新增任何依賴套件,也不需要任何付費服務。

想進一步了解,請參閱 Bomb Defuse Game for Beginners: Start With Five Circuits