import random, time

class characters:
    def __init__(self, name, hp, atk):
        self.name = name
        self.hp = hp
        self.maxhp = hp
        self.attack_power = atk

    def is_alive(self): 

        return self.hp >  0

    def show(self):
        print(f"{self.name}: {self.hp}/{self.maxhp}")

    def attack(self, other):
        damage = random.randint(1,self.attack_power)
        other.hp -= damage
        print(f"{self.name} zadaje {other.name} {damage} obrażeń")
        other.show()
        time.sleep(0.5)

class hero(characters):
    def __init__(self, name,level=1):
        super().__init__(name, hp = 50, atk = 5)
        self.level = level
    def fight(self, character):
        while self.is_alive() and character.is_alive():
            self.attack(character)
            if character.is_alive():
                character.attack(self)

class Player(hero):
    def __init__(self, name):
        super().__init__(name, level=1)
        self.exp = 0
        self.inventory = []
    def gain_exp(self,amount):
        self.exp += amount
        if self.exp >= self.level * 10:
            self.level_up()
    def level_up(self):
        self.level += 1
        self.exp = 0
        self.maxhp += 5
        self.attack_power += 1
        self.hp = self.maxhp
        print(f"{self.name} uzyskuje poziom {self.level}")

    def fight(self,character):
        super().fight(character)
        if self.is_alive():
            self.gain_exp(character.exp_reward)
            print(f"{self.name} zdobywa {character.exp_reward} EXP!!!!")
        else:
            print(f"{self.name} przegrał")
class monster(characters):
    def __init__(self, name, hp, atk,exp_reward):
        super().__init__(name, hp, atk)
        self.exp_reward = exp_reward

class goblin(monster):
    def __init__(self):
        super().__init__("Goblin", hp = 15, atk = 4, exp_reward= 5)

class orc(monster):
    def __init__(self):
        super().__init__("Orc", hp = 35, atk = 6, exp_reward= 10)

class semilligellimellion(monster):
    def __init__(self):
        super().__init__("Semilligellimellion", hp = 1, atk = 10000000000, exp_reward= 0)





