import random # Define Character Class class Character: def __init__(self, name, hp, attack, defense, experience=0): self.name = name self.hp = hp self.attack = attack self.defense = defense self.experience = experience self.level_up() def take_damage(self, damage): self.hp -= damage if self.hp < 0: self.hp = 0 def is_alive(self): return self.hp > 0 def level_up(self): """Level up based on experience.""" self.attack += self.experience // 100 self.defense += self.experience // 100 self.hp += 10 * (self.experience // 100) def attack_enemy(self, enemy): """Player attacks enemy, calculating damage.""" attack_roll = random.randint(1, 20) + self.attack if attack_roll > enemy.defense: damage = random.randint(1, 20) + self.experience // 100 print(f"{self.name} attacks {enemy.name} and deals {damage} damage.") enemy.take_damage(damage) else: print(f"{self.name} missed the attack on {enemy.name}.") # Define Player Class class Player(Character): def __init__(self, name, hp=50, attack=5, defense=13, experience=0): super().__init__(name, hp, attack, defense, experience) def defend(self, enemy): """Player defends, possibly rebounding damage.""" print(f"{self.name} defends with a shield!") if random.random() < 0.5: rebound_damage = random.randint(1, 20) + self.experience // 100 print(f"{self.name}'s shield rebounds the attack! {enemy.name} takes {rebound_damage} damage.") enemy.take_damage(rebound_damage) else: print(f"{self.name} failed to deflect the attack.") # Define Enemy Class class Enemy(Character): def __init__(self, name, hp, attack, defense, move, experience=100): super().__init__(name, hp, attack, defense, experience) self.move = move def attack_player(self, player): """Enemy attacks player with its special move.""" if self.move == "scythe": damage = random.randint(1, 20) + self.attack print(f"{self.name} attacks with Scythe, dealing {damage} damage.") elif self.move == "telekinetic": damage = random.randint(10, 50) + self.attack print(f"{self.name} attacks with Telekinetic Manipulation, dealing {damage} damage.") player.take_damage(damage) # Game Setup def create_enemy(): """Randomly select an enemy.""" enemies = [ ("Corvus Glaive", 95, 1, 13, "scythe", 100), ("Ebony Maw", 80, 4, 1, "telekinetic", 300), ("Proxima Midnight", 100, 1, 14, "scythe", 200), ("Thanos", 1000, 5, 30, "energy blast", 1000) ] name, hp, attack, defense, move, exp = random.choice(enemies) return Enemy(name, hp, attack, defense, move, exp) def game_loop(): """Main game loop.""" print("Welcome to the Battle!") player_name = input("Enter your name: ") player = Player(player_name) # Create the enemy enemy = create_enemy() print(f"You are facing {enemy.name}, HP: {enemy.hp}, Attack: {enemy.attack}, Defense: {enemy.defense}, Move: {enemy.move}") # Game Loop while player.is_alive() and enemy.is_alive(): print(f"\nYour Health: {player.hp} | Enemy Health: {enemy.hp}") print("Possible actions:") print("[s] Attack with sword") print("[a] Attack with axe") print("[p] Drink a healing potion") print("[m] Attack with magic") print("[d] Defend with shield") # Get player choice choice = input("Your choice? ").lower() if choice == 's': # Sword attack player.attack_enemy(enemy) elif choice == 'a': # Axe attack (simplified version) damage = random.randint(5, 40) + player.experience // 100 print(f"{player.name} attacks with the axe, dealing {damage} damage.") enemy.take_damage(damage) elif choice == 'p': # Healing potion heal_amount = 20 + (player.experience // 100) * 5 player.hp += heal_amount print(f"{player.name} drinks a healing potion and heals {heal_amount} HP.") elif choice == 'm': # Magic (simplified) damage = random.randint(5, 35) + (player.experience // 100) * 10 print(f"{player.name} attacks with magic, dealing {damage} damage.") enemy.take_damage(damage) elif choice == 'd': # Defend player.defend(enemy) else: print("Invalid choice, try again.") # Enemy's turn to attack if enemy.is_alive(): enemy.attack_player(player) # Determine the outcome if player.is_alive(): print(f"Congratulations! {player.name} defeated {enemy.name}!") else: print(f"Sorry, {player.name} has been defeated by {enemy.name}.") def main(): game_loop() if __name__ == "__main__": main()