### Eviter d'importer random brutalement ### Classe fonctionnelle ### votre variable dmg n'est pas bien placée suivant le test que l'on effectue ce qui fait planter le jeu ### mettre toutes vos fonction avant le programme principal, puis déclaration de variable et appel fonctions ### le print dans le input n'est pas très judicieux (Des None apparaissent ...) ### un très bon travail mais il reste quelques réglages à faire, même petits problèmes sur la version interface graphique. ### note : 19/20 (classe : 12/12 prog : 7/8) import random #--class class Personne: def __init__(self, nom, cat): self.__nom = nom self.__xp = 1 self.__cat = cat self.__pot = 2 if self.__cat == 'guerrier': self.__hp = 20 elif self.__cat == 'mage': self.__hp =20 elif self.__cat == 'voleur': self.__hp = 30 elif self.__cat == 'elfe': self.__hp = 22 if cat == 'guerrier': self.__inv = ['epee', 'potion'] elif cat == 'mage': self.__inv = ['baton', 'potion'] elif cat == 'voleur': self.__inv = ['dague', 'potion'] elif cat == 'elfe': self.__inv = ['arc', 'potion'] if self.get_cat() == 'guerrier' or self.get_cat() == 'mage': self.__coefAtq = 10 elif self.get_cat() == 'voleur': self.__coefAtq = 3 elif self.get_cat() == 'elfe': self.__coefAtq = 8 if self.get_cat() == 'guerrier': self.__coefDef = 8 elif self.get_cat() == 'mage': self.__coefDef = 7 elif self.get_cat() == 'voleur': self.__coefDef = 9 elif self.get_cat() == 'elfe': self.__coefDef = 10 def get_nom(self): return self.__nom def get_hp(self): return self.__hp def get_xp(self): return self.__xp def get_cat(self): return self.__cat def get_pot(self): return self.__pot def get_inv(self): return self.__inv def get_coef_atq(self): return self.__coefAtq def get_coef_def(self): return self.__coefDef def set_nom(self, nom): self.__nom = nom def jet_attaque(self): return random.randint(1, 20) + (self.get_xp()*self.get_coef_atq()) def jet_defense(self): return random.randint(1, 20) + (self.get_xp()*self.get_coef_def()) def change_pdv(self, nb_pdv): self.__hp += nb_pdv def change_exp(self, nb_exp): self.__xp += nb_exp def affiche_caracteristiques(self): print('caractéristiques de ', self.get_nom(),':', '\n catégorie: ', self.get_cat(), '\n hp: ', self.get_hp(), '\n xp: ', self.get_xp(), ) def affiche_inventaire(self): print('\n votre inventaire: ', self.get_inv()) #--main nb_tour = 0 liste_tour = ['bot', 'joueur'] #--round def tour(attaquant, defenseur): global nb_tour nb_tour += 1 liste_tour.reverse() attaquant = liste_tour[0] defenseur = liste_tour[1] nb_potions = joueur.get_pot() if attaquant == 'joueur': print("\nTour n°", nb_tour) action = input(print("\nvous pouvez attaquer ou utiliser une potion de soins(possédée(s):", nb_potions, "),", "\nquelle est votre action?", "\nA pour attaquer / E pour potion")).upper() if action == "A": dmg = joueur.jet_attaque() print("\nvous lancez un jet d'attaque...", "\nvotre jet d'attaque vaut: ", dmg, "...") shield = bot.jet_defense() print("\ndonc votre adversaire lance un jet de defense...", "\nle jet de defense ennemie vaut: ", shield, "...") elif action == "E": if nb_potions < 0: joueur.change_pdv(10) joueur.__pot -= 1 print("\nvous vous soignez...", "\nil vous reste ", joueur.get_pot(), " potion(s)") else: print("\nvous n'avez plus de potions") tour(attaquant, defenseur) if dmg > shield: nb_pdv = (-1) * random.randint(1,8) bot.change_pdv(nb_pdv) print("\nvous avez remporté le tour...", "\net infligé ", -nb_pdv, "pts de dégats à l'ennemie!") elif dmg < shield: nb_pdv = (-1) * random.randint(1,4) joueur.change_pdv(nb_pdv) print("\nvous avez perdu le tour...", "\net reçu ", -nb_pdv, "pts de dégats de l'ennemie!") else: print('\nparade parfaite: aucun des joueur ne perd de points de vie') elif attaquant == 'bot': print("\nTour n°", nb_tour) dmg = bot.jet_attaque() print("\nvotre adversaire lance un jet d'attaque...", "\nle jet d'attaque ennemie vaut: ", dmg, "...") action = input(print("\nvous pouvez vous defendre ou utiliser une potion de soins(possédée(s):", nb_potions, "),", "\nquelle est votre action?", "\nZ pour defendre / E pour potion")).upper() if action =="Z": shield = joueur.jet_defense() print("\nvous lancez un jet de defense...", "\nvotre jet de defense vaut: ", shield, "...") elif action == "E": if nb_potions < 0: joueur.change_pdv(10) joueur.__pot -= 1 print("\nvous vous soignez...", "\nil vous reste ", joueur.get_pot(), " potion(s).") else: print("\nvous n'avez plus de potions") tour(attaquant, defenseur) if dmg > shield: nb_pdv = (-1) * random.randint(1,8) joueur.change_pdv(nb_pdv) print("\nvous avez perdu le tour...", "\net reçu ", -nb_pdv, "pts de dégats de l'ennemie!") elif dmg < shield: nb_pdv = (-1) * random.randint(1,4) bot.change_pdv(nb_pdv) print("\nvous avez remporté le tour...", "\net infligé ", -nb_pdv, "pts de dégats à l'ennemie!") else: print('\nparade parfaite: aucun des joueur ne perd de points de vie') #--game liste = ['defenseur', 'attaquant'] def jeu(joueur, bot): jhp = player.get_hp() bhp = enemy.get_hp() liste.reverse() joueur = liste[0] bot = liste[1] if joueur == 'attaquant' and jhp > 0 and bhp > 0: tour(joueur, bot) player.affiche_caracteristiques() enemy.affiche_caracteristiques() jeu(joueur, bot) elif bot == 'attaquant' and jhp > 0 and bhp > 0: tour(bot, joueur) player.affiche_caracteristiques() enemy.affiche_caracteristiques() jeu(joueur, bot) elif player.get_hp() > 0: player.change_exp(1) print("\n VICTOIRE!", "\nvous avez gagné le combat! et remporté 1 point d'experience!") joueur = Personne('joueur', 'guerrier') bot = Personne('bot', 'voleur') else: enemy.change_exp(1) print("\n DEFAITE!", "\nvous avez perdu!") joueur = Personne('joueur', 'guerrier') bot = Personne('bot', 'voleur') #--player character choice def choix(): n = input("\nquel est le nom de votre personnage? :") classe = input("\nappuyez sur: \n A pour guerrier, \n Z pour mage, \n E pour voleur, \n R pour elfe \n").upper() if classe == "A": return Personne(n, "guerrier") if classe == "Z": return Personne(n, "mage") if classe == "E": return Personne(n, "voleur") if classe == "R": return Personne(n, "elfe") #--random bot def rand(): name = ["Darius", "Garen", "Zac", "Ashe", "Elise", "Gwen"] cat = ["guerrier", "mage", "voleur", "elfe"] name_r = random.choice(name) cat_r = random.choice(cat) return Personne(name_r, cat_r) joueur = choix() player = joueur bot = rand() enemy = bot jeu(joueur, bot)