5. domácí úloha
Súboj bytostí
Vytvorte hru, v ktorej zápasia dve bytosti/príšery. Na jednom počítači proti sebe hrajú dvaja hráči. Každý z nich ovláda jednu bytosť, ktorá použitím rôznych útokov zadaných z klávesnice útočí na tú druhú.
Program bude mať minimálne tri triedy:- Creature
- Attack
- Match
Attack
Attack bude mať nasledujúce atributy:- name - meno útoku
- strength - sila útoku. (Ak je útok úspešný, táto hodnota sa uberie zo života bytosti)
- energy - energia potrebná k vykonaniu útoku
- possibility - šanca, že útok bude úspešný, hodnota od (0, 1> 1 znamená, že útok bude úspešný vždy
Creature
Creature bude mať nasledujúce atributy:- name - meno bytosti
- health - aktuálny stav života
- max_health - maximálny možný život
- energy - stav energie
- attacks - zoznam možných útokov
Priebeh hry
Hru hrajú dvaja hráči, každý si vyberie jednu z ponúkaných bytostí. Hru začína náhodne jedna bytosť. Hráč vyberie jeden z ponúkaných útokov. Program vyhodnotí, či hráč môže útok uskutočniť. Ak áno, tak mu odoberie patričnú energiu. Následne sa vyhodnotí, či sa útok bude úspešný, teda zasiahne súpera. (náhoda rozhodne podľa pravdepodobnosti útoku). Ak je útok úspešný, odoberie súperovi patričné zdravie (podľa sily útoku). Hráčovi, ktorý neútočil, sa pridá 10% energie (viz metóda regenerate). Ak jeden z hráčov umrie, hra končí a oznámi sa víťaz. Hráči sa postupne striedajú v útokoch.
Metódy
Creature
def is_dead(self): if self.health <= 0: return True else return False def regenerate(self): self.energy *= 1.1 return True
Trieda Creature môže mať dalšie metódy attack(self, enemy), take_hit(self, strength)
Trieda Match môže mať metódu perform_round()pre odohranie jedného kola, ďalej print_state() pre výpis stavu zápasu, alebo begin()pre odštartovanie zápasu.
Príklad
>>> play() Health Energy Pikachu 200/200 120/120 Voldemort 180/180 140/140 +------------------------- Pikachu -------------------------+ Name Strength Posibility Energy 1 -- Tail slash 15 0.9 5 2 -- Static field 60 0.8 35 3 -- Lightning bolt 110 0.7 60 +-----------------------------------------------------------+ Choose the attack: 4 Choose the attack: -7 Choose the attack: 3 > Pikachu used Lightning bolt. > Voldemort was hit and lost 110 health! Health Energy Voldemort 70/180 140/140 Pikachu 200/200 60/120 +------------------------ Voldemort ------------------------+ Name Strength Posibility Energy 1 -- Inferno 70 0.75 40 2 -- Avada Kedavra 500 0.1 120 3 -- Evil look 5 0.9 5 +-----------------------------------------------------------+ Choose the attack: 1 > Voldemort used Inferno , but missed! Health Energy Pikachu 200/200 60/120 Voldemort 70/180 100/140 +------------------------- Pikachu -------------------------+ Name Strength Posibility Energy 1 -- Tail slash 15 0.9 5 2 -- Static field 80 0.8 35 3 -- Lightning bolt 110 0.7 60 +-----------------------------------------------------------+ Choose the attack: 2 > Pikachu used Static field. > Voldemort was hit and lost 70 health! Health Energy Voldemort 0/180 100/140 Pikachu 200/200 25/120 Pikachu won!
Úlohu prípadne rozšírte tak, aby druhým hráčom bol PC, ale zároveň spĺňal pravidlá (Nepoužíval útok, na ktorý nemá energiu a pod.)
Úlohu vypracujte do 12. 12. 2016 23:59 a odovzdajte do patričnej odovzdávárne.