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/zh-CN/6-space-game/1-introduction/assignment.md

4.0 KiB

模拟游戏:应用设计模式

作业概述

运用你新学的设计模式知识,创建一个简单的游戏原型!本作业将帮助你练习架构模式(继承或组合)以及本课中介绍的发布/订阅通信系统。

说明

创建一个简单的游戏表示,展示本课的设计模式。你的游戏应当是可运行的,但不需要复杂的图形——重点放在底层架构和通信模式上。

要求

选择你的架构模式:

  • 选项 A:使用基于类的继承(如 GameObjectMovableHero 示例)
  • 选项 B:使用组合(如带混合行为的工厂函数方法)

实现通信:

  • 包含 一个 EventEmitter 类用于发布/订阅消息
  • 设置 至少 2-3 种不同的消息类型(如 PLAYER_MOVEENEMY_SPAWNSCORE_UPDATE
  • 用户输入(键盘/鼠标)通过事件系统连接到游戏事件

游戏元素包括:

  • 至少一个玩家控制的角色
  • 至少一个其他游戏对象(敌人、可收集物或环境元素)
  • 对象之间的基本交互(碰撞、收集或通信)

推荐游戏思路

可参考的简单游戏:

  • 贪吃蛇游戏 —— 蛇身节段跟随蛇头,食物随机生成
  • 乒乓球变体 —— 球拍响应输入,球在墙壁反弹
  • 收集者游戏 —— 玩家移动收集物品同时避开障碍
  • 塔防基础 —— 塔检测并射击移动敌人

代码结构指导

// 示例起始结构
const Messages = {
  // 在这里定义你的游戏消息
};

class EventEmitter {
  // 你的事件系统实现
}

// 选择基于类或组合的方法
// 基于类的示例:
class GameObject { /* base properties */ }
class Player extends GameObject { /* player-specific behavior */ }

// 或组合的示例:
const gameObject = { /* base properties */ };
const movable = { /* movement behavior */ };
function createPlayer() { /* combine behaviors */ }

测试你的实现

验证代码运行方法:

  • 测试 事件触发后对象是否移动或变化
  • 确认 多个对象能响应同一事件
  • 检查 可否在不修改已有代码前提下添加新行为
  • 确保 键盘/鼠标输入能正确触发游戏事件

提交指南

你的提交应包含:

  1. 实现游戏的 JavaScript 文件
  2. 用于运行和测试游戏的 HTML 文件(可以简单)
  3. 说明你选择的设计模式及原因的 注释
  4. 简要说明你的消息类型及其作用的 文档

评分标准

评价标准 优秀3分 合格2分 需改进1分
架构模式 正确实现继承或组合,具备清晰的类/对象层次 选用的模式基本正确,存在细微问题或不一致 尝试使用模式但实现有较大问题
发布/订阅实现 EventEmitter 正确支持多消息类型和事件流 基础发布/订阅系统可用,但事件处理有限 实现了事件系统但不可靠
游戏功能 有三种及以上通过事件通信的交互元素 两种交互元素并实现基本事件通信 单一元素响应事件或基础交互
代码质量 代码整洁、有注释、组织合理,使用现代 JS 代码一般组织良好,有足够注释 代码可用但缺乏组织或注释

加分项:

  • 有创造性的游戏机制,展示设计模式的有趣用法
  • 多种输入方式(键盘及鼠标事件)
  • 可扩展架构,便于未来增加新功能

免责声明 本文件由AI翻译服务Co-op Translator翻译而成。尽管我们力求准确,但请注意自动翻译可能包含错误或不准确之处。原始文件的原文版本应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或错误解释承担责任。