from random import randint class Personnage: def __init__(self, nom, cat): self.nom = nom self.pdv = 20 self.exp = 1 self.cat = cat self.inventaire = [] if self.cat == "guerrier": self.inventaire = ["épée", "potion"] elif self.cat == "magicien": self.inventaire = ["bâton", "potion"] elif self.cat == "voleur": self.inventaire = ["dague", "potion"] elif self.cat == "elfe": self.inventaire = ["arc", "potion"] #jet d'attaque def jet_attaque(self): lancer = randint(1, 20) if self.cat == "guerrier": degats = self.exp * 10 elif self.cat == "magicien": degats = self.exp * 10 elif self.cat == "voleur": degats = self.exp * 3 elif self.cat == "elfe": degats = self.exp * 8 return lancer + degats #jet de défense def jet_defense(self): lancer = randint(1, 20) if self.cat == "guerrier": protection = self.exp * 8 elif self.cat == "magicien": protection = self.exp * 7 elif self.cat == "voleur": protection = self.exp * 9 elif self.cat == "elfe": protection = self.exp * 10 return lancer + protection #changement de points de vie et d'experience def change_pdv(self, nb_pdv): self.pdv += nb_pdv if self.pdv < 0: self.pdv = 0 def change_exp(self, nb_exp): if nb_exp < 0: raise ValueError("le parametre doit etre positif") self.exp = self.exp + nb_exp #affichages def affiche_caracteristiques(self): print(self.nom, "vous etes un", self.cat, ", vous avez", self.pdv, " points de vie et", self.exp, "points d'experience.") def affiche_inventaire(self): print(self.inventaire) # Instanciation des personnages joueur1 = Personnage("Vyke", "guerrier") joueur2 = Personnage("Ranni", "magicien") # Fonction de combat def combat(p1, p2): attaquant = p1 defenseur = p2 tour = 1 while p1.pdv > 0 and p2.pdv > 0: print("\n--- Tour {} ---".format(tour)) print("{} attaque {}".format(attaquant.nom, defenseur.nom)) att = attaquant.jet_attaque() deff = defenseur.jet_defense() print("Jet d'attaque de {} : {}".format(attaquant.nom, att)) print("Jet de défense de {} : {}".format(defenseur.nom, deff)) if att > deff: degats = randint(1, 8) defenseur.change_pdv(-degats) print("{} réussi son attaque et lance un dé à 8 faces, il obtient {}. {} perd {} PDV !".format(attaquant.nom, degats, defenseur.nom, degats)) elif att < deff: degats = randint(1, 4) attaquant.change_pdv(-degats) print("{} rate son attaque et subit une contre-attaque ! {} lance un dé à 4 faces et obtient {}. {} perd {} PDV.".format(attaquant.nom, defenseur.nom, degats, attaquant.nom, degats)) else: print("Les attaques s'annulent, personne ne perd de points de vie") # Affichage des stats attaquant.affiche_caracteristiques() defenseur.affiche_caracteristiques() input("Presse la touche entrée pour continuer") # Échange des rôles attaquant, defenseur = defenseur, attaquant tour += 1 # Fin du combat print("\n--- Fin du combat ---") if p1.pdv > 0: print("{} a gagné le combat ! Il va pouvoir fêter ça à la taverne !".format(p1.nom)) p1.change_exp(1) else: print("{} a gagné le combat ! Il va pouvoir fêter ça à la taverne !".format(p2.nom)) p2.change_exp(1) # Affichage final print("\n--- Caractéristiques finales ---") p1.affiche_caracteristiques() p2.affiche_caracteristiques() # Lancement du combat combat(joueur1, joueur2)