Puissance 4 python tkinter affichage du gagant

Résolu
Mat_8641 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
 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()
A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 583
 
bonjour,
qu'as-tu essayé?
sur quoi butes-tu?
0
Mat_8641 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bien ça le problème je ne sais pas comment faire :/
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583 > Mat_8641 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
comment fais-tu quand tu joues sans programme?
qui as écrit ce programme?
0
Mat_8641 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
C'est un programme que j'ai trouvé sur internet et que je souhaiterai terminer
0
Spirali > Mat_8641 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0