Comment créer une interface graphique simple pour mon jeu
AO._17 Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
En gros j'ai besoin de faire une petite interface graphique simple et efficace pour mon jeu "Bulls and Cows" (vous pouvez chercher le but du jeu mais en gros il faut essayer de trouver un code qui est une suite de 4 chiffres tous différents et à chaque coup on vous dit combien de nombres sont à la bonne place : les bulls et combien sont à la mauvaise place : les cows) mais je sais pas trop comment m'y prendre. J'ai regardé des vidéos mais c'est pas assez claire pour ce que je veux faire. Voici le code du jeu :
from math import * from random import * from tkinter import * window = Tk() window.title("Bulls and Cows") #window.geometry("500x800") window.minsize(500, 800) window.maxsize(500, 800) label_title = Label (window, text = "BIENVENUE DANS LE JEU BULLS AND COWS !") label_title.pack() window.mainloop() def genere_secret(): """ none ---> str La fonction genere_secret permet de générer les codes secrets valides """ liste = sample(range(10),4) # tire 4 chiffres différents au hasard parmi {0,...,9} secret ="".join([str(n) for n in liste]) # transforme la liste en texte return secret # Exercice 7 def valide_code(code): """ str ---> bool La fonction valide_code(code) qui renvoie un booléén indiquant si code est valide """ # On vérifie la longueur if len(code) != 4: return False # On parcourt les symboles for i in range(4): # On compare le chiffre avec les suivants for j in range(i+1, 4): if code[i] == code[j]: return False # On vérifie que c'est un chiffre if code[i] not in "0123456789": return False return True # Exercice 8 def demande(): """ str ---> str La fonction demande() demande à l'utilisateur de donner un code, tant que celui-ci n'est pas valide et renvoie en sortie le code valide obtenu """ code = "" while not valide_code(code) == True: code = input("Entrer un code valide : ") return code # Exercice 9 def tentative(code, secret): """ str, str ---> int, int La fonction tentative(code,secret) prend un code et le secret en entrée et renvoie le nombre de chiffres bien placés (bulls) et mal placés (cows) """ bulls = 0 cows = 0 for i in range(4): if code[i] == secret[i]: bulls += 1 elif secret[i] in code: cows += 1 return bulls, cows # Exercice 10 def affichage(codes, secret): """ list, str ---> str La fonction affichage(codes, secret) prend une liste de codes et le secret, et affiche les résultats pour chacun des codes """ for i in range(len(codes)): bulls, cows = tentative(codes[i], secret) print(f"{i+1}) {codes[i]} {bulls}B {cows}C") # Exercice 11 def partie(): """ none ---> str La fonction partie() permet à l'utilisateur d'essayer de deviner le code secret choisit par l'ordinateur et lui affiche s'il trouve le code secret le nombre de coups nécessairres """ # On génère un secret secret = genere_secret() #print(secret) n = 0 code = "" codes = [] # On continue jusqu'à ce que le secret soit trouvé while code != secret: # On demande un code à l'utilisateur n += 1 if n > 5 : # Si le nombre de tentative est atteind, on sort de la boucle while break code = demande() codes.append(code) affichage(codes, secret) if n > 5 : # Si les 5 tentatives sont épuisées, affiche le message de défaite print("Vous n'avez plus de tentative ! Vous avez perdu ! Le code secret était",secret) else : # Sinon, affiche le message de victoire print(f"Bravo, vous avez trouvé en {n} tentative(s).")
Les programmes du jeu sont très simples mais j'aimerais juste que le jeu soit sous forme d'une interface graphique (avec tkinter). Quelque chose comme ça à peu près :

Je souhaite donc que ça soit sous cette forme. Nous avons donc un input où nous insérons notre code valide. Puis on a un nombre de tentatives (dans mon jeu il est limité à 5 tentatives). Et ensuite en bas nous avons notre code que nous avons tapé avec le nombre de bulls et de cows. Si le joueur trouve le nombre, on lui affiche le message de fin en lui disant en combien de tentatives il a trouvé sinon on dit qu'il a perdu. Et bien évidemment un bouton nouvelle partie pour rejouer. Le jeu est assez simple et tout est compréhensible dans mon programme. Donc si quelqu'un pourrait m'aider pour mon interface, sa ferait plaisir.
Windows / Chrome 122.0.0.0
- Comment créer une interface graphique simple pour mon jeu
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte google - Guide
- Comment créer un compte gmail - Guide
- Créer une adresse hotmail - Guide
6 réponses
Bonsoir.
Un truc simple que tu devrais comprendre et pouvoir compléter.
# On garde les modules dans leurs boites (namespace) import random import tkinter as tk from tkinter import font as tkfont def generate_secret(size): """ int ---> str La fonction genere_secret permet de générer les codes secrets valides """ # Bien plus simple et ainsi pas besoin de transtyper return ''.join(random.sample('0123456789', size)) # tire 4 chiffres différents au hasard parmi {0,...,9} # liste = random.sample(range(10), 4) # transforme la liste en texte # secret = "".join([str(n) for n in liste]) # return secret def validate_code(value): # Fonction autorisant la saisie d'un car. # dans l'entry, value (%P) représente la # valeur de l'entry + dernier car. saisi button_code['state'] = tk.DISABLED if not value: return True if not value.isdigit(): return False length = len(value) if length == 1: return True if length == 5: # On ne valide pas le car. mais activation # du bouton, car la valeur est toujours correcte button_code['state'] = tk.ACTIVE return False if length <= 4 and len(set(value)) == length: if length == 4: button_code['state'] = tk.ACTIVE return True return False def play(): # démarrage partie game['secret_code'] = generate_secret(4) insert_text('coucou') insert_text('coucou') insert_text('coucou') def replay(): text_result['state'] = tk.NORMAL text_result.delete(1.0, tk.END) # Clear text text_result['state'] = tk.DISABLED button_replay['state'] = tk.DISABLED game['current_try'] = 0 play() def entry_process(): # C'est ici que tout se passe # traitement de la valeur saisie à faire # Nul besoin de la contrôler puisque déjà # fait en amont print(entry_code.get()) # str print(game['secret_code']) entry_code.delete(0, tk.END) # clear def insert_text(value, value_sep='\n' * 3): text_result['state'] = tk.NORMAL text_result.insert(tk.END, f'{value}{value_sep}') text_result['state'] = tk.DISABLED window = tk.Tk() FONTS = dict( title=tkfont.Font(family='serif', size=14, weight='bold'), text=tkfont.Font(family='serif', size=12), ) # Si besoin d'autres valeurs au jeu # les stocker dans game game = dict( secret_code='', try_max=5, current_try=0, ) window.title('Bulls and Cows') window.resizable(False, False) window.columnconfigure(0, weight=1) window.columnconfigure(1, weight=1) window.columnconfigure(2, weight=1) label_title = tk.Label( window, text="BIENVENUE DANS LE JEU BULLS AND COWS !", font=FONTS['title'], ) label_title.grid( row=0, column=0, columnspan=3, sticky=tk.EW, pady=(15, 10), ) label_code = tk.Label(window, text='Entrez un code valide',) label_code.grid(row=1, column=0, sticky=tk.E, pady=5,) check_code = window.register(validate_code) entry_code = tk.Entry( window, validate='key', # %P représente la valeur de l'entry + car. saisi validatecommand=(check_code, '%P'), ) entry_code.grid(row=1, column=1, sticky=tk.EW, padx=5, pady=5,) button_code = tk.Button( window, text='OK', state=tk.DISABLED, command=entry_process, font=FONTS['text'], ) button_code.grid(row=1, column=2, sticky=tk.W, pady=5,) label_tentatives = tk.Label( window, text='tentatives :', font=FONTS['text'], ) label_tentatives.grid( row=2, column=0, sticky=tk.E, padx=(0, 5), pady=5, ) # C'est le texte de ce label qui sera à changer # pour indiquer le nombre de tentatives label_tentatives_count = tk.Label(window, text='0', font=FONTS['text'],) label_tentatives_count.grid(row=2, column=1, sticky=tk.W, pady=5) text_result = tk.Text( window, highlightthickness=0, takefocus=False, state=tk.DISABLED, bg='white', fg='black', font=FONTS['text'], height=(game['try_max'] + 1) * 3, ) text_result.grid(row=3, column=0, columnspan=3, padx=10, pady=5) label_result = tk.Label( window, height=3, text='résultat partie ici', font=FONTS['text'] ) label_result.grid(row=4, column=0, columnspan=3, padx=5, pady=5) button_replay = tk.Button( window, text='Nouvelle partie', command=replay, state=tk.DISABLED, font=FONTS['text'], ) button_replay.grid(row=5, column=0, columnspan=3, pady=(5, 25),) play() window.mainloop()
Tout est réalisé et indiqué dans le code pour que tu puisses insérer dans les widgets tkinter dédiés tes valeurs..
Bonne continuation.
bonjour, je pense que tkinter est le bon choix pour faire cela.
Ce n'est cependant pas évident pour un débutant, il te faudra un peu de temps et d'énergie pour te former.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question