from character import * class RPG: """ Hlavni trida RPG hry @Author: zbyv @Date: 15.11.2023 """ def __init__(self) -> None: pass def input_character(self) -> Character: """ Vytvori postavu na zaklade udaju nactenych ze standartniho vstupu Returns: vytvorena postava """ return Character(input("Jmeno postavy: "), int(input("Sila: ")), int(input("Hbitost: ")), int(input("Zdravi: "))) def input_weapon(self) -> Weapon|None: """ Vytvori zbran na zaklade udaju nactenych ze standartniho vstupu Returns: vytvorena zbran, nebo None, pokud byl nazev zbrane prazdny """ name = input("Nazev zbrane: ") if name == "": return None return Weapon(name, int(input("Utok: ")), int(input("Obrana: "))) def equip_character(self, character: Character, left: Weapon|None, right: Weapon|None) -> None: """ Vyzbroji postavu zadanymi zbranemi, avsak stavajici zbrane nebudou nahrazeny. Args: character: Postava pro vyzbrojeni left: Zbran do leve ruky right: Zbran do prave ruky """ character.take_weapon(left, Character.HAND_LEFT) character.take_weapon(right, Character.HAND_RIGHT) @staticmethod def __process_attack(attacker: Character, defender: Character) -> bool: dmg = defender.defend(attacker.attack()) print(f"utoci {attacker} a dava {dmg} zraneni") return not defender.is_alive() def fight(self, character1: Character, character2: Character) -> Character: """ Spusti souboj mezi postavami Args: character1: postava souboje, ktera utoci jako prvni character2: postava souboje, ktera brani jako prvni Returns: postava, ktera souboj vyhrala """ while True: if RPG.__process_attack(character1, character2): return character1 if RPG.__process_attack(character2, character1): return character2 def run(self) -> None: """ Spusti hru """ character1 = self.input_character() self.equip_character(character1, self.input_weapon(), self.input_weapon()) character2 = self.input_character() self.equip_character(character2, self.input_weapon(), self.input_weapon()) winner = self.fight(character1, character2) print(f"Vitez: {winner}") def main() -> None: rpg = RPG() rpg.run() if __name__ == "__main__": main()