98 lines
2.6 KiB
Python
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() |