Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

public:pb161:fall14_cviko05 [2014/10/13 09:30]
Lukáš Ručka vytvořeno
public:pb161:fall14_cviko05 [2018/02/24 19:10]
Řádek 1: Řádek 1:
-====== Cvičení 05 - ZORK ====== 
-===== Úvod do cvičení ===== 
-Na dnešním cvičení budete mít za úkol připravit si základ kostry pro třetí domácí úlohu a nacvičit si na ní práci s proudy. Aby to bylo o něco zajímavější,​ budete psát základ serveru jednoduché interaktivní počítačové hry. 
- 
-===== První úkol ===== 
-V každé druhé hře máte nějaké protivníky. V této budete bojovat s různou havětí, zejména troly a pavouky. Pro začátek tedy začněte vytvořením nepřátel (-ských datových typů). 
- 
-==== Zadání úkolu ==== 
-Vhodnou objektovou hierarchií reprezentujte dva druhy monster: pavouka a trola. Každé monstrum má svůj zdravotní stav (integer; <= max. zdraví), maximální zdraví (100-255) a jméno. Každá příšera přichází na svět buď zdravá jako řípa, nebo s explicitně uvedeným zdravím a maximálním zdravím. V každém případě je potřeba monstrum nějak pojmenovat. 
- 
-<​html><​ol><​li class="​level1"><​div class="​li">​Implementujte nad každým monstrem operátor&​lt;&​lt;​ (1. argument std::​ostream &amp;; 2. argument monstrum), který na obrazovku vypíše rasu každého monstra, jeho jméno a počet životů. Formát výpisu je uveden v uvozovkách "&​lt;​rasa&​gt;&​lt;​mezera&​gt;&​lt;"&​gt;&​lt;​jméno&​gt;&​lt;"&​gt;&​lt;​mezera&​gt;&​lt;​současné zdraví&​gt;&​lt;​mezera&​gt;/&​lt;​počáteční zdraví&​gt;"​.<​div class="​notetip">​Tip:​ operátor&​lt;&​lt;​ jako samostatná funkce, pomocná virtuální metoda print(std::​ostream &​amp;​);<​br /> 
-Všimněte si, že součástí výpisu není znak nového řádku. Za každým vypsaným řetězcem/​číslem také řádkujete až když se Vám zachce.</​div>​ 
-</​div></​li><​li class="​level1"><​div class="​li">​ 
-Nad společným předkem monster implementujte operátor&​gt;&​gt;​ (1. argument std::​istream &amp;; 2. argument reference na monstrum (supertřída)). Tento operátor nastaví jméno, zdraví a maximální zdraví monstra. Formát je identický s formátem výstupu vyjma úvodního rozlišení rasy a následující mezery. Vstup vždy načítejte jako celý řádek, teprve pak jej parsujte. Předpokládejte korektní vstup. Jméno je obaleno uvozovkami jak na výstupu, tak na vstupu. 
-<div class="​notetip">​ 
-Tip: std::​getline,​ std::​stringstream,​ std::​string::​find_first_of std::​string::​find_last_of;​ 
-</​div>​ 
-</​div></​li></​ol></​html>​ 
-Ukázka výstupu: 
-<code C> 
-spider odula("​Odula",​ 53, 271); 
-troll brick("​Brick"​);​ 
- 
-std::cout << odula << std::endl; 
-std::cout << brick << std::endl; 
--------------------------------- 
-spider "​Odula"​ 53 / 271 
-troll "​Brick"​ 100 / 100 
-</​code>​ 
- 
-Ukázka vstupu, který očekává operátor>>:​ 
-<​code>​ 
-"​Cihla"​ 45 / 170 
-</​code>​ 
- 
-Zajistěte, aby se při následujícím volání vždy vytiskl správný výstup: 
-<code C> 
-Troll brick; 
-cout << "​vytvorte trola: "; 
-cin >> brick; 
-Monster & m = brick; 
-cout << m << endl; 
--------------------- 
-vytvorte trola: "​Cihla"​ 45 / 170 
-troll "​Cihla"​ 45 / 170 
-</​code>​ 
- 
-===== Druhý úkol ===== 
-Nepřítele máme, co s ním? Zabít! A k tomu jsou potřeba zbraně... 
- 
-==== Zadání úkolu ==== 
-Vhodnou objektovou hierarchií dále reprezentujte dva druhy zbraní: sekeru a meč. Útočnou sílu zbraně reprezentujte jako celé číslo, každý druh zbraně je jinak efektivní na různé druhy nepřátel. 
- 
-Tabulka vah útoků a akcí 
-^ Monstrum/​Zbraň ^ Axe ^ Sword ^ 
-| Spider | 0,2 | 0,4 | 
-| Troll | Akce Z | 0,7 | 
- 
-Akce Z: Když je troll zasažen sekerou, způsobí mu to ztrátu paměti a zapomene jak se jmenuje. Protože by ale pak neměl žádné jméno, nastaví se mu jako jméno jeho současné zdraví (formát: '<​aktuální><​mezera>/<​mezera><​maximální>'​). A také ztratí 0,6 *<síla zbraně> životů. 
- 
-<note tip> 
-Tip: virtuální metoda getDamage(MonsterEnum);​ pomocný enum; virtuální metoda receiveAttack + 2. pomocný enum; std::​stringstream 
-</​note>​ 
- 
-Kód a výstup: 
-<code C> 
-    Troll brick("​Cihla",​ 181, 181); 
-    Spider odula("​Odula",​ 71, 100); 
- 
-    Axe a(40); 
-    Sword s(40); 
- 
-    std::cout << "​pocatecni stavy: " << brick << " a " << odula << endl; 
- 
-    brick.receiveAttack(&​a,​ AXE); 
-    odula.receiveAttack(&​a,​ AXE); 
- 
-    std::cout << "po utoku sekerou: " << brick << " a " << odula << endl; 
- 
-    brick.receiveAttack(&​s,​ SWORD); 
-    odula.receiveAttack(&​s,​ SWORD); 
- 
-    std::cout << "po utoku mecem: " << brick << " a " << odula << endl; 
--------------------------------------------------------------- 
-pocatecni stavy: troll "​Cihla"​ 181 / 181 a spider "​Odula"​ 71 / 100 
-po utoku sekerou: troll "181 / 181" 157 / 181 a spider "​Odula"​ 63 / 100 
-po utoku mecem: troll "181 / 181" 129 / 181 a spider "​Odula"​ 47 / 100 
-</​code>​ 
-===== Třetí úkol ===== 
-Kde jsou ty zlaté časy kdy bylo umění projet hru bez jediného načtení a neustálého automatického ukládání... když si to ale trh žádá - máte za úkol načíst a uložit monstra do souboru. 
- 
-==== Zadání úkolu ==== 
-[[http://​www.organovabanka.cz/​cs/​vyuka/​PB161/​podzim2014/​05_in_monsters.txt|Zde]] si stáhněte soupisku nepřátel k načtení. 
- 
-  - Programově otevřete výstupní soubor, do kterého budete ukládat slabá monstra. 
-  - Stažený soubor v programu otevřete a postupně načítejte všechny řádky. ​ 
-  - Na každém řádku se nejprve podívejte na typ monstra, které budete načítat; následně toto monstrum vytvořte se správným typem. 
-  - Monstrum načtěte. 
-  - Pokud má monstrum zdraví menší než 60, uložte jej do souboru se slabými monstry. 
- 
-<note tip> 
-Tip: std::​getline,​ std::​stringstream,​ std::​fstream 
-</​note>​ 
- 
-===== Vzorové řešení ===== 
-Referenční řešení všech 3 úloh najdete na adrese [[http://​www.organovabanka.cz/​cs/​vyuka/​PB161/​podzim2014/​referencni_cv05.tar.gz]]. 
  
QR Code
QR Code public:pb161:fall14_cviko05 (generated for current page)