Exemple #1
0
def battle_fixed(player: Player, boss: Boss) -> bool:
    spell_list = [
        'Shield', 'Recharge', 'Poison', 'Drain', 'Recharge', 'Magic Missile',
        'Poison', 'Drain', 'Recharge', 'Magic Missile', 'Magic Missile',
        'Magic Missile', 'Shield', 'Drain', 'Drain', 'Poison', 'Drain'
    ]
    player_turn = True
    while player.hit_points > 0 and boss.hit_points > 0:
        print("-- Boss turn --") if not player_turn else print(
            "-- Player turn --")
        print(
            f"- Player has {player.hit_points} hit points, {player.armor} armor, "
            f"{player.mana} mana")
        print(f"- Boss has {boss.hit_points} hit points")

        apply_active_spells(player, boss)

        if player_turn:
            active_spells = [spell["name"] for spell in player.active_spells] + \
                            [spell["name"] for spell in boss.active_spells]
            # spell = player.cast_spell(active_spells)
            spell_name = spell_list.pop(0)
            for spell in player.get_spells():
                if spell['name'] == spell_name:
                    break

            if player.mana < spell["cost"]:
                print(f"Cannot cast spell, no mana left!")
                return False
            else:
                player.mana -= spell["cost"]
                player.mana_spent += spell["cost"]

            if spell["damage"]:
                if spell["turns"]:
                    print(f"Player casts {spell['name']}.")
                    boss.apply_spell(spell)
                else:
                    if spell["heals"]:
                        player.hit_points += spell["heals"]
                    print(f"Player casts {spell['name']}, "
                          f"dealing {spell['damage']} damage.")
                    boss.hit_points -= spell["damage"]
            else:
                print(f"Player casts {spell['name']}.")
                player.apply_spell(spell)
            player_turn = False
        else:
            damage_dealt = boss.damage - player.armor
            if damage_dealt <= 0:
                damage_dealt = 1
            player.hit_points -= damage_dealt
            print(f"Boss attacks for {damage_dealt} damage!")
            player_turn = True

    if player.hit_points <= 0:
        return False
    else:
        return True
Exemple #2
0
def battle(player: Player, boss: Boss) -> bool:
    player_turn = True
    while player.hit_points > 0 and boss.hit_points > 0:
        # print("-- Boss turn --") if not player_turn else print("-- Player turn --")
        # print(f"- Player has {player.hit_points} hit points, {player.armor} armor, "
        #       f"{player.mana} mana")
        # print(f"- Boss has {boss.hit_points} hit points")

        apply_active_spells(player, boss)

        if player_turn:
            active_spells = [spell["name"] for spell in player.active_spells] + \
                            [spell["name"] for spell in boss.active_spells]
            spell = player.cast_spell(active_spells)

            if player.mana < spell["cost"]:
                print(f"Cannot cast spell, no mana left!")
                return False
            else:
                player.mana -= spell["cost"]
                player.mana_spent += spell["cost"]

            if spell["damage"]:
                if spell["turns"]:
                    #print(f"Player casts {spell['name']}.")
                    boss.apply_spell(spell)
                else:
                    if spell["heals"]:
                        player.hit_points += spell["heals"]
                    #print(f"Player casts {spell['name']}, "
                    #      f"dealing {spell['damage']} damage.")
                    boss.hit_points -= spell["damage"]
            else:
                #print(f"Player casts {spell['name']}.")
                player.apply_spell(spell)
            player_turn = False
        else:
            damage_dealt = boss.damage - player.armor
            if damage_dealt <= 0:
                damage_dealt = 1
            player.hit_points -= damage_dealt
            #print(f"Boss attacks for {damage_dealt} damage!")
            player_turn = True

        player.boss_hp = boss.hit_points

    if player.hit_points <= 0:
        return False
    else:
        return True