def przerwa(n):
    print("\n" * n)
"""
class Zwierze():
    def __init__(self, wiek, imie):
        self.wiek = wiek
        self.imie = imie
    
    def wydajDzwiek(self):
        print(f"{self.imie} wydaje dzwiek")
    
    def jedz(self):
        print(f"{self.imie} je")


Zwierz1 = Zwierze(2, "zwierze")

Zwierz1.wydajDzwiek()
Zwierz1.jedz()

przerwa(2)

class Pies(Zwierze):
    def __init__(self, wiek, imie, rasa):
        super().__init__(wiek, imie)
        self.rasa = rasa

    def wypiszRase(self):
        print(f"{self.imie} jest rasy {self.rasa}")

pies1 = Pies(5, "Yoshi", "Samojed")

pies1.wydajDzwiek()
pies1.jedz()
pies1.wypiszRase()

przerwa(2)

class Ptak(Zwierze):
    def __init__(self, wiek, imie):
        super().__init__(wiek, imie)
    
    def lec(self):
        print(f"{self.imie} lata")

class Orzel(Ptak):
    def __init__(self, wiek, imie):
        super().__init__(wiek, imie)
    
    def poluj(self):
        print(f"{self.imie} poluje")
    

ptak1 = Ptak(1.5, "ptok")

ptak1.wydajDzwiek()
ptak1.jedz()
ptak1.lec()

przerwa(2)

orzel1 = Orzel(2, "oral")

orzel1.wydajDzwiek()
orzel1.jedz()
orzel1.lec()
orzel1.poluj()
"""

class Hero():
    def __init__(self, name, _hp, atk_dmg, _def):
        self.name = name
        self._hp = _hp
        self.atk_dmg = atk_dmg
        self._def = _def
    
    def is_alive(self):
        if self._hp > 0:
            return True
        return False
    
    def take_demage(self, amount):
        self._hp -= (amount - self._def)
        print(f"{self.imie} stracil {amount}hp ma teraz {self._hp} zrowia")
        if self.hp < 0:
            self._hp = 0
    
    def attack(self, other):
        if other.is_alive():
            if self.is_alive():
                other.take_demage(self.atk_dmg)
            else:
                print("te martwe cialo nie bedzie atakowac")
        else:
            print("przeciwnik nie zyje nie torturuj martwych")
    
    def opis(self):
        print(f"{self.imie} ma obecie {self._hp}, jego atak zadaje {self.atk_dmg}hp i jego obroa to {self._def}")


class Knight(Hero):
     
    def __init__(self, name, _hp, atk_dmg, _def):
        super().__init__(name, _hp, atk_dmg, _def)
    
    def heal(self):
        self._hp += 20
        print(f"{self.imie} uleczyl sie za 20hp ma teraz {self._hp} zrowia")

class Wizard(Hero):
    
    def __init__(self, name, _hp, atk_dmg, _def, mana):
        super().__init__(name, _hp, atk_dmg, _def)
        self.mana = mana

    def cast_spell(self, other):
        if self.mana > 10:
            other.take_demage(self.atk_dmg*2)
            mana -= 10
        else:
            print(f"{self.imie} nie ma wystarczajaco many")
    
    def mana_refil(self):
        self.mana += 20
        print(f"{self.imie} uzyl mana refil wiec ma teraz {self.mana}mp")

class Archer(Hero):

    def __init__(self, name, _hp, atk_dmg, _def, arrows):
        super().__init__(name, _hp, atk_dmg, _def)
        self.arrows = arrows
    
    def arrow_refil(self):
        self.arrows += 3
        print(f"{self.imie} pozbieral 3 strzaly")
    
    def strzal(self, other):
        if self.arrows > 0:
            self.arrows -= 1
            return other.take_demage(self.atk_dmg*2)
        else:
            print(f"{self.imie} nie mial wystarczajaco strzal")
            return other.take_demage(1)

