Puissance 4 python tkinter affichage du gagant

Résolu/Fermé
Mat_8641 Messages postés 3 Date d'inscription mercredi 26 mai 2021 Statut Membre Dernière intervention 28 mai 2021 - Modifié le 28 mai 2021 à 16:47
 Spirali - 28 mai 2021 à 18:06
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 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
28 mai 2021 à 16:50
bonjour,
qu'as-tu essayé?
sur quoi butes-tu?
0
Mat_8641 Messages postés 3 Date d'inscription mercredi 26 mai 2021 Statut Membre Dernière intervention 28 mai 2021
28 mai 2021 à 16:51
C'est bien ça le problème je ne sais pas comment faire :/
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Mat_8641 Messages postés 3 Date d'inscription mercredi 26 mai 2021 Statut Membre Dernière intervention 28 mai 2021
28 mai 2021 à 17:30
comment fais-tu quand tu joues sans programme?
qui as écrit ce programme?
0
Mat_8641 Messages postés 3 Date d'inscription mercredi 26 mai 2021 Statut Membre Dernière intervention 28 mai 2021 > yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
28 mai 2021 à 17:37
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 mercredi 26 mai 2021 Statut Membre Dernière intervention 28 mai 2021
28 mai 2021 à 18:06
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