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

93 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 模拟游戏:应用设计模式
## 作业概述
运用你新学的设计模式知识,创建一个简单的游戏原型!本作业将帮助你练习架构模式(继承或组合)以及本课中介绍的发布/订阅通信系统。
## 说明
创建一个简单的游戏表示,展示本课的设计模式。你的游戏应当是可运行的,但不需要复杂的图形——重点放在底层架构和通信模式上。
### 要求
**选择你的架构模式:**
- **选项 A**:使用基于类的继承(如 `GameObject``Movable``Hero` 示例)
- **选项 B**:使用组合(如带混合行为的工厂函数方法)
**实现通信:**
- **包含** 一个 `EventEmitter` 类用于发布/订阅消息
- **设置** 至少 2-3 种不同的消息类型(如 `PLAYER_MOVE`、`ENEMY_SPAWN`、`SCORE_UPDATE`
- **将** 用户输入(键盘/鼠标)通过事件系统连接到游戏事件
**游戏元素包括:**
- 至少一个玩家控制的角色
- 至少一个其他游戏对象(敌人、可收集物或环境元素)
- 对象之间的基本交互(碰撞、收集或通信)
### 推荐游戏思路
**可参考的简单游戏:**
- **贪吃蛇游戏** —— 蛇身节段跟随蛇头,食物随机生成
- **乒乓球变体** —— 球拍响应输入,球在墙壁反弹
- **收集者游戏** —— 玩家移动收集物品同时避开障碍
- **塔防基础** —— 塔检测并射击移动敌人
### 代码结构指导
```javascript
// 示例起始结构
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 | 代码一般组织良好,有足够注释 | 代码可用但缺乏组织或注释 |
**加分项:**
- **有创造性的游戏机制**,展示设计模式的有趣用法
- **多种输入方式**(键盘及鼠标事件)
- **可扩展架构**,便于未来增加新功能
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**
本文件由AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)翻译而成。尽管我们力求准确,但请注意自动翻译可能包含错误或不准确之处。原始文件的原文版本应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或错误解释承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->