8.1 KiB
Направите игру: Примените дизајн шаблоне
Преглед задатка
Примените своје новостечено знање о дизајн шаблонима креирањем прототипа једноставне игре! Овај задатак ће вам помоћи да увежбате и архитектонске шаблоне (наслеђивање или композицију) и систем комуникације pub/sub који сте научили током лекције.
Упутства
Креирајте једноставну репрезентацију игре која демонстрира дизајн шаблоне из ове лекције. Ваша игра треба да буде функционална, али не мора да има сложену графику – фокусирајте се на основну архитектуру и комуникационе шаблоне.
Захтеви
Изаберите архитектонски шаблон:
- Опција А: Користите наслеђивање класа (као пример
GameObject→Movable→Hero) - Опција Б: Користите композицију (као приступ фабричке функције са мешаним понашањима)
Примените комуникацију:
- Укључите класу
EventEmitterза pub/sub поруке - Поставите најмање 2-3 различите врсте порука (као што су
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - Повежите кориснички унос (тастатура/миш) са догађајима у игри преко система догађаја
Елементи игре које треба укључити:
- Најмање један лик којим управља играч
- Најмање један други објекат у игри (непријатељ, предмет за сакупљање или елемент окружења)
- Основна интеракција између објеката (судар, сакупљање или комуникација)
Предложене идеје за игру
Једноставне игре које можете размотрити:
- Игра Змија – Сегменти змије прате главу, храна се насумично појављује
- Варијација Понга – Палка реагује на унос, лопта се одбија од зидова
- Игра сакупљања – Играч се креће и сакупља предмете док избегава препреке
- Основе одбране куле – Куле детектују и пуцају на покретне непријатеље
Смернице за структуру кода
// 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. Иако настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматизовани преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.