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.
4.0 KiB
4.0 KiB
模拟游戏:应用设计模式
作业概述
运用你新学的设计模式知识,创建一个简单的游戏原型!本作业将帮助你练习架构模式(继承或组合)以及本课中介绍的发布/订阅通信系统。
说明
创建一个简单的游戏表示,展示本课的设计模式。你的游戏应当是可运行的,但不需要复杂的图形——重点放在底层架构和通信模式上。
要求
选择你的架构模式:
- 选项 A:使用基于类的继承(如
GameObject→Movable→Hero示例) - 选项 B:使用组合(如带混合行为的工厂函数方法)
实现通信:
- 包含 一个
EventEmitter类用于发布/订阅消息 - 设置 至少 2-3 种不同的消息类型(如
PLAYER_MOVE、ENEMY_SPAWN、SCORE_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 */ }
测试你的实现
验证代码运行方法:
- 测试 事件触发后对象是否移动或变化
- 确认 多个对象能响应同一事件
- 检查 可否在不修改已有代码前提下添加新行为
- 确保 键盘/鼠标输入能正确触发游戏事件
提交指南
你的提交应包含:
- 实现游戏的 JavaScript 文件
- 用于运行和测试游戏的 HTML 文件(可以简单)
- 说明你选择的设计模式及原因的 注释
- 简要说明你的消息类型及其作用的 文档
评分标准
| 评价标准 | 优秀(3分) | 合格(2分) | 需改进(1分) |
|---|---|---|---|
| 架构模式 | 正确实现继承或组合,具备清晰的类/对象层次 | 选用的模式基本正确,存在细微问题或不一致 | 尝试使用模式但实现有较大问题 |
| 发布/订阅实现 | EventEmitter 正确支持多消息类型和事件流 | 基础发布/订阅系统可用,但事件处理有限 | 实现了事件系统但不可靠 |
| 游戏功能 | 有三种及以上通过事件通信的交互元素 | 两种交互元素并实现基本事件通信 | 单一元素响应事件或基础交互 |
| 代码质量 | 代码整洁、有注释、组织合理,使用现代 JS | 代码一般组织良好,有足够注释 | 代码可用但缺乏组织或注释 |
加分项:
- 有创造性的游戏机制,展示设计模式的有趣用法
- 多种输入方式(键盘及鼠标事件)
- 可扩展架构,便于未来增加新功能
免责声明: 本文件由AI翻译服务Co-op Translator翻译而成。尽管我们力求准确,但请注意自动翻译可能包含错误或不准确之处。原始文件的原文版本应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或错误解释承担责任。