Seminární skupina Stančík IB111 Úvod do programování

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
Každá trieda okrem metódy __init__ bude mať aj metódu __str__, ktorá vypíše info o danom objekte.

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.