「積木數量謎題」的答案是計算實際佔據的 x、y、z 座標數量,而不是計算可見的面或頂端菱形數量,因為在等角堆疊中有些方塊繪製時沒有任何面,卻仍然佔據著支撐柱內部的位置,必須被計入總數。在計算積木謎題中,攝影機朝向正 x、正 y 與正 z 三個方向,而渲染器會針對每個方塊檢查這三個方向的相鄰格子位置。只有當正上方的座標為空時才繪製頂面,當正 x 方向的鄰格為空時繪製一個側面,當正 y 方向的鄰格為空時繪製另一個側面。只有當這三個相鄰位置全部都被佔據時,方塊才會完全隱形,這就是為什麼逐層掃描所有 z 層的已填充格子能得到正確總數,即使等角表面在某些內部方塊處完全沒有顯示任何東西。每個場景會出現四個數字選項,精確選擇可獲得 200 分,五次精確選擇即可達到最高分 1,000。

how many blocks puzzle
積木數量謎題:正確閱讀等角堆疊

等角繪圖所顯示的內容與省略的部分

計算積木謎題中的可見影像只是更大方塊結構的表面。每個方塊位於整數網格上的一個座標,記為 x、y、z,其中 x 和 y 值定位其在地面上的柱子位置,z 則代表其高度。由於每個 z 值大於零的座標其正下方都有另一個座標,因此堆疊中不會有懸浮的方塊;每個方塊都坐在另一個方塊之上或位於地面平面上。

渲染器對每個方塊進行三項獨立的檢查。如果正上方的格子為空,則繪製頂面。如果正 x 方向的鄰格為空,則繪製一個側面。如果正 y 方向的鄰格為空,則繪製另一個側面。這些檢查之間互不影響,因此單一方塊可以根據哪些方向是開放的而顯示一個、兩個或三個面。一根高柱即使含有五個堆疊的方塊,仍然只有一個頂端菱形,這是隨意計數者最先出錯的地方。

每個隱藏方塊背後的三面規則

當方塊所有三個朝向攝影機的鄰格同時都被佔據時,該方塊會從繪圖中完全消失。僅一個相鄰方塊不足以隱藏整個方塊,兩個鄰格同樣也不夠。如果三個朝向攝影機的方向中有任何一個是開放的,則至少會有一個面保持可見。只有三個鄰格全部被佔據的情況會使方塊從渲染表面中移除。

正 x 鄰格正 y 鄰格正 z 鄰格繪製的面
空空空三個面(頂面、x 側面、y 側面)
空空已佔據兩個面(x 側面、y 側面)
已佔據已佔據空一個面(僅頂面)
已佔據已佔據已佔據零個面 — 方塊完全隱藏

這個面的規則避免了一個常見的計數錯誤:單一陰影面或單一共用頂面並不代表堆疊中缺少一個方塊。只有當你完全看不到任何面時,該方塊才算是缺少。被遮蓋的面只是從 SVG 中省略,而隱藏的方塊仍然是實際堆疊的一部分。

如何從下到上閱讀圖層掃描器

解決此謎題的實用方法是將等角表面與下方的圖層掃描器結合使用。掃描器將堆疊從下到上分成水平的 z 切片。每一個已填充的掃描器格子代表該層中一個已佔據的 x 和 y 座標,包括在等角視圖中沒有可見面的方塊。

二維投影的常數永遠不會改變方塊數量。遊戲繪製方塊時,螢幕 x 等於 150 加上 x 減 y 乘以 30,螢幕 y 等於 80 加上 x 加 y 乘以 17 然後減去 z 乘以 34。這些常數僅控制每個面在畫布上的繪製位置,絕不會改變實際的方塊集合,因此在計數時可以放心忽略它們。

  1. 打開等角堆疊下方的圖層掃描器,並從可見的頂面、x 側面和 y 側面識別攝影機方向。
  2. 從下到上閱讀 z 圖層。每一層都是一個由 x 和 y 座標組成的二維網格。
  3. 將每一個已填充的掃描器格子標記為該高度下一個已佔據的 x 和 y 配對,包括對應於等角視圖中零可見面方塊的格子。
  4. 計算第一層的已填充格子數量,並在所有後續圖層中保持累計計數。
  5. 最後將累計計數相加。最終數字即等於堆疊中已佔據的網格座標數量。
  6. 從該回合所提供的四個數字總和選項中挑選符合的數值。

空的掃描器格子保留底面對齊而不貢獻方塊,因此不要將其計入你的總數。逐層閱讀是使計數對隱藏方塊具有魯棒性的關鍵:即使等角表面在某個區域沒有顯示任何東西,該區域中的一個已填充掃描器格子仍代表在該高度存在一個方塊。

實例解析:一個含一個隱藏方塊的 2x2 堆疊

考慮一個 2x2 的底面,其中四個柱子的高度分別為 2、2、1 和 1。柱子高度的總和直接給出方塊總數:2 + 2 + 1 + 1 = 6 個方塊。

位於 (0, 0, 0) 的最底部方塊就是隱藏的那一個。其正 x 方向的鄰格 (1, 0, 0) 已被佔據,因為該柱高度為 2;正 y 方向的鄰格 (0, 1, 0) 已被佔據,因為該柱高度為 1;正 z 方向的鄰格 (0, 0, 1) 已被佔據,因為該柱高度為 2。所有三個朝向攝影機的鄰格都已被佔據,因此渲染器省略了該方塊的所有面,它在等角繪圖中完全不出現。該回合所提供的四個數字選項中將包含 6 作為唯一符合的總和。

如果你只計算頂端菱形,你會看到每根柱子一個頂面而回報 4 個方塊。如果你計算可見面,則會高估數量,因為單一方塊可以貢獻多個面,而隱藏方塊則不貢獻任何面。圖層掃描器能夠抓到缺少的方塊,因為底層 z = 0 的 (0, 0) 格子是已填充的,而等角繪圖在該座標處沒有顯示任何面。

從四個數字選項中挑選正確的總和

每個回合顯示一個原始等角堆疊和四個普通數字選項。場景中沒有任何具名答案、總和、可見計數、隱藏計數、語意正確標記或結果資料屬性。這四個選項就是普通數字,而引擎會獨立計算實際的方塊清單以找出唯一符合的選項。選擇該選項可獲得 200 分並立即呈現下一個堆疊。

這五個場景從緊湊的 2x2 平台進展到隆起的山脊、加冕的底面、對角塔樓以及寬廣的隱藏露台。每個場景都使用透明幾何而非人工編寫的答案標記,而公開的投影說明加上完整的圖層掃描使每個已佔據的座標都能被稽核,無需引擎印出最終總和。

計分、修復以及最高 1,000 分的完美通關

動作對分數與狀態的影響
首次選擇正確的總和+200 分,進入下一個場景
選擇錯誤的總和,然後再次選擇同一個錯誤總和已去重複;第二次相同的選擇不會再消耗一次失誤
選擇一個錯誤的總和,然後在同一場景中選擇正確的總和失敗紀錄會在進入下一個場景前清除;不會污染後續回合
選擇第二個真正不同的錯誤總和回合鎖定;僅剩重新開始可用
以精確總和完成五個場景最終分數正好為 1,000 分
隨時按下重新開始場景回到完全相同的初始狀態

滑鼠指標與觸控輸入可從四個原生答案按鈕中選擇其一,其目標高度大於 44 像素。鍵盤操作首先聚焦於某個選項;方向鍵可在二乘二的選項網格中移動,真正的 DOM 焦點會跟隨可見游標。Enter 或空白鍵透過功能性更新選擇當前狀態游標,避免在快速切換後發生答案過時的情況。當回合完成或鎖死時,所有答案都會被禁用,而重新開始按鈕仍可透過共用的 GameShell 使用。

常見的計數錯誤及其失敗原因

最常見的錯誤答案是描繪出來的方塊頂面數量。一根高柱不論包含多少方塊都只有一個頂端菱形,因此只計算頂端菱形會回報柱子數量而非方塊數量。第二常見的錯誤是計算可見面。單一方塊可以貢獻一個頂面和兩個側面,另一個方塊可能只貢獻一個側面,而完全隱藏的方塊不貢獻任何多邊形,因此可見面的數量並不等於方塊數量。

關於更深入的策略,請參閱如何解開含有隱藏方塊的計算積木謎題的配套攻略,該文以相同的三面規則為基礎並提供額外的練習場景。在每個情況下,正確的數量都是已佔據的網格座標數量,相當於所有完整柱子高度的總和,這正是圖層掃描器逐格所回報的內容。

如果你正在權衡選項,進階填字遊戲策略:1,000 分滿分解法對此有詳細說明。