8.1 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. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.