path-of-the-loner/models/heroes/hero.py
2025-03-03 16:47:07 +01:00

79 lines
1.9 KiB
Python

# hero
from models.heroes.character import Character
from models.loots.armor import Armor
from models.loots.weapon import Weapon
from sty import fg
class Hero(Character):
ARCHERY = 1
WARRIOR = 2
WIZARD = 3
BEAST = 7
HUMANOID = 8
UNDEAD = 9
DRAGON = 10
ELEMENTAL = 11
def __init__(
self,
name: str,
description: str,
HP: int,
attack_power: int,
defense: int,
type: str,
armor: Armor = None,
weapon: Weapon = None,
) -> None:
super().__init__(name, description, HP)
self.attack_power = attack_power
self.defense = defense
self.type = type
self.armor = armor
self.weapon = weapon
self.attacks_choice: list = ["Attacks", "Cure"]
def get_type_str(self) -> str:
return "Heroes"
def attacks(self, opponent: "Hero") -> float:
power = None
if self.weapon:
print(f"{self.name} {fg.red}attacks{fg.rs} with {self.weapon.name}")
power = self.weapon.power
else:
print(
f"{self.name} {fg.red}attacks{fg.rs} with {fg.yellow}bare hands{fg.rs}"
)
power = self.attack_power
if opponent.armor:
power -= opponent.defends()
return power
def defends(self) -> float:
if self.armor:
print(
f"{self.armor.name} {fg.blue}delete{fg.rs} {self.armor.defense} damage points"
)
return self.armor.defense
else:
return 0
def cure(self, hero: "Hero" = None):
target = hero if hero else self
UP_HP = 10
print(
f"{target.name}: {target.HP} {fg.green}HP{fg.rs} +{UP_HP}{fg.green}HP{fg.rs}"
)
target.HP += UP_HP
print(f"{target.name}: {target.HP} {fg.green}HP{fg.rs}")
return UP_HP