802MathCity / skills.md
Lashtw's picture
Upload 102 files
dbd41db verified
# Skills & Best Practices - Math City Project
此文件記錄本專案開發過程中的技術規範、設計模式、教學設計哲學與除錯經驗,供後續開發參考。
## 1. 技術架構與規範 (Tech Stack & Guidelines)
### 核心技術
* **核心**: HTML5 Canvas + Vanilla JS (ES6+)。
* **樣式**: Tailwind CSS (CDN read-only 模式) + Custom CSS (for animations/glassmorphism)。
* **字體**: 'Orbitron' (數字符號/標題), 'Noto Sans TC' (中文內文)。
* **建置**: 無須 Build Tool (No Webpack/Vite),保持單檔可執行 (`.html`),方便老師分享與部署。
### 程式碼規範
* **語言**: 註解與文件說明嚴格使用**繁體中文**,變數與函數名稱使用**英文**
* **檔案結構**: 保持扁平,html 檔包含 CSS/JS 為主 (方便單檔攜帶),通用素材放 `Assets/`
* **狀態管理**: 使用整數常數定義狀態機 (`const STATE = { INIT: 0, PLAYING: 1 ... }`),避免字串混淆。
## 2. 視覺與互動設計 (UI/UX Patterns)
### 視覺風格:Glassmorphism (玻璃擬態)
* 背景使用 `backdrop-filter: blur(12px)` 搭配半透明深色背景 (`bg-slate-900/90`)。
* 邊框使用亮色且低透明度 (`border-cyan-500/30`) 營造科技質感。
* 善用 `box-shadow``drop-shadow` 營造霓虹發光效果。
### Canvas 渲染優化
* **High-DPI 支援**:
* 在 Retina 螢幕上,務必處理 `devicePixelRatio`
* Canvas 屬性寬高 = CSS 寬高 * dpr。
* Context 縮放: `ctx.scale(dpr, dpr)`
```javascript
const dpr = window.devicePixelRatio || 1;
canvas.width = width * dpr;
canvas.height = height * dpr;
canvas.style.width = width + 'px';
canvas.style.height = height + 'px';
ctx.scale(dpr, dpr);
```
### 行動裝置適配 (Mobile Adaptation)
* **禁止捲動/縮放**:
* CSS: `touch-action: none; user-select: none; -webkit-user-select: none;`
* JS: 監聽 `touchstart` / `touchmove` 並執行 `e.preventDefault()` (需加 `{ passive: false }`)。
* **虛擬鍵盤 (Virtual Keypad)**:
* iOS/Android 預設軟鍵盤會推擠版面,破壞全螢幕體驗。
* **解決方案**: 自製 DOM 虛擬鍵盤,支援拖曳 (Draggable) 與自動定位。
* **點擊穿透處理**: 鍵盤點擊事件需 `e.stopPropagation()`
## 3. 遊戲邏輯與物理 (Game Mechanics)
### 物理引擎 (Physics)
* **Coyote Time (土狼時間)**:
* 在玩家離開平台的一小段時間內 (例如 0.13秒) 仍允許跳躍,增加操作手感容錯率。
* 實作: 設置 `coyoteTimer`,只要在地上就重置,離地後遞減,大於 0 時仍視為可跳躍。
* **時間步長 (Time Step)**:
* 目前使用簡易的 `requestAnimationFrame` 迴圈。若需更精準物理,考慮導入 Delta Time (`dt`)。
### 遊戲反饋 (Juice & Feedback)
* **動畫選擇**:
* 錯誤提示避免使用滑稽的 `bounce`,改用嚴肅且有質感的 `pulse` (呼吸燈) + 紅色邊框。
* **音效合成 (Web Audio API)**:
* 不依賴外部 mp3 檔案,使用 `OscillatorNode` 即時合成音效 (Sine, Square, Sawtooth)。
* 優點:無載入時間、檔案極小、可動態改變頻率 (Pitch Bend)。
* **注意**: 必須使用者互動 (Click/Touch) 後才能 `resume()` AudioContext。
## 4. 數學教學設計 (Pedagogy Design)
### 鷹架理論 (Scaffolding)
* **不僅僅是給答案**: 錯誤訊息應轉化為引導問題。
* *Bad*: "答錯了!"
* *Good*: "如果 x=2, y=11, 但公式是 y=2x+b, 所以 b 是多少?"
* **變數分離**:
* 在解 $y=ax+b$ 時,先令 $x=0$ 解 $b$,再令 $x=1$ 解 $a$,避免同時處理雙變數的認知負荷。
### 視覺化連結 (Visual-Algebra Connection)
* **多重表徵連結**: 當計算出代數答案 (例如 y=35) 時,程式應同步強調圖表上的對應幾何點 (10, 35),強化「數形合一」的概念。
### 正向回饋 (Positive Feedback)
* 避免挫折感,將艱澀的計算任務後的獎勵極大化 (例如:華麗的煙火、Phase 6 的節奏遊戲),讓大腦獲得多巴胺釋放。
## 5. Agent 開發工作流 (Agent Workflow)
### 任務邊界 (Task Boundary)
* 使用 `task_boundary` 明確區分 **PLANNING** (規劃)、**EXECUTION** (執行) 與 **VERIFICATION** (驗證) 階段。
* **Context Management**: 保持對話專注,一個 Task 解決一個具體問題。
### Artifacts 使用
* **Implementation Plan**: 修改複雜邏輯前,先撰寫 `implementation_plan.md` 讓使用者確認設計思路。
* **Walkthrough**: 完成功能後,建立 `walkthrough.md` 展示成果與測試截圖。
## 6. 已知問題與解決 (Troubleshooting Log)
* **問題**: 平台消失後的透明牆導致玩家卡住。
* **解法**: 物理碰撞檢測時,需過濾掉 `active: false` 的平台物件。
* **問題**: Home 鍵在全螢幕模式下難以點擊。
* **解法**: 確保 UI 層級 (`z-index`) 正確,並添加 `pointer-events-auto` 到按鈕本身,而容器保持 `pointer-events-none`
* **問題**: 數列峽谷中,只有前兩項有提示,後續太難。
* **解法**: 設計意圖就是強制計算。但為了公平,統一了所有平台的視覺 (碎石紋理),避免玩家嘗試「辨色」而非「計算」。
---
*Created by Antigravity Team for Project 11402*