|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "c8fc39a014d08247c082878122e2ba73",
|
|
|
"translation_date": "2025-10-24T21:12:13+00:00",
|
|
|
"source_file": "6-space-game/1-introduction/assignment.md",
|
|
|
"language_code": "cs"
|
|
|
}
|
|
|
-->
|
|
|
# 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 `EventEmitter` pro 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
|
|
|
|
|
|
```javascript
|
|
|
// 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:**
|
|
|
1. **JavaScript soubor(y)** s vaší implementací hry
|
|
|
2. **HTML soubor** pro spuštění a testování vaší hry (může být jednoduchý)
|
|
|
3. **Komentáře**, které vysvětlují, jaký vzor jste si vybrali a proč
|
|
|
4. **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](https://github.com/Azure/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. |