Cieľom cvičenia je pochopiť tieto pojmy z OOP:
Vytvorte hru, v ktorej budú proti sebe bojovať 2 hráči. Hráč si môže vybrať charakter postavy (Knight, Barbarian, Ranger ). Jedná sa o ťahovú hru, tzn. v každej iterácii sa program spýta hráča či chce zaútočiť zbraňou alebo špeciálnou schopnosťou danou povahou postavy. Existujú 3 typy zbraní, ktoré sú určené pre jednotlivé postavy (Sword, Axe, Bow, v tomto poradí). Každá postava vie blokovať útok protivníka na základe svojich vlastností (atribútov).
Vytvorte triedu Player, ktorá reprezentuje 1 hráča. Táto trieda obsahuje generický typ Weapon. Každý hráč musí mať name, health a weapon. Zaručte, aby nemohol existovať hráč bez zadanej hodnoty atribútu name. Zaručte, aby Knight mohol používať iba zbraň Sword, Barbarian zbraň Axe a Ranger iba zbraň Bow.
Vytvorte triedu Weapon, ktorá bude mať abstraktnú metódu getDamage(). Každý typ zbrane musí mať inú implementáciu getDamage() v závislosti od atribútov typu zbrane. Každá zbraň musí mať nejaké atribúty, na základe ktorých sa vypočíta poškodenie. Napr. Bow môže mať počet výstrelov za minútu a rýchlosť vystreleného šípu. Poškodenie getDamage() sa vypočíta ako súčin týchto atribútov.
Pravidlá pre útok zbraňou:
Sila útoku = poškodenie zbraňou zmenšené o schopnosť blokovania útoku druhého hráča.
Health= Health – player1.damage*(1-player2.block())
Každá postava má iný typ blokovania (pravdepodobnosť, že sa útočník netrafí). Knight má veľkosť blokovania 0.2, Barbarian má náhodnú veľkosť bloku medzi 0.1 – 0.2 a Ranger nevie blokovať útok, t.j. blok=0:
Pravidlá pre útok špeciálnou schopnosťou:
Tento útok si môžete prispôsobiť podľa vlastnej predstavivosti. Napr. keďže Ranger nevie blokovať útok, tak pri aplikovaní útoku špeciálnou schopnosťou bude mať v nasledujúcom útoku 2-násobné poškodenie protivníka. Knight by mohol mať napr. v nasledujúcom útoku zväčšenú pravdepodobnosť blokovania útoku. Barbarian môže mať po aplikovaní špeciálneho útoku schopnosť zaútočiť v jednom ťahu 2-krát.