path-of-the-loner/views/PVP/arenaUI.py
2025-03-03 16:47:07 +01:00

84 lines
2.4 KiB
Python

# arenaUI
# models
from models.heroes.hero import Hero
from sty import fg
from random import randint
# pour éviter les pb d'import circulaire
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from controllers.PvpController import PvpController
class ArenaUI:
def __init__(self, pvpController: "PvpController") -> None:
self.pvpController = pvpController
self.hero = self.pvpController.hero
self.opponent = self.pvpController.opponent
self.init()
self.pvpController.hero = self.hero
def init(self):
print("You go into the arena")
print(f"Are you {fg.green} ready {fg.rs} ?")
print("Anyway, no choice ^^")
print(f"You will {fg.red} fight {fg.red}against{self.opponent.name}")
if self.hero.type == Hero.ARCHERY:
print("You begin")
self.attacks(self.hero, self.opponent)
else:
print(f"{self.opponent.name} begin")
self.fight()
def fight(self):
while self.hero.HP > 0 and self.opponent.HP > 0:
self.attacks(self.hero, self.opponent)
if self.opponent.HP > 0:
self.attacks(self.opponent, self.hero, True)
if self.hero.HP > 0:
print(f"You {fg.blue}won{fg.rs} !")
elif self.opponent.HP > 0:
print(f"{self.opponent.name} {fg.red}beat{fg.rs} you")
else:
raise Exception("An error occured")
def attacks(self, hero: Hero, opponent: Hero, is_AI: bool = False):
print(f"Choose an attack - {hero.name} will ...")
attacks_list = hero.attacks_choice
attacks_list_len = len(attacks_list)
choice = -1
while choice < 1 or choice > attacks_list_len:
for i in range(0, attacks_list_len):
print(f"{i+1} - {attacks_list[i]}")
try:
if is_AI:
choice = randint(1, attacks_list_len + 1)
else:
choice = int(input("Give your choice: "))
except ValueError:
print(f"{fg.red}Input a valid number{fg.rs}")
continue
if choice < 1 or choice > attacks_list_len:
print(f"{fg.red}Invalid choice. Try again{fg.rs}")
print(f"You choose {attacks_list[choice-1]}")
if choice == 1:
opponent.HP -= hero.attacks(opponent)
elif choice == 2:
hero.cure()