112 lines
2.4 KiB
Python
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()})"
|