8.5 KiB
Создание игры: применение шаблонов проектирования
Обзор задания
Примените свои новые знания о шаблонах проектирования, создавая простой прототип игры! Это задание поможет вам попрактиковаться как в архитектурных шаблонах (наследование или композиция), так и в системе коммуникации pub/sub, о которой вы узнали на уроке.
Инструкции
Создайте простую игровую модель, демонстрирующую шаблоны проектирования из этого урока. Ваша игра должна быть функциональной, но не обязательно иметь сложную графику – сосредоточьтесь на архитектуре и коммуникационных шаблонах.
Требования
Выберите архитектурный шаблон:
- Вариант A: Используйте наследование классов (например,
GameObject→Movable→Hero) - Вариант B: Используйте композицию (например, подход с фабричной функцией и смешанными поведениями)
Реализуйте коммуникацию:
- Добавьте класс
EventEmitterдля системы pub/sub - Настройте как минимум 2-3 различных типа сообщений (например,
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - Свяжите пользовательский ввод (клавиатура/мышь) с игровыми событиями через систему событий
Элементы игры:
- Как минимум один персонаж, управляемый игроком
- Как минимум один другой игровой объект (враг, предмет для сбора или элемент окружения)
- Базовое взаимодействие между объектами (столкновение, сбор или коммуникация)
Идеи для игры
Простые игры, которые можно рассмотреть:
- Игра "Змейка" – сегменты змейки следуют за головой, еда появляется случайным образом
- Вариация "Понг" – ракетка реагирует на ввод, мяч отскакивает от стен
- Игра-сборщик – игрок перемещается, собирая предметы и избегая препятствий
- Основы Tower Defense – башни обнаруживают и стреляют в движущихся врагов
Рекомендации по структуре кода
// 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 */ }
Тестирование реализации
Убедитесь, что ваш код работает:
- Проверяя, что объекты перемещаются или изменяются при срабатывании событий
- Убеждаясь, что несколько объектов могут реагировать на одно и то же событие
- Проверяя, что можно добавлять новые поведения без изменения существующего кода
- Убеждаясь, что ввод с клавиатуры/мыши правильно вызывает игровые события
Руководство по сдаче задания
Ваше задание должно включать:
- Файл(ы) JavaScript с реализацией игры
- HTML-файл для запуска и тестирования игры (может быть простым)
- Комментарии, объясняющие, какой шаблон вы выбрали и почему
- Краткую документацию о типах сообщений и их функциях
Критерии оценки
| Критерий | Превосходно (3 балла) | Удовлетворительно (2 балла) | Требует улучшения (1 балл) |
|---|---|---|---|
| Архитектурный шаблон | Корректно реализует наследование ИЛИ композицию с четкой иерархией классов/объектов | Использует выбранный шаблон с небольшими проблемами или несоответствиями | Пытается использовать шаблон, но реализация имеет значительные проблемы |
| Реализация pub/sub | EventEmitter работает корректно с несколькими типами сообщений и правильным потоком событий | Базовая система pub/sub работает с некоторой обработкой событий | Система событий присутствует, но работает ненадежно |
| Функциональность игры | Три или более интерактивных элемента, которые взаимодействуют через события | Два интерактивных элемента с базовой коммуникацией через события | Один элемент реагирует на события или базовое взаимодействие |
| Качество кода | Чистый, хорошо прокомментированный код с логичной организацией и современным JavaScript | В целом хорошо организованный код с достаточным количеством комментариев | Код работает, но ему не хватает организации или четких комментариев |
Дополнительные баллы:
- Креативные игровые механики, демонстрирующие интересное использование шаблонов
- Несколько методов ввода (события клавиатуры И мыши)
- Масштабируемая архитектура, которую легко расширить новыми функциями
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.