Untitled

Anonymous
python
02/20/2026 5:38 PM
5.1 KB
22
Indexable
from random import *

class Character():
    def __init__(self, name, health, armor, power, new):
        self.name = name
        self.health = health
        self.armor = armor
        self.power = power
        self.new = True

    def print_info(self):
        print(self.name, "-> Health:", self.health, "| Armor:", self.armor, "| Power:", self.power)

    def check_alive(self):
        return self.health > 0

    def strike(self, enemy):
        enemy.armor -= self.power
        if enemy.armor < 0:
            enemy.health += enemy.armor
            enemy.armor = 0


class Warrior(Character):
    def hello(self):
        if self.new:
            print("-> A bandit warrior", self.name, "steps out from behind the trees!")
            self.new = False
        else:
            print(self.name, "returns to fight!")

    def attack(self, enemy):
        print(self.name, "attacks", enemy.name)
        self.strike(enemy)


class Dragon(Character):
    def hello(self):
        print("šŸ”„ FINAL BOSS! The mighty dragon", self.name, "descends from the sky!")

    def attack(self, enemy):
        print(self.name, "breathes fire at", enemy.name)
        self.strike(enemy)


class Knight(Character):
    def __init__(self, name, health, armor, power):
        super().__init__(name, health, armor, power)
        self.base_health = health
        self.base_armor = armor
        self.base_power = power
        self.level = 1

    def attack(self, enemy):
        print(self.name, "swings his sword at", enemy.name)
        self.strike(enemy)

    def level_up(self):
        self.level += 1
        print("\n✨", self.name, "reaches Level", self.level)

        # Increase BASE stats randomly
        self.base_health += randint(10, 20)
        self.base_armor += randint(10, 25)
        self.base_power += randint(5, 20)

        # Reset current stats to upgraded base stats
        self.health = self.base_health
        self.armor = self.base_armor
        self.power = self.base_power

        print("Stats increased from original values!")
        self.print_info()
        print("")


# Create knight
knight = Knight('Richard', 60, 40, 20)

print("Hail, brave knight", knight.name)
print("Your journey through the dark forest begins...\n")

# Ordered journey enemies
enemies = [
    Warrior('Peter', 30, 10, 10),
    Warrior('Sergio', 40, 15, 15),
    Warrior('Bjorn', 50, 20, 20),
    Dragon('Drogon', 120, 110, 40)  # Final boss
]

# Journey loop
for enemy in enemies:

    print("\n==============================")
    enemy.hello()
    enemy.print_info()
    print("==============================\n")

    while enemy.check_alive() and knight.check_alive():

        input("Press Enter to continue the fight...")

        # Randomly decide who attacks first
        if randint(0, 1) == 0:
            first = knight
            second = enemy
        else:
            first = enemy
            second = knight

        # First attack
        first.attack(second)
        second.print_info()

        # If second survives, they counterattack
        if second.check_alive():
            second.attack(first)
            first.print_info()

    # If knight died
    if not knight.check_alive():
        print("\nšŸ’€ The brave knight", knight.name, "has fallen...")
        break

    # If enemy defeated
    print("\nšŸ†", enemy.name, "has been defeated!")

    # Level up if not final boss
    if not isinstance(enemy, Dragon):
        knight.level_up()

# Game ending
if knight.check_alive() and isinstance(enemy, Dragon) and not enemy.check_alive():
    print("\nšŸ‰ The dragon has fallen!")
    print("šŸŽ‰ The forest is safe once more!")
    print("šŸ‘‘", knight.name, "is a true legend!")

print("\n=== End of the Journey ===")
Editor is loading...
Leave a Comment