diff --git a/jeuderôleavectk.py b/jeuderôleavectk.py new file mode 100644 index 0000000..caab728 --- /dev/null +++ b/jeuderôleavectk.py @@ -0,0 +1,247 @@ +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 == "Attaquer": + 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éfendre": + 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)" + "\nSuivant: Tour n° {suiv_tour}") + +# 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="Attaquer") + +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() + +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, "Attaquer", "Potion", "Défendre") +action_menu.pack() + +tour_button = tk.Button(root, text="Tour suivant", command=lambda: tour(joueur, bot)) +tour_button.pack() + +output_text = tk.Text(root, height=10) +output_text.pack() + +# Démarrer l'interface +root.mainloop() +