Загрузка данных


class Troll:
    def __init__(self, damage, health):
        self.damage = damage
        self.health = health

    def get_damage(self):
        return self.damage

    def get_health(self):
        return self.health


class Wanderer:
    def __init__(self, name, damage, health, k):
        self.name = name
        self.damage = damage
        self.health = health
        self.fragments = k

    def get_damage(self):
        return self.damage

    def get_health(self):
        return self.health

    def inc_fragments(self, value):
        self.fragments += value

    def get_fragments(self):
        return self.fragments


def game(wanderer, trolls):
    for troll in trolls:
        k = 0
        while troll.get_health() >= 1 and wanderer.get_health() >= 1:
            # Атака Странника
            print("Атака Странника!")
            troll.health -= wanderer.get_damage()
            if troll.health < 0:
                troll.health = 0
            print(f"Здоровье Тролля: {troll.get_health()}")
            k += 1

            if troll.get_health() < 1:
                break

            # Атака Тролля
            print("Атака Тролля!")
            wanderer.health -= troll.get_damage()
            print(f"Здоровье Странника: {wanderer.get_health()}")

            if wanderer.get_health() < 1:
                break

        # Завершение текущего боя
        print(f"Бой закончен! Странник нанёс {k} атак")

        if wanderer.get_health() < 1:
            print("Победил в бою Тролль!")
            print("Игра проиграна!")
            return False

        # Победа Странника в раунде
        h = wanderer.get_health()
        fragments_earned = (k * h) / 100000
        wanderer.inc_fragments(fragments_earned)
        print(f"Победил в бою Странник! + {fragments_earned}")

        # Проверка победы по фрагментам
        if wanderer.get_fragments() >= 1.0:
            print("Игра пройдена!")
            return True

    # Если тролли кончились, но целый фрагмент (>= 1.0) не собран
    print("Игра проиграна!")
    return False