Recommencer mon jeu Python

Fermé
ChewilD - Modifié le 15 févr. 2023 à 15:41
mamiemando Messages postés 33392 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 16 févr. 2023 à 15:29

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

A voir également:

3 réponses

yg_be Messages postés 23356 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 554
14 févr. 2023 à 17:23

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

0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 15 févr. 2023 à 09:06

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])
0
mamiemando Messages postés 33392 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 803
16 févr. 2023 à 15:29

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

0