5.3 KiB
Vytvořte hru: Použití návrhových vzorů
Přehled úkolu
Využijte své nové znalosti návrhových vzorů k vytvoření jednoduchého prototypu hry! Tento úkol vám pomůže procvičit jak architektonické vzory (dědičnost nebo kompozici), tak systém komunikace pub/sub, o kterém jste se dozvěděli v lekci.
Pokyny
Vytvořte jednoduchou reprezentaci hry, která demonstruje návrhové vzory z této lekce. Vaše hra by měla být funkční, ale nemusí obsahovat složitou grafiku – zaměřte se na základní architekturu a komunikační vzory.
Požadavky
Vyberte si architektonický vzor:
- Možnost A: Použijte dědičnost založenou na třídách (například
GameObject→Movable→Hero) - Možnost B: Použijte kompozici (například přístup s tovární funkcí a smíšenými chováními)
Implementujte komunikaci:
- Zahrňte třídu
EventEmitterpro zasílání zpráv pomocí pub/sub systému - Nastavte alespoň 2-3 různé typy zpráv (například
PLAYER_MOVE,ENEMY_SPAWN,SCORE_UPDATE) - Propojte uživatelský vstup (klávesnice/myš) s herními událostmi prostřednictvím systému událostí
Herní prvky, které je třeba zahrnout:
- Alespoň jednu postavu ovládanou hráčem
- Alespoň jeden další herní objekt (nepřítel, sběratelský předmět nebo prvek prostředí)
- Základní interakci mezi objekty (kolize, sběr nebo komunikace)
Návrhy na hry
Jednoduché hry, které můžete zvážit:
- Hra Snake – Segmenty hada následují hlavu, jídlo se objevuje náhodně
- Variace Pongu – Pálka reaguje na vstup, míček se odráží od stěn
- Sběratelská hra – Hráč se pohybuje a sbírá předměty, zatímco se vyhýbá překážkám
- Základy Tower Defense – Věže detekují a střílí na pohybující se nepřátele
Pokyny ke struktuře kódu
// 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 */ }
Testování vaší implementace
Ověřte, že váš kód funguje:
- Testováním, zda se objekty pohybují nebo mění při spuštění událostí
- Potvrzením, že více objektů může reagovat na stejnou událost
- Kontrolou, že můžete přidávat nové chování bez úprav stávajícího kódu
- Zajištěním, že vstup z klávesnice/myši správně spouští herní události
Pokyny k odevzdání
Vaše odevzdání by mělo zahrnovat:
- JavaScript soubor(y) s vaší implementací hry
- HTML soubor pro spuštění a testování vaší hry (může být jednoduchý)
- Komentáře, které vysvětlují, jaký vzor jste si vybrali a proč
- Stručnou dokumentaci vašich typů zpráv a jejich funkcí
Hodnotící kritéria
| Kritérium | Vynikající (3 body) | Dostatečné (2 body) | Potřebuje zlepšení (1 bod) |
|---|---|---|---|
| Architektonický vzor | Správně implementuje buď dědičnost NEBO kompozici s jasnou hierarchií tříd/objektů | Používá zvolený vzor s drobnými problémy nebo nekonzistencemi | Pokouší se použít vzor, ale implementace má významné problémy |
| Implementace pub/sub | EventEmitter funguje správně s více typy zpráv a správným tokem událostí | Základní systém pub/sub funguje s některým zpracováním událostí | Systém událostí je přítomen, ale nefunguje spolehlivě |
| Funkčnost hry | Tři nebo více interaktivních prvků, které komunikují prostřednictvím událostí | Dva interaktivní prvky se základní komunikací událostí | Jeden prvek reaguje na události nebo základní interakci |
| Kvalita kódu | Čistý, dobře komentovaný kód s logickou organizací a moderním JavaScriptem | Obecně dobře organizovaný kód s dostatečnými komentáři | Kód funguje, ale postrádá organizaci nebo jasné komentáře |
Bonusové body:
- Kreativní herní mechaniky, které ukazují zajímavé využití vzorů
- Více vstupních metod (události z klávesnice I myši)
- Škálovatelná architektura, kterou by bylo snadné rozšířit o nové funkce
Prohlášení:
Tento dokument byl přeložen pomocí služby AI pro překlady Co-op Translator. Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.