import tkinter as tk 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 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 # Fonction pour gérer les tours de jeu def tour(attaquant, defenseur): global nb_tour, output_text nb_tour += 1 liste_tour.reverse() attaquant = liste_tour[0] defenseur = liste_tour[1] nb_potions = joueur.get_pot() output_text.insert(tk.END, f"\nTour n° {nb_tour} (attaquez sur tour pair et defendez sur un tour impair") if attaquant == 'joueur': action = action_var.get() if action == "Attaque": dmg = joueur.jet_attaque() shield = bot.jet_defense() if dmg > shield: nb_pdv = (-1) * random.randint(1, 8) bot.change_pdv(nb_pdv) output_text.insert(tk.END, f"\nVous attaquez et infligez { -nb_pdv } pts de dégâts à l'ennemi !") elif dmg < shield: nb_pdv = (-1) * random.randint(1, 4) joueur.change_pdv(nb_pdv) output_text.insert(tk.END, f"\nVous perdez et recevez { -nb_pdv } pts de dégâts de l'ennemi !") else: output_text.insert(tk.END, "\nParade parfaite, aucun joueur ne perd de points de vie.") elif action == "Potion": if nb_potions > 0: joueur.change_pdv(10) joueur.__pot -= 1 output_text.insert(tk.END, f"\nVous utilisez une potion de soin. Il vous reste {joueur.get_pot()} potion(s).") else: output_text.insert(tk.END, "\nVous n'avez plus de potions.") elif action == "Défendre": shield = joueur.jet_defense() dmg = bot.jet_attaque() if shield > dmg: output_text.insert(tk.END, f"\nVous défendez parfaitement l'attaque de l'ennemi!") else: nb_pdv = (-1) * random.randint(1, 4) joueur.change_pdv(nb_pdv) output_text.insert(tk.END, f"\nVous recevez { -nb_pdv } pts de dégâts en dépit de votre défense !") else: dmg = bot.jet_attaque() action = action_var.get() if action == "Défense": shield = joueur.jet_defense() if dmg > shield: nb_pdv = (-1) * random.randint(1, 8) joueur.change_pdv(nb_pdv) output_text.insert(tk.END, f"\nL'ennemi vous attaque et inflige { -nb_pdv } pts de dégâts !") elif dmg < shield: nb_pdv = (-1) * random.randint(1, 4) bot.change_pdv(nb_pdv) output_text.insert(tk.END, f"\nVous parvenez à infliger { -nb_pdv } pts de dégâts à l'ennemi !") else: output_text.insert(tk.END, "\nParade parfaite, aucun joueur ne perd de points de vie.") # Mise à jour des labels joueur_hp_label.config(text=f"HP Joueur: {joueur.get_hp()}") bot_hp_label.config(text=f"HP Bot: {bot.get_hp()}") joueur_potion_label.config(text=f"Potions: {joueur.get_pot()}") if joueur.get_hp() <= 0: output_text.insert(tk.END, "\nDEFAITE! Vous avez perdu!") elif bot.get_hp() <= 0: output_text.insert(tk.END, "\nVICTOIRE! Vous avez gagné!") # Fonction pour démarrer le jeu def start_game(): global joueur, bot, nb_tour, liste_tour, suiv_tour nb_tour = 0 suiv_tour = nb_tour + 1 liste_tour = ['bot', 'joueur'] # Choix du joueur nom = name_var.get() classe_input = class_var.get().upper() if classe_input == "A": classe = "guerrier" elif classe_input == "Z": classe = "mage" elif classe_input == "E": classe = "voleur" elif classe_input == "R": classe = "elfe" else: output_text.insert(tk.END, "\nClasse invalide! Choisissez A pour guerrier, Z pour mage, E pour voleur ou R pour elfe.") return joueur = Personne(nom, classe) # Création du bot bot = rand() output_text.insert(tk.END, f"\nDébut du combat : {joueur.get_nom()} (Joueur) contre {bot.get_nom()} (Bot)") joueur_hp_label.config(text=f"HP Joueur: {joueur.get_hp()}") bot_hp_label.config(text=f"HP Bot: {bot.get_hp()}") joueur_potion_label.config(text=f"Potions: {joueur.get_pot()}") output_text.insert(tk.END, f"\nAcutel: Tour n° {nb_tour} (attaquez sur tour pair et defendez sur un tour impair)") # Random bot generator 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) # Interface graphique Tkinter root = tk.Tk() root.title("Baldur's Bait") root.geometry("600x500") # Widgets name_var = tk.StringVar() class_var = tk.StringVar() action_var = tk.StringVar(value="Attaque") name_label = tk.Label(root, text="Nom du joueur:") name_label.pack() name_entry = tk.Entry(root, textvariable=name_var) name_entry.pack() # Ajout des informations sur les classes class_info_label = tk.Label(root, text="Classes disponibles:\n" "Guerrier (HP 20, Attaque et Défense élevées)\n" "Mage (HP 20, Attaque élevée, Défense moyenne)\n" "Voleur (HP 30, Attaque faible, Défense élevée)\n" "Elfe (HP 22, Attaque moyenne, Défense très élevée)") class_info_label.pack() class_label = tk.Label(root, text="Classe:\n" "A pour Guerrier / Z pour Mage / E pour Voleur / R pour Elfe") class_label.pack() class_entry = tk.Entry(root, textvariable=class_var) class_entry.pack() start_button = tk.Button(root, text="Commencer le jeu", command=start_game) start_button.pack() stats = tk.Label(root, text="Les statistiques sont affichées ici:") stats.pack() joueur_hp_label = tk.Label(root, text="HP Joueur:") joueur_hp_label.pack() bot_hp_label = tk.Label(root, text="HP Bot:") bot_hp_label.pack() joueur_potion_label = tk.Label(root, text="Potions:") joueur_potion_label.pack() action_label = tk.Label(root, text="Action:") action_label.pack() action_menu = tk.OptionMenu(root, action_var, "Attaque", "Potion", "Défense") action_menu.pack() tour_button = tk.Button(root, text="Lancer", command=lambda: tour(joueur, bot)) tour_button.pack() output_text = tk.Text(root, height=10) output_text.pack() # Démarrer l'interface root.mainloop()