### commentaires : le code est lisible. Par contre il faut appeler la fonction pour lancer le jeu ### ce qui n'est pas pratique. Le raise est une idée pour gérer l'erreur mais pas ici car le jeu ### plante alors que l'on aurait préféré un message pour redemander. ### le programme n'est pas fonctionnel car vous confonder attributs et méthodes. pdv est un attribut ### donc pas de () ### la méthode change_pdv() doit prendre un autre argument, le nombre de point de vie à enlever (ou ajouter) ### vous commencez les second tour sans savoir s'il reste des points de vie pour les persos ### programme à tester d'avantage car les erreurs sont facile à corriger ### note : 15 (classe : 11/12 prog : 4/8) import tkinter as tk import time 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"] self.coefatk = 10 self.coefdef = 8 elif self.cat == "magicien": self.inventaire = ["bâton", "potion"] self.coefatk = 10 self.coefdef = 7 elif self.cat == "voleur": self.inventaire = ["dague", "potion"] self.coefatk = 3 self.coefdef = 9 elif self.cat == "elfe": self.inventaire = ["arc", "potion"] self.coefatk = 8 self.coefdef = 10 else: raise ValueError ("La classe selectionné n'est pas disponible.") def jet_attaque(self): atkdé = randint(1, 20) return self.exp * self.coefatk + atkdé def jet_defense(self): defdé = randint(1, 20) return self.exp * self.coefdef + defdé def change_pdv(self): self.pdv += nb_pdv return self.pdv def change_exp(self): nb_exp = 1 self.exp += nb_exp return self.exp def affiche_caracteristiques(self): print(f"NOM: {self.nom} \n CATEGORIE : {self.cat} \n PV : {self.pdv} \n XP : {self.exp}") def affiche_inventaire(self): print(f"Dans votre sac vous avez : {self.inventaire}") # Partie Jeu def game(): #Joueur N°1 (l'attaquant) Pl1_name = input("Comment vous nommez-vous cher aventurier ? ") print("Bonjour cher", Pl1_name) Pl1_cat = input("Quelle catégorie voulez-vous être ? \n1: Guerrier \n2: Magicien \n3: Voleur \n4: Elfe\n") if Pl1_cat == "1": Pl1_cat = "guerrier" elif Pl1_cat == "2": Pl1_cat = "magicien" elif Pl1_cat == "3": Pl1_cat = "voleur" elif Pl1_cat == "4": Pl1_cat = "elfe" print("Vous etes désormais un(e)", Pl1_cat) #Joueur N°2 (le défenseur) Pl2_name = input("Et vous, aventurier N°2, comment vous nommez-vous ? ") print("Bonjour cher", Pl1_name) Pl2_cat = input("Quelle catégorie voulez-vous être ? \n1: Guerrier \n2: Magicien \n3: Voleur \n4: Elfe\n") if Pl2_cat == "1": Pl2_cat = "guerrier" elif Pl2_cat == "2": Pl2_cat = "magicien" elif Pl2_cat == "3": Pl2_cat = "voleur" elif Pl2_cat == "4": Pl2_cat = "elfe" print("Vous etes maintenant un(e)", Pl2_cat) Player_1 = Personnage(Pl1_name, Pl1_cat) Player_2 = Personnage(Pl2_name, Pl2_cat) print(Player_1.affiche_caracteristiques(), Player_1.affiche_inventaire()) time.sleep(1.5) print(Player_2.affiche_caracteristiques(), Player_2.affiche_inventaire()) time.sleep(2.5) #La suite du programme ne marche pas "TypeError: 'int' object is not callable", j'ai beau chercher comment règler l'érreur je n'y arrive pas." #De plus, il a pas l'air d'être très bon while Player_1.pdv() > 0 and Player_2.pdv() > 0: Attaquant = Player_1.jet_attaque() Defenseur = Player_2.jet_defense() if Attaquant > Defenseur: nb_pdv = -(randint(1, 8)) Player_2.change_pdv() print(Player_2.nom(), "a été blessé lors de l'attaque, il a", Player_2.pdv(), "PV") else: nb_pdv = -(randint(1, 4)) Player_1.change_pdv() print(Player_1.nom(), "a été blessé suite à la défense, il a", Player_1.pdv(), "PV") time.sleep(3) Attaquant = Player_1.jet_defense() Defenseur = Player_2.jet_attaque() if Defenseur > Attaquant: nb_pdv = -(randint(1, 8)) Player_1.change_pdv() print(Player_1.nom(), "a été blessé lors de l'attaque, il a", Player_1.pdv(), "PV") else: nb_pdv = -(randint(1, 4)) Player_2.change_pdv() print(Player_2.nom(), "a été blessé suite à la défense, il a", Player_2.pdv(), "PV") time.sleep(3) break if Player_1.pdv() >= 1: print(Player_1.nom(), "a gagné.") else : print(Player_2.nom(), "a gagné.")