rpg/character.py
2023-11-22 22:05:31 +01:00

112 lines
2.4 KiB
Python

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()})"