🏛️ 三個好朋友的木偶戲比喻 (架構解析)
在編輯程式碼之前,讓我們來了解這個遊戲在底層是如何運作的。它就像三個好朋友一起合作表演一場木偶戲:
+-------------------------------------------------------------+
| 1. 導演 (THE DIRECTOR) |
| (Angular) |
| * 渲染選單、愛心(生命值)、記分板與設定面板。 |
| * 顯示動物拼圖遊戲的 Emoji。 |
+------------------------------+------------------------------+
| (發送指令 / 事件)
v
+-------------------------------------------------------------+
| 2. 操偶師 (THE PUPPETEER) |
| (Phaser) |
| * 渲染街機畫面 (太空船、雷射光、方塊)。 |
| * 監聽鍵盤/滑鼠操作,並處理畫面震動特效。 |
+------------------------------+------------------------------+
| (回報計算結果)
v
+-------------------------------------------------------------+
| 3. 裁判 (THE REFEREE) |
| (Domain Logic) |
| * 檢查數學規則 (接到的答案對不對?)。 |
| * 套用物理步進,並檢查動態難度 (DDA) 參數。 |
+-------------------------------------------------------------+
- Angular 控制整體環境與 UI。
- Phaser 繪製遊戲圖形並捕捉玩家輸入。
- 純 TypeScript (Shared Domain 領域邏輯) 擔任裁判,檢查正確答案並設定遊戲難度。
🧠 案例研究:動態難度調整 (DDA)
遊戲的難度不是隨機的。它會即時監控你的遊玩狀態。讓我們看看實際寫在 packages/shared/src/domain/dda.ts 的 DDA 程式碼邏輯:
心率與測速器比喻:
- 滾動視窗 (Rolling Memory):
遊戲會儲存你最後 10 次的作答紀錄,藉此計算你的精準率 (Accuracy Rate):精準率 = (過去 10 次中答對的次數) / 10 - 疲勞偵測 (Fatigue Detection):
遊戲會觀察你最後 4 次的作答。如果你答錯,或者你的平均反應時間慢於 3.5 秒 (slowReactionThresholdMs),裁判就會標記你「已疲勞」(fatigueDetected = true)。 - 調整速度:
- 如果你被標記為已疲勞,或你的精準率低於 75%,遊戲會變慢:
新等級 = 目前難度等級 - 1 - 如果你表現極佳 (精準率高於 80%) 且沒有疲勞,遊戲會變快:
新等級 = 目前難度等級 + 1
- 如果你被標記為已疲勞,或你的精準率低於 75%,遊戲會變慢:
- 對遊戲的影響:
難度等級會直接影響三件事:speedMultiplier:方塊掉落的速度。decoyCount:正確方塊旁邊會伴隨掉落多少個錯誤方塊。academicTier:產生的問題的複雜度。
🔄 IDE 工作流程步驟
- 開啟 Antigravity IDE:在工作區中開啟專案資料夾。
- 聊天室語音提示:開啟 Antigravity Chat 面板,並點擊麥克風。
- 使用 "/grill-me" 開發前對齊協議:
對 Agent 說:"我想要自訂 Phaser 遊戲裡的玩家太空船,讓它看起來像一隻綠色的恐龍。但在你修改任何檔案之前,請先問我 3 個問題 (grill me),讓我們在設計上達成共識。" - 讓 Agent 運作:對齊完畢後,點擊 Approve (核准) 接受 Agent 提議的計畫。看著 Agent 自動修改檔案 (例如
play-scene.ts)。 - 執行遊戲:開啟整合終端機,執行
pnpm dev。在預覽視窗中遊玩遊戲!
📝 家庭作業與練習
家庭作業 1:調整疲勞敏感度
開啟 dda.ts。請 Agent 將 slowReactionThresholdMs 從 3500 (3.5秒) 修改為 2000 (2秒)。
目標:遊玩測試遊戲。如果你只猶豫了 2 秒鐘會發生什麼事?遊戲是不是降速得更快了?向父母解釋你的發現。
家庭作業 2:連線記分板樣式
在 IDE 中請 Agent 修改 Angular 的儀表板記分板樣式(位於 game-host.css)。將背景改為半透明黑色,並帶有霓虹發光效果(毛玻璃 Glassmorphism 風格)。
驗證:在 IDE 中執行 pnpm build,確保沒有觸發 CSS 容量預算警告或編譯錯誤。