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

98 lines
2.6 KiB
Python

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