diff --git a/eliot/manoire_30_11_23_fin-de_cour.py b/eliot/manoire_30_11_23_fin-de_cour.py new file mode 100644 index 0000000..4fc54ac --- /dev/null +++ b/eliot/manoire_30_11_23_fin-de_cour.py @@ -0,0 +1,282 @@ +# Importation +import random as rd +import time +# Déclaration des CONSTANTES + +# Déclaration Classes + +class Monstre : + + def __init__(self, nom, dsc, img=None, obj=None) -> None: + self.nom = nom + self.dsc = dsc + self.img = img + self.obj = obj + self.habilite = rd.randint(1,10) + self.endurance_max = 5 + self.endurance = self.endurance_max + self.force = 2 + self.courage = rd.randint(1,10) + self.objet = [] + + if "Squelette" in self.nom: + self.habilite = rd.randint(1,10) + self.endurance = rd.randint(1,10) + self.force = rd.randint(1,2) + self.courage = rd.randint(1,10) + + if 'Chauve-souris' in self.nom: + self.habilite = rd.randint(1,3) + self.endurance = rd.randint(1,3) + self.force = 1 + self.courage = 10 + self.objet = ['clé cadena'] + + def modifier_endurance(self:'Monstre', modificateur): + endurance_modifie = self.endurance + modificateur + if endurance_modifie < 0: + self.endurance = 0 + elif endurance_modifie > self.endurance_max: + self.endurance = self.endurance_max + else: + self.endurance = endurance_modifie + + def subir_degats(self:'Monstre', degats:int) -> None: + if degats > 0: + self.modifier_endurance(-degats) + + + def get_description(self:'Monstre') -> str: + return self.dsc + + def get_carac(self:'Montres') -> str: + return f"{self.nom} H{self.habilite} E{self.endurance} F{self.force} C{self.courage}" + + def est_hs(self:'Monstre') -> bool: + if self.endurance <= 0: + return True + else: + return False +class Personnage: + + def __init__(self, nom='Aucun'): + + self.nom = nom + + self.habilite = 5 + rd.randint(1,4) + self.endurance_max = 7 + rd.randint(1,8) + self.endurance = self.endurance_max + self.force = 2 + self.charisme = rd.randint(1,10) + self.vigilance = rd.randint(1,10) + self.discretion = False + self.lieu = None + self.lieu_precedents = [] + self.objet = None + + def modifier_endurance(self:'Personnage', modificateur): + endurance_modifie = self.endurance + modificateur + if endurance_modifie < 0: + self.endurance = 0 + elif endurance_modifie > self.endurance_max: + self.endurance = self.endurance_max + else: + self.endurance = endurance_modifie + + def subir_degats(self:'Personnage', degats:int) -> None: + if degats > 0: + self.modifier_endurance(-degats) + + def est_hs(self:'Personnage') -> bool : + if self.endurance == 0: + return True + else: + return False + + def get_carac(self:'Personnage') -> str: + return f"{self.nom} H{self.habilite} E{self.endurance} F{self.force} C{self.charisme} V{self.vigilance}" + + def combattre(self:'Personnage', adversaire:'Monstre') -> tuple: + """ + Effectue un combat entre le personnage et un monstre. + Parameters: + - self ('Personnage'): L'instance du personnage effectuant l'attaque. + - adversaire ('Monstre'): L'instance du monstre contre lequel le personnage se bat. + Returns: + - tuple: Un tuple contenant le code de résultat et la description du combat. + Code de Résultat : + - 'x': Le combat n'est pas encore terminé. + - 'MP': Les deux participants sont hors combat. + - 'P': Le personnage est hors combat. + - 'M': Le monstre est hors combat. + Description : + Le combat consiste en plusieurs étapes, où les scores de combat sont comparés, et des dégâts sont infligés en fonction du résultat. + Les participants peuvent également subir des dégâts critiques ou être hors combat. + """ + score_personnage = rd.randint(1, 6) + rd.randint(1, 6) + self.habilite + score_monstre = rd.randint(1, 6) + rd.randint(1, 6) + adversaire.habilite + result_code = 'x' + + while result_code == 'x': + if score_personnage == score_monstre: + self.subir_degats(1) + adversaire.subir_degats(1) + result_code = "x" + result_desc = f"{self.nom} et {adversaire.nom} se blessent mutuellement." + time.sleep(1) + print(result_desc) + elif score_personnage > score_monstre: + adversaire.subir_degats(self.force) + result_code = "x" + result_desc = f"{self.nom} inflige {self.force} points de dégâts au {adversaire.nom}." + time.sleep(1) + print(result_desc) + else: + self.subir_degats(adversaire.force) + result_code = "x" + result_desc = f"{adversaire.nom} inflige {adversaire.force} points de dégâts au {self.nom}." + time.sleep(0.5) + print(result_desc) + if rd.randint(1, 6) == rd.randint(1, 6): + double_damage = self.force * 2 + adversaire.subir_degats(double_damage) + result_desc += f" Coup critique ! {self.nom} inflige {double_damage} points de dégâts supplémentaires au {adversaire.nom}." + time.sleep(0.5) + print(result_desc) + elif self.est_hs() and adversaire.est_hs(): + result_code = "MP" + result_desc = f"{self.nom} et {adversaire.nom} sont tous les deux hors combat." + time.sleep(0.5) + print(result_desc) + elif self.est_hs(): + result_code = "P" + result_desc = f"{self.nom} est hors combat." + elif adversaire.est_hs(): + result_code = "M" + result_desc = f"{adversaire.nom} est hors combat." + time.sleep(0.5) + print(result_desc) + + return result_code, result_desc + + +class Lieu: + + def __init__(self, nom, dsc, img=None) -> None: + self.nom = nom + self.dsc = dsc + self.image = None + self.nord = None + self.sud = None + self.est = None + self.ouest = None + self.occupant = None + self.objets = [] + self.action_supp = None + + +def combattre(self:'Personnage', adversaire:'Monstre') -> tuple: + """ + Effectue un combat entre le personnage et un monstre. + Parameters: + - self ('Personnage'): L'instance du personnage effectuant l'attaque. + - adversaire ('Monstre'): L'instance du monstre contre lequel le personnage se bat. + Returns: + - tuple: Un tuple contenant le code de résultat et la description du combat. + Code de Résultat : + - 'x': Le combat n'est pas encore terminé. + - 'MP': Les deux participants sont hors combat. + - 'P': Le personnage est hors combat. + - 'M': Le monstre est hors combat. + Description : + Le combat consiste en plusieurs étapes, où les scores de combat sont comparés, et des dégâts sont infligés en fonction du résultat. + Les participants peuvent également subir des dégâts critiques ou être hors combat. + """ + score_personnage = rd.randint(1, 6) + rd.randint(1, 6) + self.habilite + score_monstre = rd.randint(1, 6) + rd.randint(1, 6) + adversaire.habilite + result_code = 'x' + + while result_code == 'x': + if score_personnage == score_monstre: + self.subir_degats(1) + adversaire.subir_degats(1) + result_code = "x" + result_desc = f"{self.nom} et {adversaire.nom} se blessent mutuellement." + time.sleep(1) + print(result_desc) + elif score_personnage > score_monstre: + adversaire.subir_degats(self.force) + result_code = "x" + result_desc = f"{self.nom} inflige {self.force} points de dégâts au {adversaire.nom}." + time.sleep(1) + print(result_desc) + else: + self.subir_degats(adversaire.force) + result_code = "x" + result_desc = f"{adversaire.nom} inflige {adversaire.force} points de dégâts au {self.nom}." + time.sleep(0.5) + print(result_desc) + if rd.randint(1, 6) == rd.randint(1, 6): + double_damage = self.force * 2 + adversaire.subir_degats(double_damage) + result_desc += f" Coup critique ! {self.nom} inflige {double_damage} points de dégâts supplémentaires au {adversaire.nom}." + time.sleep(0.5) + print(result_desc) + elif self.est_hs() and adversaire.est_hs(): + result_code = "MP" + result_desc = f"{self.nom} et {adversaire.nom} sont tous les deux hors combat." + time.sleep(0.5) + print(result_desc) + elif self.est_hs(): + result_code = "P" + result_desc = f"{self.nom} est hors combat." + elif adversaire.est_hs(): + result_code = "M" + result_desc = f"{adversaire.nom} est hors combat." + time.sleep(0.5) + print(result_desc) + + return result_code, result_desc + + +def ouvrir(self:'Personnage', Lieu:'Lieu'): + #permet de verifier si on a un objet dans l'inventaire +# Déclaration de Fonctions + + + +# Le corps du module en lui-même + + +if __name__ == '__main__': + # personnage + h = Personnage("Alice") + # monstre + S = Monstre("Squelette", "") + C = Monstre("Chauve-souris", "") + # lieu + entree = Lieu("Entrée", "Une entrée délabrée et poussiéreuse. Une porte entrouverte se trouve à l'ouest. Une porte verouillée avec un cadena au nord et une petite salle a l'est.") + garage = Lieu("Garage", "Un garage sans dessus-dessous avec une chauve-souris qui a une clé entre ses griffes. Une porte mène à l'est vers l'Entrée") + vestibule = Lieu("Vestibule", "Une petite pièce dans la quelle est entreposée une armure rouillée. aller vers l'ouest pour retourner dans l'Entrée.") + couloire_sud = Lieu("Couloire Sud","") + chambre_du_gardien = Lieu("Chambre du gardien", "") + toilette_usagée = Lieu("Toilette usagée", "Peuve toujours servir") + Hub = Lieu("Jardin couvert", "") + couloire_nord = Lieu("Couloire Nord","") + couloire_est = Lieu("Couloire Est","") + couloire_ouest = Lieu("Couloire Ouest","") + cuisine = Lieu("Cuisine","") + picine = Lieu("Picine","Zone de boss") + salle_arcade = Lieu("Salle d'arcade","") + bureau = Lieu("Bureau","") + salle_NSI = Lieu("Salle de NSI","Zone de bossssss... !!!!!") + entree.ouest = garage + entree.est = vestibule + garage.est = entree + garage.objet = ['cle cadena'] + garage.occupant = C + vestibule.objet = ['Armure rouillée (+2 EnduranceMax)'] + vestibule.ouest = entree + + +