# 模擬遊戲:應用設計模式 ## 作業概述 運用您新學到的設計模式知識,創建一個簡單的遊戲原型!這項作業將幫助您練習架構模式(繼承或組合)以及課程中學到的發布/訂閱通信系統。 ## 指導說明 創建一個簡單的遊戲表示,展示本課程中的設計模式。您的遊戲應該是功能性的,但不需要複雜的圖形——重點在於底層架構和通信模式。 ### 要求 **選擇您的架構模式:** - **選項 A**:使用基於類的繼承(例如 `GameObject` → `Movable` → `Hero` 的例子) - **選項 B**:使用組合(例如使用混合行為的工廠函數方法) **實現通信:** - **包含**一個 `EventEmitter` 類,用於發布/訂閱消息 - **設置**至少 2-3 種不同的消息類型(例如 `PLAYER_MOVE`、`ENEMY_SPAWN`、`SCORE_UPDATE`) - **連接**用戶輸入(鍵盤/鼠標)到通過事件系統的遊戲事件 **遊戲元素需包含:** - 至少一個玩家控制的角色 - 至少一個其他遊戲物件(敵人、可收集物品或環境元素) - 物件之間的基本交互(碰撞、收集或通信) ### 建議的遊戲想法 **可考慮的簡單遊戲:** - **貪吃蛇遊戲**——蛇的身體跟隨蛇頭移動,食物隨機生成 - **乒乓球變體**——球拍響應輸入,球在牆壁上反彈 - **收集者遊戲**——玩家四處移動收集物品,同時避開障礙物 - **塔防基礎**——塔檢測並射擊移動的敵人 ### 程式碼結構指南 ```javascript // Example starting structure const Messages = { // Define your game messages here }; class EventEmitter { // Your event system implementation } // Choose either class-based OR composition approach // Class-based example: class GameObject { /* base properties */ } class Player extends GameObject { /* player-specific behavior */ } // OR Composition example: const gameObject = { /* base properties */ }; const movable = { /* movement behavior */ }; function createPlayer() { /* combine behaviors */ } ``` ### 測試您的實現 **驗證您的程式碼是否有效:** - **測試**物件在事件觸發時是否移動或改變 - **確認**多個物件是否能響應同一事件 - **檢查**是否可以在不修改現有程式碼的情況下添加新行為 - **確保**鍵盤/鼠標輸入能正確觸發遊戲事件 ## 提交指南 **您的提交應包括:** 1. **JavaScript 文件**,包含您的遊戲實現 2. **HTML 文件**,用於運行和測試您的遊戲(可以很簡單) 3. **註解**,解釋您選擇的模式及原因 4. **簡要文檔**,描述您的消息類型及其功能 ## 評分標準 | 評分標準 | 優秀 (3 分) | 合格 (2 分) | 需改進 (1 分) | |----------|-------------|-------------|----------------| | **架構模式** | 正確實現繼承或組合,具有清晰的類/物件層次結構 | 使用選擇的模式,但有輕微問題或不一致 | 嘗試使用模式,但實現存在重大問題 | | **發布/訂閱實現** | EventEmitter 正常運作,具有多種消息類型和正確的事件流 | 基本的發布/訂閱系統運作,但事件處理有些問題 | 存在事件系統,但運作不可靠 | | **遊戲功能** | 三個或以上的互動元素通過事件進行通信 | 兩個互動元素具有基本事件通信 | 一個元素響應事件或基本交互 | | **程式碼質量** | 乾淨、註解清晰的程式碼,邏輯組織良好,使用現代 JavaScript | 程式碼組織良好,註解足夠 | 程式碼可運行,但缺乏組織或清晰註解 | **加分項目:** - **創意遊戲機制**,展示設計模式的有趣應用 - **多種輸入方式**(鍵盤和鼠標事件) - **可擴展的架構**,易於添加新功能 --- **免責聲明**: 本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或誤釋不承擔責任。