import random import os import time class Character: def __init__(self, name, hp, attack): self.name = name self.hp = hp self.max_hp = hp self.attack = attack self.curses = 0 self.burned = False self.critical = False self.piercing = False def is_alive(self): return self.hp > 0 def take_damage(self, damage): self.hp -= damage self.hp = max(0, self.hp) def attack_enemy(self, enemy): damage = random.randint(1, self.attack) print(f"{self.name} attacks {enemy.name} for {damage} damage!") enemy.take_damage(damage) if random.random() < 0.25: # 25% chance to apply debuffs enemy.inflict_debuff() def apply_curse(self): if self.curses < 5: self.curses += 1 print(f"{self.name} is cursed! Curse level: {self.curses}") else: print("Curse maxed out!") def remove_curse(self): if self.curses > 0: self.curses -= 1 print(f"{self.name} removes a curse. Curse level: {self.curses}") else: print("No curses to remove.") def inflict_debuff(self): debuffs = ["Burned", "Critical", "Piercing"] debuff = random.choice(debuffs) if debuff == "Burned": if not self.burned: self.burned = True print(f"{self.name} is burned!") else: print(f"{self.name} is already burned!") elif debuff == "Critical": if not self.critical: self.critical = True print(f"{self.name} receives a critical hit!") else: print(f"{self.name} is already under the effect of a critical hit!") elif debuff == "Piercing": if not self.piercing: self.piercing = True print(f"{self.name} ignores defenses!") else: print(f"{self.name} is already ignoring defenses!") def display_health_bar(self): bar_length = 20 filled_length = int(round(bar_length * self.hp / self.max_hp)) curses_display = "^" * self.curses bar = '♥' * filled_length + '-' * (bar_length - filled_length) print(f"{self.name} Hearts: [{bar}] {self.hp}/{self.max_hp} {curses_display}") class Enemy(Character): def __init__(self, name, hp, attack): super().__init__(name, hp, attack) def attack_enemy(self, player): damage = random.randint(1, self.attack) print(f"{self.name} attacks {player.name} for {damage} damage!") if random.random() < 0.25: # 25% chance to apply debuffs player.inflict_debuff() player.take_damage(damage) class Boss(Character): def __init__(self, name, hp, attack): super().__init__(name, hp, attack) def display_health_bar(self): bar_length = 20 filled_length = int(round(bar_length * self.hp / self.max_hp)) bar = '♥' * filled_length + '-' * (bar_length - filled_length) print(f"{self.name} Hearts: [{bar}] {self.hp}/{self.max_hp}") def attack_enemy(self, player): damage = random.randint(1, self.attack) print(f"{self.name} attacks {player.name} for {damage} damage!") if random.random() < 0.25: # 25% chance to apply debuffs player.inflict_debuff() player.take_damage(damage) import os import time def battle(player, enemy): print(f"A wild {enemy.name} appears!") while player.is_alive() and enemy.is_alive(): os.system('clear') # Clear the screen player.display_health_bar() enemy.display_health_bar() print("\nYour Turn") print("1. Attack") choice = input("Enter your choice: ") if choice == "1": player.attack_enemy(enemy) if not enemy.is_alive(): print(f"{enemy.name} has been defeated!") player.inventory.append(f"{enemy.name}'s loot") gold_dropped = 0 # Calculate gold dropped based on enemy type if isinstance(enemy, Boss): gold_dropped = random.randint(150, 400) else: gold_chance = random.random() if gold_chance < 0.7: gold_dropped = random.randint(15, 15) elif gold_chance < 0.9: gold_dropped = random.randint(20, 20) else: gold_dropped = random.randint(25, 25) player.gold += gold_dropped print(f"{enemy.name} dropped {gold_dropped} gold!") time.sleep(2) # Wait for 2 seconds to display the loot message os.system('clear') # Clear the screen after loot message break else: time.sleep(1) # Wait for 1 second before clearing the screen else: print("Invalid choice. Try again.") # Enemy's turn if enemy.is_alive(): os.system('clear') # Clear the screen before enemy's turn print("\nEnemy Turn") enemy.attack_enemy(player) time.sleep(1) # Wait for 1 second before clearing the screen os.system('clear') # Clear the screen after enemy's attack if player.burned: print(f"{player.name} is burned!") player.burned = False # Remove the burned debuff after displaying it elif player.critical: print(f"{player.name} is under the effect of a critical hit!") player.critical = False # Remove the critical debuff after displaying it elif player.piercing: print(f"{player.name} ignores defenses!") player.piercing = False # Remove the piercing debuff after displaying it if player.is_alive(): print("You win!") if not player.is_alive(): print("Game over!") time.sleep(2) # Wait for 2 seconds before clearing the screen os.system('clear') # Clear the screen after game over print(""" ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⡀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⠀⠀⠀⢀⣴⣿⡶⠀⣾⣿⣿⡿⠟⠛⠁ ⠀⠀⠀⠀⠀⠀⣀⣀⣄⣀⠀⠀⠀⠀⣶⣶⣦⠀⠀⠀⠀⣼⣿⣿⡇⠀⣠⣿⣿⣿⠇⣸⣿⣿⣧⣤⠀⠀⠀ ⠀⠀⢀⣴⣾⣿⡿⠿⠿⠿⠇⠀⠀⣸⣿⣿⣿⡆⠀⠀⢰⣿⣿⣿⣷⣼⣿⣿⣿⡿⢀⣿⣿⡿⠟⠛⠁⠀⠀ ⠀⣴⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⢠⣿⣿⣹⣿⣿⣿⣿⣿⣿⡏⢻⣿⣿⢿⣿⣿⠃⣼⣿⣯⣤⣴⣶⣿⡤⠀ ⣼⣿⠏⠀⣀⣠⣤⣶⣾⣷⠄⣰⣿⣿⡿⠿⠻⣿⣯⣸⣿⡿⠀⠀⠀⠁⣾⣿⡏⢠⣿⣿⠿⠛⠋⠉⠀⠀⠀ ⣿⣿⠲⢿⣿⣿⣿⣿⡿⠋⢰⣿⣿⠋⠀⠀⠀⢻⣿⣿⣿⠇⠀⠀⠀⠀⠙⠛⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀ ⠹⢿⣷⣶⣿⣿⠿⠋⠀⠀⠈⠙⠃⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠈⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣴⣶⣦⣤⡀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⣠⡇⢰⣶⣶⣾⡿⠷⣿⣿⣿⡟⠛⣉⣿⣿⣿⠆ ⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡎⣿⣿⣦⠀⠀⠀⢀⣤⣾⠟⢀⣿⣿⡟⣁⠀⠀⣸⣿⣿⣤⣾⣿⡿⠛⠁⠀ ⠀⠀⠀⠀⣠⣾⣿⡿⠛⠉⢿⣦⠘⣿⣿⡆⠀⢠⣾⣿⠋⠀⣼⣿⣿⣿⠿⠷⢠⣿⣿⣿⠿⢻⣿⣧⠀⠀⠀ ⠀⠀⠀⣴⣿⣿⠋⠀⠀⠀⢸⣿⣇⢹⣿⣷⣰⣿⣿⠃⠀⢠⣿⣿⢃⣀⣤⣤⣾⣿⡟⠀⠀⠀⢻⣿⣆⠀⠀ ⠀⠀⠀⣿⣿⡇⠀⠀⢀⣴⣿⣿⡟⠀⣿⣿⣿⣿⠃⠀⠀⣾⣿⣿⡿⠿⠛⢛⣿⡟⠀⠀⠀⠀⠀⠻⠿⠀⠀ ⠀⠀⠀⠹⣿⣿⣶⣾⣿⣿⣿⠟⠁⠀⠸⢿⣿⠇⠀⠀⠀⠛⠛⠁⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠈⠙⠛⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ """) exit() # Exit the game after displaying the game over message import platform class Player(Character): def __init__(self, name): super().__init__(name, hp=100, attack=10) self.inventory = [] self.stunned = False # Initialize stunned attribute self.defense = 5 self.resistance = 0 self.gold = 0 # Initialize gold currency self.experience = 0 self.level = 15 self.exp_required = 100 # Initial experience required to level up self.max_hp_increase_per_level = 30 self.attack_increase_per_level = 0.004 # 0.4% self.defense_increase_per_level = 0.005 # 0.5% self.resistance_increase_per_level = 0.0015 # 0.15% def gain_experience(self, amount): self.experience += amount while self.experience >= self.exp_required: self.level_up() def level_up(self): self.level += 1 self.experience -= self.exp_required self.exp_required += 50 # Increase experience required for next level self.max_hp += self.max_hp_increase_per_level # Increase maximum health upon leveling up self.hp = self.max_hp # Heal player to full health upon leveling up self.attack = int(self.attack * (1 + self.attack_increase_per_level)) # Increase attack power upon leveling up self.defense = int(self.defense * (1 + self.defense_increase_per_level)) # Increase defense upon leveling up self.resistance = int(self.resistance * (1 + self.resistance_increase_per_level)) # Increase resistance upon leveling up print(f"Congratulations! You've reached level {self.level}!") def display_stats(self): print(f"Character Name: {self.name}") print(f"Level: {self.level}") print(f"Experience: {self.experience}/{self.exp_required}") print(f"Health: {self.hp}/{self.max_hp}") print(f"Attack: {self.attack}") print(f"Defense: {self.defense} ({self.defense * 0.2}%)") print(f"Resistance: {self.resistance} ({self.resistance * 0.2}%)") print(f"Curses: {self.curses}") if self.burned: print("Burned!") if self.critical: print("Critical!") if self.piercing: print("Piercing!") print(f"Gold: {self.gold}") while True: print("\nPlayer Menu:") print("1. Back to Game") print("2. Shop") print("3. Inventory") choice = input("Enter your choice: ") if choice == "1": os.system('clear') # Clear the screen after choosing to go back to the game break elif choice == "2": print("Welcome to the Shop!") # Implement shop functionality here elif choice == "3": print("Inventory:") for item in self.inventory: print(item) print("End of Inventory") else: print("Invalid choice. Please enter a valid option.") import os def main(): while True: print("\nWelcome to BeaVenture!") print("1. Start") print("2. Exit") choice = input("Enter your choice: ") if choice == "1": os.system('clear') # Clear the screen after pressing "Start" player_name = input("Enter your character's name: ") os.system('clear') # Clear the screen after entering the player's name player = Player(player_name) print(f"\nWelcome, {player.name}!") player.display_stats() while True: print("How do you want to start?") print("\n1. Continue") print("2. Back") choice = input("Enter your choice: ") if choice == "1": enemies = [ Enemy("Goblin", 50, 5), Enemy("Orc", 70, 10), Enemy("Dragon", 100, 20), Enemy("Skeleton", 40, 7), Enemy("Witch", 60, 12), Boss("Red Leaf", 300, 40), # Boss enemy type starts here Boss("Lubricant", 500, 60), Boss("The OverSeer", 700, 80), Boss("The Insight", 1000, 100), Boss("Surgeragon", 1500, 150) # Last boss enemy ] while player.is_alive(): enemy = random.choice(enemies) if isinstance(enemy, Boss): # Check if the enemy is a boss print("Doomed!") print("The Boss Is1 Approaching!") battle(player, enemy) if input("Do you want to play again? (yes/no): ").lower() != "yes": break break elif choice == "2": break else: print("Invalid choice. Please enter 1 or 2.") elif choice == "2": print("Exiting the game. Goodbye!") break else: print("Invalid choice. Please enter 1 or 2.") if __name__ == "__main__": main()
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter