一款建立在真實座標上的 3D 記憶遊戲,會要求你研究一個位在名符其實的 X、Y、Z 場景中的標記物件,然後在鏡頭繞著它偏轉與俯仰之後,找出同一個世界座標點。與圖形滑動或卡片翻面的平面棋盤不同,這種形式把深度當成第一等重要的元素,因此兩個在螢幕上位於同一位置的物件,可能位在不同的深度,一旦視角旋轉,就會投影到不同的像素位置。每一輪都從一個被遮蓋的場景開始,接著進入一個明確的 Reveal 階段,展示出沿著 X、Y、Z 軸排列的三個物件,然後進入一個 Hide 階段,在套用偏轉與俯仰旋轉之前,把所有物件都移除。緊接著出現的四張候選卡片,各自顯示相同的旋轉後座標系,但十字準星落在不同的投影螢幕位置,你的任務就是選出那張十字準星,真正落在被記住的世界座標點最終所在位置的卡片。五個經過設計的關卡、每關恰好一個正確答案,再加上固定的 1,000 分上限,讓整個結構完全具有確定性,因此進度完全取決於你能否記住一個世界座標點、選出相符的卡片,並避免選到兩個不同的錯誤選項。

這款 3D 記憶遊戲與 2D 記憶謎題的不同之處
大多數線上發布的記憶遊戲,都仰賴平面式的回憶。Number Memory Test 要求你把一串數字原樣打回去。Visual Memory Test 要求你在一個固定的二維格子上,重現被標亮的方格。Position Memory Game 要求你把具名的物件放回它們原本所在的方格。這些形式都共用一項假設:答案位在同一個平面上的同一個點。3D memory game則否定了這項假設,因為鏡頭本身會移動。
在 Spatial Memory Game 中,被標記物件在旋轉前的螢幕位置,永遠不是答案。你記住的,是一個由水平、垂直與深度座標所定義的世界座標點,接著你要判斷這個點在視角改變之後,會投影到哪裡。這種差異並非表面上的。原本位在場景左側的一個點,依照偏轉與俯仰如何與其深度結合,可能會移動到回憶畫面的右側、向上滑動,或往下沉。兩個 X 與 Y 相同、但 Z 值不同的物件,在旋轉之後經常會落在不同的螢幕位置,因為隨著旋轉後的 Z 值愈接近鏡頭,透視分母就會愈小。
| 記憶遊戲 | 你要記住什麼 | 你必須重現什麼 |
|---|---|---|
| Spatial Memory Game(本篇這款 3D 記憶遊戲) | 一個物件的 X、Y、Z 世界座標位置 | 它在偏轉與俯仰旋轉之後的投影螢幕位置 |
| Number Memory Test | 一串數字 | 依原本順序重現同一串數字 |
| Visual Memory Test | 2D 格子上被標記的方格 | 同一個平面格子上的相同高亮方格 |
| Position Memory Game | 棋盤上的具名物件 | 每個具名物件原本所在的方格 |
並排來看,這四種形式雖然都用了「記憶」這個詞,解決的卻是完全不同的認知問題。這款 3D 版本,要求你在鏡頭真正繞著這個世界座標點旋轉的同時,把它記在心裡。
如何遊玩這款 3D 記憶遊戲
每一輪的流程都很精簡、明確,而且在全部五輪中都完全相同。
- 按下 Reveal scene,研究圍繞在具名物件周圍的虛線標記。留意它在 X 軸(左右)、Y 軸(高度),以及 Z 軸(深度)上的位置。你可以花多久時間都沒關係。
- 只有在你已經記清楚位置之後,才按下 Hide。這三個物件會消失,場景會變成被遮蓋的狀態,並套用該輪公開的偏轉與俯仰角度到鏡頭上。此時的視角看起來已經旋轉過了。
- 檢視四張選項卡片。每張卡片顯示的都是同一個旋轉後座標系,但十字準星落在不同的投影螢幕位置上。
- 選出那張卡片,也就是你記住的世界座標點,經過新視角的透視投影之後,真正落點所在的那一張。
- 重複五輪。每一次正確的投影,都會獲得正好 200 分。五輪全部正確,就能得到固定的滿分 1,000 分。
這個介面不允許你跳過這個順序。一個被遮蓋的場景不會接受答案,而且 Hide 也不能在 Reveal 之前執行。答對一個非最終輪的問題之後,焦點會回到 Reveal,準備進入下一個場景。Restart 永遠會回到第一個被遮蓋的場景,分數歸零,也不會保留任何錯誤紀錄。
每一輪內部的幾何原理
回憶視角不是憑空猜測出來的。Spatial Memory Game 為每個場景儲存三個真實的世界座標點,套用一個繞垂直軸的偏轉矩陣,套用一個繞水平軸的俯仰矩陣,接著執行一個透視步驟,把旋轉後的 Z 座標當成深度來使用。這套慣例是右手座標系且是主動式的,因此是物件本身隨著鏡頭變化而旋轉,而不是鏡頭繞著一個固定的點旋轉。
這種矩陣形式,可以追溯到 Carnegie Mellon 關於 3D 軸旋轉的講義。Microsoft Learn 記載了用深度分母縮放旋轉後 X 與 Y 值的投影變換,而MDN reference for the perspective CSS function則獨立交叉核對了正負深度的行為,這一點很重要,因為離鏡頭較近的點,理應比位在相同 X 與 Y、但距離較遠的點顯得更大。
確切的投影公式為 screenX = 160 + rotatedX × 240 ÷ (320 − rotatedZ),以及 screenY = 110 − rotatedY × 240 ÷ (320 − rotatedZ),其中焦距為 240、鏡頭距離為 320,加上一個 320 乘 220 的可視區域,都是自訂的顯示參數。想了解它們的實際效果,可以取一個位於世界座標 (40, 20, −40) 的點,並套用一個 90° 的偏轉、不做俯仰。這個偏轉會讓這個點繞垂直軸旋轉,把 X 從 40 變成 −40,Y 維持在 20,Z 維持在 −40。當 rotatedZ = −40 時,分母變成 320 − (−40) = 360,因此 screenX = 160 + (−40 × 240) ÷ 360 = 160 − 26.67 = 133.33,screenY = 110 − (20 × 240) ÷ 360 = 110 − 13.33 = 96.67。這個原本位在場景右側的點,現在落在旋轉後畫面的左側,且在畫面中心的上方。
由此衍生出兩個結果。第一,每一次旋轉都會保留與原點之間的距離,因此被回憶的那個點,其幾何關係永遠不會漂移。第二,因為 Z 進入了分母,離鏡頭較近的點,在螢幕上會彼此拉開距離,而離鏡頭較遠的點則會被壓縮在一起。每一輪的四張候選卡片,都是從預先設計好的螢幕位置中挑選出來的,其中恰好有一張,落在投影目標 0.001 個螢幕單位的範圍之內。正式版本不會儲存任何正確索引,在選擇之前也不會透露任何語義上的答案標籤,因此正確答案,就是那張十字準星落在投影目標 0.001 個螢幕單位範圍之內的卡片。
計分、錯誤,以及通往 1,000 分的路線
每一次正確的投影,都會為你的分數正好增加 200 分。五輪全部正確,就能得到固定的滿分 1,000 分。如果你選錯了一個選項,第一次未命中並不會結束這場遊戲。同一輪中的一個不同的錯誤選項,可以在同一輪內修正,因為失敗特徵記錄結合的是輪次編號與顯示位置,而不是計算每一次錯誤點擊。重複選擇同一個未改變的錯誤選項,不會再增加一次錯誤。第二個不同的錯誤選項,則會結束這場遊戲,並凍結所有控制項。
一旦一場遊戲陷入死鎖,Reveal、Hide、游標移動,以及答案送出,就全部不再有反應。一個可讀取的終局狀態訊息會取得焦點,讓鍵盤使用者能讀到發生了什麼事,而 Restart 會讓遊戲回到第一個被遮蓋的場景,分數歸零,也不會保留任何錯誤紀錄。如果你的瀏覽器允許本機儲存,共用的遊戲外殼只會在該裝置上記住已完成的最佳分數。封鎖儲存空間,只會移除這項便利功能,不會改變任何幾何運算或任何答案。
操作方式、隱私,以及這個工具不是什麼
指標裝置與觸控使用者,可以直接按下 Reveal、Hide,或任何一張選項卡片。鍵盤使用者可以用 Tab 鍵移進選項群組,在其二乘二的版面配置中使用方向鍵移動,再按下 Enter 或 Space 選取。動態焦點機制,會讓實際取得焦點的按鈕、可見的焦點外框,以及邏輯上的游標保持一致,因此下一步動作永遠可以預期。頁面首次載入時,永遠不會搶走焦點,這對於在任務進行到一半才進入頁面的螢幕報讀軟體使用者而言很重要。被標記的揭示物件,會揭露它精確的 X、Y、Z 世界座標,而每張可見的候選卡片,也會揭露它精確的螢幕 x 座標(滿分 320 中的位置)與螢幕 y 座標(滿分 220 中的位置)。這些描述,提供了精確的語義對應資訊,但不會標示正確與否。
Spatial Memory Game 是一項娛樂活動,不是一種量測工具。這五個固定、經過設計的場景,並未經過常模化、校準、自適應調整,也無法在不同人之間互相比較。畫面尺寸、輸入方式、對透視繪圖的熟悉程度,以及日常的分心因素,都可能影響單一次遊玩場次,但這些都不能支持任何關於記憶力、智力、空間能力、注意力、就學準備度,或職業適任性的結論。
一切都在本機執行。這款遊戲以 React 與 SVG 打造,從不使用 WebGL,從不檢視裝置方向,從不存取相機,從不讀取動作感測硬體,從不呼叫任何 API,也從不上傳任何座標資訊。不需要建立帳號,不需要安裝任何套件,也沒有隨機場景產生器。這套幾何運算是完全確定性的。
想深入了解,請參閱Brick Builder Studio Rules: 5 Milestones to 1,000 Points。
想深入了解,請參閱Change Blindness Test for Beginners: Your First 5 Rounds。