from random import randint class Personnage : def __init__(self, nom, cat) : """initialisation des attributs de la classe Personnage""" self.nom = nom categories = ["guerrier", "magicien", "voleur", "elfe"] self.cat = categories[cat] self.pv = 20 self.exp = 1 if self.cat == "guerrier" : self.inv = ["épée", "potion"] elif self.cat == "magicien" : self.inv = ["bâton", "potion"] elif self.cat == "voleur" : self.inv = ["dague","potion"] elif self.cat == "elfe" : self.inv = ["arc","potion"] def jet_attaque(self) : """fonction permettant de faire un jet de dé d'attaque""" resultat_de = randint(1, 20) if self.cat == "guerrier" or self.cat == "magicien" : return resultat_de+self.exp*10 elif self.cat == "voleur" : return resultat_de+self.exp*3 elif self.cat == "elfe" : return resultat_de+self.exp*8 def jet_defense(self) : """fonction permettant de faire un jet de dé de défense""" resultat_de = randint(1,20) if self.cat == "guerrier" : return resultat_de+self.exp*8 elif self.cat == "magicien" : return resultat_de+self.exp*7 elif self.cat == "voleur" : return resultat_de+self.exp*9 elif self.cat == "elfe" : return resultat_de+self.exp*10 def change_pv(self, nb_pv) : """fonction permettant de changer les points de vie d'un personnage""" self.pv += nb_pv if self.pv < 0 : self.pv = 0 def change_exp(self, nb_exp) : """fonction permettant de changer l'expèrience d'un personnage""" self.exp += nb_exp def affiche_caracteristiques(self) : """fonction permettant d'afficher les caractéristiques d'un personnage""" print(f"{self.nom} le {self.cat} a actuellement {self.pv} PV et {self.exp} EXP") def affiche_inventaire(self) : """fonction permettant d'afficher l'inventaire d'un personnage""" print(f"Bonjour {self.nom}, voici ton inventaire :") for i in range(len(self.inv)) : print(f"- {self.inv[i]}") def creation_perso() : """création d'un personnage""" pseudo = input("Comment s'appelle votre personnage ? ") categorie = int(input("De quel catégorie est votre personnage ? (0 pour guerrier, 1 pour magicien, 2 pour voleur, 3 pour elfe) ")) while not(0 <= categorie <= 3) : categorie = int(input("De quel catégorie est votre personnage ? (0 pour guerrier, 1 pour magicien, 2 pour voleur, 3 pour elfe) ")) return Personnage(pseudo, categorie) def phase_combat(attaquant, defenseur) : """fonction permettant de faire un round du combat principal""" degats = attaquant.jet_attaque() defense = defenseur.jet_defense() if degats == defense : print("il y a égalité sur les lancés, personne ne prend de dégâts") print() elif degats > defense : perte_pv = randint(-8,-1) defenseur.change_pv(perte_pv) print(f"{attaquant.nom} inflige {abs(perte_pv)} dégâts d'attaque à {defenseur.nom}") print() elif degats < defense : perte_pv = randint(-4,-1) attaquant.change_pv(perte_pv) print(f"{defenseur.nom} se défend parfaitement et inflige même {abs(perte_pv)} dégâts de contre à {attaquant.nom}") print() attaquant.affiche_caracteristiques() print() defenseur.affiche_caracteristiques() print() print("appuyer sur entrée pour continuer") input() def combat() : """fonction principale permettant de faire un combat entre 2 personnages""" perso1 = creation_perso() perso2 = creation_perso() print() while perso1.pv > 0 and perso2.pv > 0 : phase_combat(perso1, perso2) if perso1.pv > 0 and perso2.pv > 0 : phase_combat(perso2, perso1) if perso1.pv == 0 : print("le combat est terminé") print(f"{perso2.nom} a triomphé de {perso1.nom} et gagne 1 EXP") perso2.change_exp(1) elif perso2.pv == 0 : print("le combat est terminé") print(f"{perso1.nom} a triomphé de {perso2.nom} et gagne 1 EXP") perso1.change_exp(1) combat()