from weapon import * class Character: """ Character reprezentuje postavu v RPG hre @Author: zbyv @Date: 15.11.2023 """ HAND_LEFT = 0 """ Leva ruka postavy """ HAND_RIGHT = 1 """ Prava ruka postavy """ def __init__(self, name: str, strength: int, agility: int, vitality: int) -> None: """ Args: name: Nazev postavy strength: Utocna sila postavy agility: Hbitost postavy vitality: Zdravi postavi """ self.__name: str = name self.__strength: int = strength self.__agility: int = agility self.__vitality: int = vitality self.__weapons: list[Weapon|None] = [None, None] def attack(self) -> int: """ Zjisti utocnou silu postavy Returns: Utocna sila postavy """ ret = self.__strength for weapon in self.__weapons: if weapon: ret += weapon.attack return ret def __defense(self) -> int: defense = self.__agility for weapon in self.__weapons: if weapon: defense += weapon.defense return defense def defend(self, attack: int) -> int: """ Vystavi postavu utoku Args: attack: Utocna sila nepritele Returns: Zdravi ztracene pri utoku """ loss = attack - self.__defense() if loss < 0: return 0 loss = min(self.__vitality, loss) self.__vitality -= loss return loss def is_alive(self) -> bool: """ Zjisti, jestli je postava nazivu Returns: True pokud (zdravi > 0), jinak False """ return self.__vitality > 0 def take_weapon(self, weapon: Weapon|None, hand: int) -> bool: """ Vlozi postave do ruky zbran, pokud v teto ruce doposud zadnou zbran nema Args: weapon: Zbran, ktera bude vlozena postave do ruky hand: Ruka, do ktere postave bude zbran vlozena Returns: True pokud si postava zbran vzala, jinak False """ if not self.__weapons[hand]: self.__weapons[hand] = weapon return True else: return False def __str__(self) -> str: return f"{self.__name} [{self.__vitality}] ({self.attack()}/{self.__defense()})"