fork download
  1.  
Success #stdin #stdout 0.02s 7092KB
stdin

import random
import sys
import time

# Colors for loot display (ANSI codes)
COLORS = {
    'normal': '\033[94m',    # Blue
    'epic': '\033[95m',      # Purple
    'legendary': '\033[33m', # Orange (yellow)
    'end': '\033[0m'
}

class Loot:
    def __init__(self, rarity):
        self.rarity = rarity
        base_stats = {'attack': 0, 'defense': 0, 'speed': 0}
        if rarity == 'normal':
            self.stats = {k: random.randint(1, 3) for k in base_stats}
        elif rarity == 'epic':
            self.stats = {k: random.randint(3, 6) for k in base_stats}
        else:  # legendary
            self.stats = {k: random.randint(6, 10) for k in base_stats}

    def __str__(self):
        color = COLORS[self.rarity]
        stats_str = ', '.join(f"{k}:{v}" for k, v in self.stats.items())
        return f"{color}{self.rarity.capitalize()} Loot [{stats_str}]{COLORS['end']}"

class Enemy:
    def __init__(self, round_num):
        self.hp = 5 + round_num * 2
        self.attack = 1 + round_num
        self.alive = True

    def take_damage(self, dmg):
        self.hp -= dmg
        if self.hp <= 0:
            self.alive = False

    def attack_player(self, player):
        player.hp -= self.attack

class Player:
    def __init__(self):
        self.hp = 100
        self.base_attack = 5
        self.base_defense = 2
        self.base_speed = 2
        self.loot = []

    @property
    def attack(self):
        return self.base_attack + sum(l.stats['attack'] for l in self.loot)

    @property
    def defense(self):
        return self.base_defense + sum(l.stats['defense'] for l in self.loot)

    @property
    def speed(self):
        return self.base_speed + sum(l.stats['speed'] for l in self.loot)

    def is_alive(self):
        return self.hp > 0

    def add_loot(self, loot):
        self.loot.append(loot)

def drop_loot():
    roll = random.random()
    if roll < 0.6:
        rarity = 'normal'
    elif roll < 0.9:
        rarity = 'epic'
    else:
        rarity = 'legendary'
    return Loot(rarity)

def print_status(round_num, player, enemies):
    print(f"\nRound {round_num} - Player HP: {player.hp}")
    print(f"Enemies alive: {sum(e.alive for e in enemies)}")
    print(f"Player Attack: {player.attack}, Defense: {player.defense}, Speed: {player.speed}")
    print(f"Loot: {[str(l) for l in player.loot]}")

def poolfiction():
    player = Player()
    max_rounds = 100
    for round_num in range(1, max_rounds + 1):
        enemies = [Enemy(round_num) for _ in range(round_num)]  # enemies scale with round
        print_status(round_num, player, enemies)

        while any(e.alive for e in enemies) and player.is_alive():
            # Player attacks fastest enemy first
            alive_enemies = [e for e in enemies if e.alive]
            target = alive_enemies[0]
            damage = max(player.attack - 1, 1)
            target.take_damage(damage)

            # Enemies attack player
            for e in alive_enemies:
                if e.alive:
                    damage_to_player = max(e.attack - player.defense, 1)
                    player.hp -= damage_to_player
                    if not player.is_alive():
                        print("You died! Game Over.")
                        sys.exit()

            time.sleep(0.1)

        # Loot drop from each enemy
        for e in enemies:
            if not e.alive:
                if random.random() < 0.5:  # 50% chance to drop loot
                    loot = drop_loot()
                    player.add_loot(loot)
                    print(f"Enemy dropped: {loot}")

        if not player.is_alive():
            print("You died! Game Over.")
            break

    if player.is_alive():
        print("Congratulations! You survived 100 rounds of Poolfiction!")

if __name__ == "__main__":
    poolfiction()
stdout
Standard output is empty