You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/mo/6-space-game/1-introduction/assignment.md

4.3 KiB

模擬遊戲:應用設計模式

作業概述

運用您新學到的設計模式知識,創建一個簡單的遊戲原型!這項作業將幫助您練習架構模式(繼承或組合)以及課程中學到的發布/訂閱通信系統。

指導說明

創建一個簡單的遊戲表示,展示本課程中的設計模式。您的遊戲應該是功能性的,但不需要複雜的圖形——重點在於底層架構和通信模式。

要求

選擇您的架構模式:

  • 選項 A:使用基於類的繼承(例如 GameObjectMovableHero 的例子)
  • 選項 B:使用組合(例如使用混合行為的工廠函數方法)

實現通信:

  • 包含一個 EventEmitter 類,用於發布/訂閱消息
  • 設置至少 2-3 種不同的消息類型(例如 PLAYER_MOVEENEMY_SPAWNSCORE_UPDATE
  • 連接用戶輸入(鍵盤/鼠標)到通過事件系統的遊戲事件

遊戲元素需包含:

  • 至少一個玩家控制的角色
  • 至少一個其他遊戲物件(敵人、可收集物品或環境元素)
  • 物件之間的基本交互(碰撞、收集或通信)

建議的遊戲想法

可考慮的簡單遊戲:

  • 貪吃蛇遊戲——蛇的身體跟隨蛇頭移動,食物隨機生成
  • 乒乓球變體——球拍響應輸入,球在牆壁上反彈
  • 收集者遊戲——玩家四處移動收集物品,同時避開障礙物
  • 塔防基礎——塔檢測並射擊移動的敵人

程式碼結構指南

// 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 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵信息,建議使用專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或誤釋不承擔責任。