mathis
2 months ago
1 changed files with 247 additions and 0 deletions
@ -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() |
||||
|
|
Loading…
Reference in new issue