import random as rd 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 = rd.randint(1,10) self.force = 2 self.courage = rd.randint(1,10) if 'Squelette' in nom: self.habilite = 4 self.endurance = 4 self.courage = 4 def get_description(self:'Monstre') -> str: return self.dsc def get_carac(self:'Monstre') -> str: return f"{self.nom} H{self.habilite} E{self.endurance} F{self.force} C{self.courage}" def est_hs(self:'Monstre')->bool: return self.endurance <= 0 def subir_degats(self:'Monstre', degats:int) -> None: if degats > 0: self.endurance = self.endurance - degats class Personnage: def __init__(self, nom) -> None: self.nom=nom self.habilite = 5+rd.randint(1,4) self.endurance = 8+rd.randint(1,8) self.charisme = rd.randint(1,10) self.vigilance = rd.randint(1,10) self.force = 2 self.courage = rd.randint(1,10) # self.discretion = # self.lieu = None # self.lieux_precedents = self.objet = None def est_hs(self:'Personnage') -> bool: self.endurance <=0 def get_carac(self:'Personnage') -> str: return f"{self.nom} H{self.habilite} E{self.endurance} F{self.force} C{self.courage} V{self.vigilance} \n{self.objet}" def subir_degats(self:'Personnage', degats:int) -> None: if degats > 0: self.endurance = self.endurance - degats def soigner(self:'Personnage', soins:int) -> None: if soins > 0: self.endurance = self.endurance + soins def combattre(self:'Personnage', adversaire: 'Monstre') -> tuple: # Lancer les dés pour le personnage personnage_de1 = rd.randint(1, 6) personnage_de2 = rd.randint(1, 6) score_personnage = personnage_de1 + personnage_de2 + self.habilite print(f"{self.nom} lance {personnage_de1} et {personnage_de2}, score total = {score_personnage}") # Lancer les dés pour le monstre monstre_de1 = rd.randint(1, 6) monstre_de2 = rd.randint(1, 6) score_monstre = monstre_de1 + monstre_de2 + adversaire.habilite print(f"{adversaire.nom} lance {monstre_de1} et {monstre_de2}, score total = {score_monstre}") # Vérifier si l'un des deux a fait un double crit_personnage = (personnage_de1 == personnage_de2) crit_monstre = (monstre_de1 == monstre_de2) # Calculer les dégâts degats_personnage = self.force degats_monstre = adversaire.force if crit_personnage: degats_personnage *= 2 print(f"{self.nom} inflige un coup critique ! Les dégâts sont doublés !") if crit_monstre: degats_monstre *= 2 print(f"{adversaire.nom} inflige un coup critique ! Les dégâts sont doublés !") # Comparer les scores if score_personnage == score_monstre: # Les deux scores sont identiques self.subir_degats(1) adversaire.subir_degats(1) message = f"Égalité ! {self.nom} et {adversaire.nom} subissent chacun 1 point de dégâts." print(message) if self.est_hs() and adversaire.est_hs(): return ("MP", message) elif self.est_hs(): return ("P", f"{self.nom} est HS ! {adversaire.nom} reste en vie.") elif adversaire.est_hs(): return ("M", f"{adversaire.nom} est HS ! {self.nom} reste en vie.") else: return ("x", message) elif score_personnage > score_monstre: # Le personnage a gagné le combat adversaire.subir_degats(degats_personnage) message = f"{self.nom} inflige {degats_personnage} dégâts à {adversaire.nom}." print(message) if adversaire.est_hs(): return ("M", f"{adversaire.nom} est HS ! {self.nom} reste en vie.") else: return ("x", message) else: # Le monstre a gagné le combat self.subir_degats(degats_monstre) message = f"{adversaire.nom} inflige {degats_monstre} dégâts à {self.nom}." print(message) if self.est_hs(): return ("P", f"{self.nom} est HS ! {adversaire.nom} reste en vie.") else: return ("x", message) if __name__ == '__main__': a = Monstre("Squelette", "Un squelette semblant bouger seul et muni d'une épée.", "squelette.png") b = Monstre("Yone", "Yone atroce de malone qui pue sa mère", "Yone.png") c = Monstre("Viego", "Viego trop fort d'alexis lvl master", "Viego.png")