Recommencer mon jeu Python
Bonjour,
Je n'arrive pas à implementer un code pour pouvoir recommerncer le jeu du démineur. J'ai essayée avec while, for, return et break mais cela ne fonctionne pas ou alors c'est moi qui ne le faot pas correctement.
Pouvez-vous m'aider svp ?
Je suis débutante en Python, et voici le code
import tkinter import random gameOver = False score = 0 carrésAVérifier = 0 def jouer_démineur(): créer_terrainMiné(terrainMiné) fenêtre = tkinter.Tk() configuration_fenêtre(fenêtre) fenêtre.mainloop() terrainMiné = [] def créer_terrainMiné(terrainMiné): global carrésAVérifier for rangée in range(0,10): listeRangée = [] for colonne in range(0,10): if random.randint(1,100) < 20: listeRangée.append(1) else: listeRangée.append(0) carrésAVérifier = carrésAVérifier + 1 terrainMiné.append(listeRangée) #printTerrain(terrainMiné) def printTerrain(terrainMiné): for listeRangée in terrainMiné: print(listeRangée) def configuration_fenêtre(fenêtre): for numéroRangée, listeRangée in enumerate(terrainMiné): for numéroColonne, entréeColonne in enumerate(listeRangée): if random.randint(1,100) < 25: carré = tkinter.Label(fenêtre, text = " ", bg = "darkgreen") elif random.randint(1,100) < 75: carré = tkinter.Label(fenêtre, text = " ", bg = "seagreen") else: carré = tkinter.Label(fenêtre, text = " ", bg = "green") carré.grid(row = numéroRangée, column = numéroColonne) carré.bind("<Button-1>", quand_cliqué) def quand_cliqué(event): global score global gameOver global carrésAVérifier carré = event.widget rangée = int(carré.grid_info()["row"]) colonne = int(carré.grid_info()["column"]) texteActuel = carré.cget("text") if gameOver == False: if terrainMiné[rangée][colonne] == 1: gameOver = True carré.config(bg = "red") print("GAME OVER ! Tu as touché une bombe !") print("Ton score :", score) answer = input ("Voulez_vous_rejouer (Oui/Non): ") Tk = tkinter fenetre = Tk() fenetre.destroy() if answer == "Oui": return jouer_démineur else: print("À bientôt") elif texteActuel == " ": carré.config(bg = "brown") totalBombes = 0 if rangée < 9: if terrainMiné[rangée+1][colonne] == 1: totalBombes = totalBombes + 1 if rangée > 0: if terrainMiné[rangée-1][colonne] == 1: totalBombes = totalBombes + 1 if colonne > 0: if terrainMiné[rangée][colonne-1] == 1: totalBombes = totalBombes + 1 if colonne < 9: if terrainMiné[rangée][colonne+1] == 1: totalBombes = totalBombes + 1 if rangée > 0 and colonne > 0: if terrainMiné[rangée-1][colonne-1] == 1: totalBombes = totalBombes + 1 if rangée < 9 and colonne > 0: if terrainMiné[rangée+1][colonne-1] == 1: totalBombes = totalBombes + 1 if rangée > 0 and colonne < 9: if terrainMiné[rangée-1][colonne+1] == 1: totalBombes = totalBombes + 1 if rangée < 9 and colonne < 9: if terrainMiné[rangée+1][colonne+1] == 1: totalBombes = totalBombes + 1 if totalBombes == 0: carré.config(bg = "tomato") if totalBombes == 1: carré.config(bg = "blue") if totalBombes == 3: carré.config(bg = "yellow") if totalBombes == 2: carré.config(bg = "pink") if totalBombes == 4: carré.config(bg = "orange") carré.config(text = " " + str(totalBombes) + " ") carrésAVérifier = carrésAVérifier - 1 score = score + 1 if carrésAVérifier == 0: gameOver = True print("Bravo, tu as trouvé tous les carrés non minés.") print("Ton score :", score) jouer_démineur()
Modération : merci de mettre en forme le code
3 réponses
bonjour,
qu'as-tu essayé? montre ton code avec while.
Quand tu partages du code, tiens compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Bonjour,
De plus, tu devrais éviter les caractères accentués dans les noms de variables
Agrandis la fenêtre principale et pose plutôt la question dedans, (avec des Labels et des Entry)
pas avec des print et des inputs dans la console
Tu crée la fenêtre dans une fonction et tu la détruis dans une autre: pas terrible tout ça
Ca donnerait ça:
Pas besoin de boucle pour rejouer: si tu veux rejouer, tu cliques le bouton si non, tu fermes la fenetre
Tu peux simplifier des trucs:
colors = ["tomato", "blue", "yellow", "pink", "orange"] carre.config(bg = colors[totalBombes])
Bonjour,
Quelques conseils (dont certains repris du message de Phil_1857 #1)
- Évite les caractères accentués et les caractères spéciaux dans le code
- Évite les variables globales (si tu sais faire des classe, envelopper le jeu dans une classe qui maintient l'état de la partie est sans doute une bonne idée)
- Pour plus de confort, privilégie les Label / Entry aux print / input
- Essaye d'avoir un nommage consistant (soit maFonction, soit ma_fonction). Normalement en python le style est le camel-case pour les classes (MaClasse) et sinon tout en minuscule avec des _ (ma_variable, ma_fonction, ma_methode)
- Je recommande d'utiliser un nommage en anglais.
Pour revenir à ton problème, quand la partie se termine, il faudrait afficher un bouton couplé avec une fonction (appelons-la reset) qui appelle créer_terrainMiné, vide la fenêtre de son contenu actuel, et réappelle configuration_fenêtre.
Bonne chance