import os
import time
import sys
class Player:
def __init__(self, name, difficulty):
self.name = name
self.difficulty = difficulty
self.attack = 10
self.defense = 5
self.dodge = 2
self.speed = 3
self.gold = 100
self.diamonds = 0
self.experience = 0
self.level = 1
self.exp_required = 100
self.exp_multiplier = 0.75 # 75% increase for experience requirement per level
self.inventory = { # Initialize inventory
"Weapons": [],
"Armors": [],
"Shields": [],
"Footwear": [],
"Usable Items": [] # Add Usable Items category
}
self.equipped_items = { # Initialize equipped items
"Weapons": None,
"Armors": None,
"Shields": None,
"Footwear": None
}
self.max_inventory_slots = 30
self.cleared_chapters = ["The Cave of Loir"] # Chapter 1 is unlocked by default
self.chapter_stages = {
"The Cave of Loir": ["⚔️"] + ["X"] * 9, # First stage unlocked
"The Forest Of Azure": ["X"] * 10, # Locked
"The Cursed Lake": ["X"] * 10, # Locked
"The Baptisted Temple": ["X"] * 10, # Locked
"Dungeon": ["X"] * 10, # Locked
"Dragon Lair": ["X"] * 10 # Locked
}
# Existing methods...
def visit_inventory(self):
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print("Inventory:")
print("=" * 40)
print("1. Weapons")
print("2. Armors")
print("3. Shields")
print("4. Footwear")
print("5. Usable Items")
print("6. Back to Player Status")
print("\nEnter the number to select an option.")
choice = input("")
if choice == "1":
self.display_items("Weapons")
elif choice == "2":
self.display_items("Armors")
elif choice == "3":
self.display_items("Shields")
elif choice == "4":
self.display_items("Footwear")
elif choice == "5":
self.display_items("Usable Items")
elif choice == "6":
self.display_status()
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
def display_items(self, item_type):
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print(f"{item_type}:")
print("=" * 40)
if self.inventory[item_type]:
for idx, item in enumerate(self.inventory[item_type], 1):
print(f"{idx}. {item['name']}: {item['description']}")
print("0. Back to Inventory Menu")
print("Enter the number to equip the item or 0 to go back.")
choice = input("")
if choice == "0":
break # Break out of the inner loop to return to the previous menu
elif choice.isdigit() and 0 < int(choice) <= len(self.inventory[item_type]):
self.equip_item(item_type, int(choice) - 1)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
else:
print("No items in this category.")
print("Press < to go back")
choice = input("")
if choice == "<":
break # Break out of the inner loop to return to the previous menu
def equip_item(self, item_type, index):
item = self.inventory[item_type].pop(index)
if item_type in ["Weapons", "Armors", "Shields", "Footwear"]:
self.remove_equipped_item(item_type) # Remove any previously equipped item of the same type
self.equipped_items[item_type] = item # Equip the new item
self.update_stats() # Update player stats with the new equipment
print(f"{item['name']} equipped.")
time.sleep(1)
else:
# Handle equipping usable items
pass
self.visit_inventory()
def remove_equipped_item(self, item_type):
if item_type in self.equipped_items:
item = self.equipped_items.pop(item_type)
self.inventory[item_type].append(item)
def update_stats(self):
# Reset base stats
self.attack = 10
self.defense = 5
self.dodge = 2
self.speed = 3
# Add bonuses from equipped items
for item_type, item in self.equipped_items.items():
if item:
self.attack += item.get('attack', 0)
self.defense += item.get('defense', 0)
self.dodge += item.get('dodge', 0)
self.speed += item.get('speed', 0)
def display_status(self):
os.system('cls' if os.name == 'nt' else 'clear')
print("Player Status:\n")
print("="*40)
print(f"Name: {self.get_name_display()}")
print(f"Difficulty: {self.get_difficulty_display()}")
print("-"*40)
print("Stats:")
print(f"HP :❤️{self.attack}")
print(f"Defense :🛡️{self.defense}")
print(f"Attack :⚔️{self.attack}")
print(f"Dodge :🤺{self.dodge}")
print(f"Speed :🏃{self.speed}")
print("-"*40)
print(f"Level: {self.level}")
print(f"Experience: {self.experience}/{self.exp_required}")
print("-"*40)
print(f"Gold: {self.gold} 💰")
print(f"Diamonds: {self.diamonds} 💎")
print("="*40)
print("Game Options:")
print("1. Visit Shop")
print("2. Inventory")
print("3. Play Game")
print("4. Delete this Character")
print("5. Add 50 Experience Points")
print("\nEnter the number to select an option.")
choice = input("")
if choice == "1":
self.visit_shop()
elif choice == "2":
self.visit_inventory()
elif choice == "3":
self.play_game()
elif choice == "4":
return
elif choice == "5":
self.add_experience(50)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
self.display_status()
def remove_equipped_item(self, item_type):
if item_type in self.equipped_items:
item = self.equipped_items.pop(item_type)
self.inventory[item_type].append(item)
def get_chapter_name_by_number(self, number):
chapters = {
"1": "The Cave of Loir",
"2": "The Forest Of Azure",
"3": "The Cursed Lake",
"4": "The Baptisted Temple",
"5": "Dungeon",
"6": "Dragon Lair"
}
return chapters.get(number)
def play_game(self):
while True:
clear_screen()
print("Select Chapter to Play:")
for i, (chapter_name, stages) in enumerate(self.chapter_stages.items(), start=1):
print(f"< {'⚔️' if stages[0] == '⚔️' else '🔒' if stages[0] == 'X' else '✔️'} {i} > {chapter_name}") # Display chapter with appropriate symbol
print("< < Back to Player Status")
choice = input("Enter the number to select a chapter or < to go back: ")
if choice == "<":
self.display_status()
break
elif choice.isdigit():
chapter_index = int(choice) - 1
if 0 <= chapter_index < len(self.chapter_stages):
chapter_name = list(self.chapter_stages.keys())[chapter_index]
stages = self.chapter_stages[chapter_name]
if stages[0] == "⚔️":
self.play_chapter(chapter_name)
else:
print("This chapter is locked. Please clear the previous chapters first.")
time.sleep(2)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
def play_chapter(self, chapter_name):
while True:
clear_screen()
print(f"Chapter: {chapter_name}")
print("Stages:")
for i, stage in enumerate(self.chapter_stages[chapter_name], start=1):
print(f"Stage {i}: {'⚔️' if stage == '⚔️' else '🔒' if stage == 'X' else '✅'}")
print("< < Back to Chapter Selection")
choice = input("Enter the number to select a stage or < to go back: ")
if choice == "<":
break
elif choice.isdigit():
stage_index = int(choice) - 1
if 0 <= stage_index < len(self.chapter_stages[chapter_name]):
if self.chapter_stages[chapter_name][stage_index] == "⚔️":
self.play_stage(chapter_name, stage_index)
elif self.chapter_stages[chapter_name][stage_index] == "X":
print("This stage is locked. Please clear the previous stages first.")
time.sleep(2)
else:
print("You have already cleared this stage.")
time.sleep(2)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
def play_stage(self, chapter_name, stage_index):
clear_screen()
print(f"Chapter: {chapter_name}")
print(f"Stage: {stage_index + 1}")
print("Placeholder for gameplay") # Placeholder for actual gameplay
if stage_index < len(self.chapter_stages[chapter_name]) - 1:
self.chapter_stages[chapter_name][stage_index + 1] = "⚔️" # Unlock next stage
else:
print("You cleared all stages in this chapter!")
time.sleep(2)
self.chapter_stages.pop(chapter_name) # Remove the chapter
if self.chapter_stages: # Check if there are more chapters left
next_chapter_name = list(self.chapter_stages.keys())[0]
self.chapter_stages[next_chapter_name][0] = "⚔️" # Unlock next chapter
print(f"Next chapter unlocked: {next_chapter_name}")
time.sleep(3)
else:
print("Congratulations! You cleared all chapters!")
time.sleep(3)
self.chapter_stages[chapter_name][stage_index] = "✅" # Mark stage as cleared
time.sleep(2)
def display_locked_message(self):
clear_screen()
print("This chapter is locked. Please clear the previous chapters first.")
input("Press Enter to go back to the selecting chapter.")
def add_experience(self, amount):
self.experience += amount
if self.experience >= self.exp_required:
self.level_up()
self.display_status()
def level_up(self):
self.level += 1
self.exp_required = int(self.exp_required * (1 + self.exp_multiplier)) # Increase by 75%
self.attack += 0.5
self.defense += 0.5
self.dodge += 0.5
self.speed += 0.5
def get_name_display(self):
symbol = ""
if self.difficulty == "Basic":
symbol = "🛡️"
elif self.difficulty == "Exemplar":
symbol = "⚔️"
elif self.difficulty == "Templar":
symbol = "☠️"
return f"{symbol} {self.name}"
def get_difficulty_display(self):
return self.difficulty
def visit_shop(self):
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print("Welcome to the Shop!")
print("=" * 40)
print("Shop Sections:")
print("1. Weapons")
print("2. Armors")
print("3. Shields")
print("4. Footwear")
print("5. Usable Items")
print("6. Back to Player Status")
print("\nEnter the number to select a shop section.")
choice = input("")
if choice == "1":
self.display_shop_section("Weapons")
elif choice == "2":
self.display_shop_section("Armors")
elif choice == "3":
self.display_shop_section("Shields")
elif choice == "4":
self.display_shop_section("Footwear")
elif choice == "5":
self.display_shop_section("Usable Items")
elif choice == "6":
self.display_status()
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
def display_shop_section(self, item_type):
os.system('cls' if os.name == 'nt' else 'clear')
print(f"Shop - {item_type}:")
print("=" * 40)
if item_type in items_groups:
for idx, item in enumerate(items_groups[item_type], 1):
print(f"{idx}. {item['name']}: {item['description']} - Cost: {item['cost']} gold")
print("0. Back to Shop Sections")
print("Enter the number to purchase the item or 0 to go back.")
choice = input("")
if choice == "0":
self.visit_shop()
elif choice.isdigit() and 0 < int(choice) <= len(items_groups[item_type]):
self.purchase_item(item_type, int(choice) - 1)
else:
print("Invalid option. Please enter a valid number.")
time.sleep(1)
self.display_shop_section(item_type)
else:
print("Invalid shop section.")
time.sleep(1)
self.visit_shop()
def purchase_item(self, item_type, index):
item = items_groups[item_type][index]
cost = item['cost']
if self.gold >= cost:
self.gold -= cost
self.inventory[item_type].append(item)
print(f"You have purchased {item['name']} for {cost} gold.")
time.sleep(1)
else:
print("Insufficient gold to purchase this item.")
time.sleep(1)
self.display_shop_section(item_type)
items_groups = {
"Usable Items": [
{"name": "Small Healing Potion", "description": "+15 hp", "cost": 20},
{"name": "Self Healing Potion", "description": "+20 hp", "cost": 50},
{"name": "Moderated Potion", "description": "+25 hp", "cost": 75},
{"name": "Regen Potion", "description": "+15%", "cost": 100},
{"name": "Hammerhead Crocker", "description": "+7% attack for 7 turns", "cost": 55},
{"name": "Warhammer Crocker", "description": "+15% attack for 7 turns", "cost": 75},
{"name": "Barhog", "description": "+7% Defense for 7 turns", "cost": 45},
{"name": "Warhog", "description": "+15% defense for 7 turns", "cost": 60},
{"name": "Non applicable scroll", "description": "+2 Speed for 7 turns", "cost": 40},
{"name": "Applicable scroll", "description": "+4 speed for 7 turns", "cost": 55},
{"name": "Ransacked Shield", "description": "+12% Dodge chance for 3 turns", "cost": 60},
{"name": "Unbuilded Shield", "description": "+23% Dodge Chance for 5 turns", "cost": 90},
{"name": "Mystic Scroll", "description": "25% chance to negate all debuffs on player for 4 turns", "cost": 60},
{"name": "Mystic Beurau", "description": "50% chance to negate all debuffs on player for 4 turns", "cost": 120},
{"name": "Variant Bs", "description": "Increase all stats up to 25% for 10 turns", "cost": 200},
{"name": "Variant Ex", "description": "Increase all stats up to 50% for 10 turns", "cost": 400},
{"name": "Hide cloak", "description": "40% chance to dodge the battle against enemies when exploring", "cost": 50},
{"name": "Invisible potion", "description": "60% chance to dodge the battle against enemies when exploring", "cost": 75},
{"name": "Exp Moneter", "description": "Give you 20 exp points", "cost": 50},
{"name": "Exp Vitalis", "description": "Give you 50 exp points", "cost": 100},
{"name": "Exp For enhancer", "description": "Give you 100 points", "cost": 150}
],
"Weapons": [
{"name": "Stone Sword", "description": "+12 attack", "cost": 150},
{"name": "Copper Sword", "description": "+15 attack", "cost": 275},
{"name": "Sickanum Sword", "description": "+17 attack", "cost": 400},
{"name": "Arivanum Sword", "description": "+23 attack", "cost": 600},
{"name": "Viranium Sword", "description": "+25 attack", "cost": 850},
{"name": "Titanium sword", "description": "+35 attack", "cost": 1250}
],
"Armors": [
{"name": "Jungle sets", "description": "+7 Defense", "cost": 90},
{"name": "Byzantine sets", "description": "+12 Defense", "cost": 140},
{"name": "Nikel Sets", "description": "+15 Defense", "cost": 350},
{"name": "Warhead Sets", "description": "+25 Defense", "cost": 560},
{"name": "Titanium Sets", "description": "+40 Defense", "cost": 850}
],
"Shields": [
{"name": "Wooden Ob", "description": "+2 dodge", "cost": 80},
{"name": "Long Ob", "description": "+3 dodge, +2 Defense", "cost": 120},
{"name": "Cob Ob", "description": "+5 dodge, +4 Defense", "cost": 300},
{"name": "Knock Ob", "description": "+7 dodge, +5 Defense, +3 Attack", "cost": 550},
{"name": "Neb Ob", "description": "+12 dodge, +7 Defense, +5 Attack", "cost": 760}
],
"Footwear": [
{"name": "Jungle Foot", "description": "+3 speeds", "cost": 45},
{"name": "Iron Foot", "description": "+5 Speed", "cost": 75},
{"name": "Metal WarFoot", "description": "+8 Speeds", "cost": 120},
{"name": "Diamond Boots", "description": "+12 Speeds", "cost": 230},
{"name": "Noble Boots", "description": "+19 Speeds", "cost": 450},
{"name": "Lizable Boots", "description": "+25 Speeds", "cost": 700}
]
}
def create_character():
clear_screen()
print("Character Creation")
name = input("Enter your character's name: ")
clear_screen()
print(f"Character Name: {name}\n")
while True:
print("Select Difficulty:")
print("1. Basic 🛡️")
print("2. Exemplar ⚔️")
print("3. Templar ☠️")
difficulty_choice = input("Enter the number to select difficulty: ")
if difficulty_choice == "1":
difficulty = "Basic"
description = "Enemies are powerful in their origins."
elif difficulty_choice == "2":
difficulty = "Exemplar"
description = "Enemies are harder and more immortalized."
elif difficulty_choice == "3":
difficulty = "Templar"
description = "Enemies are evils."
else:
print("Invalid difficulty choice. Please choose a valid option.")
time.sleep(1)
clear_screen()
continue
clear_screen()
print("Selected Difficulty:")
print(f"Name: {name}")
print(f"Difficulty: {difficulty}")
print(f"Description: {description}\n")
print("1. Confirm")
print("2. Back")
confirm_choice = input("Enter your choice: ")
if confirm_choice == "1":
break
elif confirm_choice == "2":
clear_screen()
continue
else:
print("Invalid choice. Please enter 1 to confirm or 2 to go back.")
time.sleep(1)
clear_screen()
return Player(name, difficulty)
def clear_screen():
"""Clears the console screen."""
os.system('cls' if os.name == 'nt' else 'clear')
def main_menu():
clear_screen()
print("BeaVenture\n")
print("1. Create Character")
print("2. Exit")
print("\nEnter the number to select an option.")
def main():
while True:
main_menu()
try:
choice = int(input(""))
if choice == 1:
player = create_character()
player.display_status()
elif choice == 2:
clear_screen()
print("Exiting BeaVenture. Goodbye!")
time.sleep(2)
clear_screen()
print("Game Was Ended")
input("Press Enter to exit...")
clear_screen()
break
else:
print("Invalid option. Please enter a valid number.")
time.sleep(2)
except ValueError:
print("Invalid input. Please enter a number.")
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