from random import randint import time class Personnage: #initialisation de la classe avec les attributs def __init__ (self, nom): self.nom = nom self.pdv = 20 self.exp = 1 self.cat = 0 self.inventaire = ["potion"] def menu(self): #le menu pour choisir ca catégorie self.cat = int(input(""" 1: guerrier 2: magicien 3: voleur 4: elfe """)) if self.cat == 1: self.cat_affiche = "guerrier" if self.cat == 2: self.cat_affiche = "magicien" if self.cat == 3: self.cat_affiche = "voleur" if self.cat == 4: self.cat_affiche = "elfe" def jet_attaque(self): #le jet de dé d'attaque lancer = randint(1, 20) if self.cat == 1 or self.cat == 2: damage = self.exp * 10 elif self.cat == 3: damage = self.exp * 3 elif self.cat == 4: damage = self.exp * 10 return lancer + damage def jet_defense(self): #le jet de dé de défense lancer = randint(1, 20) if self.cat == 1: defense = self.exp * 8 if self.cat == 2: defense = self.exp * 7 elif self.cat == 3: defense = self.exp * 9 elif self.cat == 4: defense = self.exp * 8 return lancer + defense def change_pdv(self, nb_pdv): #la méthode pour changee les points de vie self.pdv += nb_pdv def change_exp(self, nb_exp): #la méthode pour changer l'expérience if nb_exp <= 0: raise ValueError("Le nombre doit être positif ou nul") self.exp += nb_exp def affiche_caracteristiques(self): #la méthode qui affiche les caractéristiques print(""" vous vous appellez {} vous êtes un {} vous avez {} point de vie et {} éxpérience""".format(self.nom, self.cat_affiche, self.pdv, self.exp)) def affiche_inventaire(self): #la méthode qui affiche l'inventaire armes = ["épée", "bâton", "dague", "arc"] for arme in armes: if arme in self.inventaire: self.inventaire.remove(arme) if self.cat == 1: self.inventaire.append("épée") print(self.inventaire) elif self.cat == 2: self.inventaire.append("bâton") print(self.inventaire) elif self.cat == 3: self.inventaire.append("dague") print(self.inventaire) elif self.cat == 4: self.inventaire.append("arc") print(self.inventaire) else: print("vous n'avez pas de catégorie") self.menu() def combat(perso1, perso2): #le combat chaque tout l'attaquant et le défenseur jettent un dé celui qui a le meilleur score inflige des dégats à son adversaire puis les rôles s'inversent jusqu'à la défaire de l'un tour = 1 attaquant, defenseur = perso1, perso2 while perso1.pdv>0 and perso2.pdv>0: print(" --- tour {} --- \n".format(tour)) print("{} attaque".format(attaquant.nom)) attaque = attaquant.jet_attaque() defense = defenseur.jet_defense() print("l'attaque est de {} et la défense est de {}\n".format(attaque, defense)) if attaque > defense: degats = randint(1, 8) print("{} degats\n".format(degats)) defenseur.change_pdv(-degats) elif defense > attaque: degats = randint(1, 4) print("{} degats\n".format(degats)) attaquant.change_pdv(-degats) else: degats = 0 print("{} degats\n".format(degats)) if defenseur.pdv <= 0: print("{} vaincu {} gagne\n".format(defenseur.nom, attaquant.nom)) attaquant.change_exp(1) print("{} gagne 1 xp\n".format(attaquant.nom)) attaquant.affiche_caracteristiques() break if attaquant.pdv <= 0: print("{} vaincu {} gagne".format(attaquant.nom, defenseur.nom)) defenseur.change_exp(1) print("{} gagne 1 xp".format(defenseur.nom)) defenseur.affiche_caracteristiques() break print("{} a {} point de vie et {} a {} point de vie\n".format(perso1.nom, perso1.pdv, perso2.nom, perso2.pdv)) attaquant, defenseur = defenseur, attaquant tour +=1 input("appuyer sur Entrée pour continuer...\n") perso1 = Personnage("Jean") perso1.menu() perso2 = Personnage("Victor") perso2.menu() combat(perso1, perso2)