Puissance 4 python tkinter affichage du gagant [Résolu]

Signaler
Messages postés
3
Date d'inscription
mercredi 26 mai 2021
Statut
Membre
Dernière intervention
28 mai 2021
-
 Spirali -
Bonjour à tous !

J'ouvre ce topic car j'ai besoin d'un peu d'aide sur mon programme...

Mon problème est le suivant : Comment détecter que l'un des joueurs a gagné ?

Le programme aligne bien les jetons mais je ne sais pas comment détecter les pions de façon diagonale / horizontale / verticale

Merci à ceux qui répondront . Et n’hésitez pas à me donner des conseils pour améliorer mon programme :)

Voici mon programme :
from tkinter import *

fenetre = Tk()
fenetre.title("Grille")
fenetre.geometry("900x800")


Zone=Canvas(fenetre, width = 1000, height = 900, bg = "lightgrey")
Zone.place(x = 0, y = 0)

matrice = [[0,0,0,0,0,0,0],
           [0,0,0,0,0,0,0],
           [0,0,0,0,0,0,0],
           [0,0,0,0,0,0,0],
           [0,0,0,0,0,0,0],
           [0,0,0,0,0,0,0]]

def ligneVerticale(x):
    y1=99
    y2=702
    Zone.create_line(x,y1,x,y2,width=3,fill="blue")

def ligneHorizontale(x):
    x1=99
    x2=802
    Zone.create_line(x1,x,x2,x,width=3,fill="blue")

y = 0
while y != 900:
    ligneVerticale(y)
    y += 100

x=0
while x != 800:
    ligneHorizontale(x)
    x += 100

def trouverColonne(xClic):
    colonne = (xClic)//100-1 
    return colonne

def trouverLigne(colonne):
    ligne1 = 5
    for i in range(6):        #Vérifier si des jetons sont déjà présent dans la colonne pour choisir la ligne
        if matrice[ligne1][colonne] == 0:
            ligne = ligne1
        else:
            ligne1 -= 1
    return ligne
    

joueur = 1

def clic(event):
    global joueur
    xClic, yClic = event.x, event.y
    if 100 < xClic < 800: #Vérifier que le clic est dans le tableau
        colonne = trouverColonne(xClic)
        ligne = trouverLigne(colonne)
        
        if joueur == 1: #Joueur rouge
            Zone.create_oval(colonne*100+120, ligne*100+180, colonne*100+180, ligne*100+120, fill='red') #Placement du jeton au milieu de la case
            matrice[ligne][colonne] = 1      #Définir que cette case est rouge dans le tableau
            joueur = 2
            print("Au tour du joueur Jaune !")

        elif joueur == 2: #Joueur jaune
            Zone.create_oval(colonne*100+120, ligne*100+180, colonne*100+180, ligne*100+120, fill='yellow')
            matrice[ligne][colonne] = 2
            joueur = 1
            print("Au tour du joueur Rouge !")
        
        
fenetre.bind("<Button-1>", clic)
fenetre.mainloop()

1 réponse

Messages postés
15984
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021
867
bonjour,
qu'as-tu essayé?
sur quoi butes-tu?
Messages postés
3
Date d'inscription
mercredi 26 mai 2021
Statut
Membre
Dernière intervention
28 mai 2021

C'est bien ça le problème je ne sais pas comment faire :/
Messages postés
15984
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021
867 >
Messages postés
3
Date d'inscription
mercredi 26 mai 2021
Statut
Membre
Dernière intervention
28 mai 2021

comment fais-tu quand tu joues sans programme?
qui as écrit ce programme?
Messages postés
3
Date d'inscription
mercredi 26 mai 2021
Statut
Membre
Dernière intervention
28 mai 2021
>
Messages postés
15984
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021

C'est un programme que j'ai trouvé sur internet et que je souhaiterai terminer
>
Messages postés
3
Date d'inscription
mercredi 26 mai 2021
Statut
Membre
Dernière intervention
28 mai 2021

Il faudrait savoir, c'est un programme que tu as réalisé ? Complété ? Ou c'est un vulgaire copié-collé ?

Vérifier qu'il y a alignement se fait après qu'un joueur a joué, il faut donc une fonction.

Tu as déjà ta matrice, mais commence déjà au plus simple avec de simples listes pour l'horizontal.

Comme vérifier qu'il y a 4 "1" consécutifs dans a et b mais pas c :

a = [1, 1, 1, 1, 0, 0, 0]
b = [0, 0, 0, 1, 1, 1, 1]
c = [1, 1, 0, 1, 0, 0, 1]


Si c'est toi qui a codé ce script, tu n'auras aucun mal a faire ça, et si tu as des bases en python, non plus.

La logique pour le vertical est exactement la même.

Et pour les diagonales, quand tu auras réalisé les deux précédents, il y a de fortes chances que tu trouves toi-même la solution.