IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Jeu de dame - deux cliques séparés [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Jeu de dame - deux cliques séparés
    Bonjour ! Pour mon projet final d'ISN j'ai choisi le jeu de dame (notre cours s'arrête aux listes et aux bases de Tkinter) mais un problème survient toujours : je n'arrive pas à différencier deux cliques dans mon programme. Quand je définis un premier puis un deuxième cliques, Python confond les deux et met les deux pour une seule et unique coordonnée. Je voudrais testé deux cases par un clique pour savoir si un pion peut se déplacer dedans. J'ai essayé avec deux bind différents et des touches différents (clique gauche pour le premier clique et clique droit pour le deuxième clique) mais si les deux cliques ne sont pas dans le même programme alors Python ne veut pas tester les deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
     ####################################################################################################
    #                                       Programme : Jeu de dame                                    #
    #                                   Date : Troisième trimestre année 2014/2015                     #
    ####################################################################################################
     
    ##### Importation modules #####
     
    from tkinter import *
     
    ##### Fonction #####
     
    # Plateau #
     
    def Plateau():
        global i,j,case
        i=0
        j=0
        case=50
        for i in range (0,10):
            for j in range (0,10):
                if (i%2)==0:
                    if (j%2)==0:
                        Cadre.create_rectangle(j*case, i*case, (j*case)+case, (i*case)+case, fill='black')
                    else:
                        Cadre.create_rectangle(j*case, i*case, (j*case)+case, (i*case)+case, fill='white')
                else:
                    if (j%2)==0:
                        Cadre.create_rectangle(j*case, i*case, (j*case)+case, (i*case)+case, fill='white')
                    else:
                        Cadre.create_rectangle(j*case, i*case, (j*case)+case, (i*case)+case, fill='black')
                j+=1
            i+=1
     
     
    # Placement pion blanc #
     
    def PionBlanc():
        global PB1,PB2,PB3,PB4,PB5,PB6,PB7,PB8,PB9,PB10,PB11,PB12,PB13,PB14,PB15,PB16,PB17,PB18,PB19,PB20
     
        PB1=Cadre.create_oval(25-15, 25-15, 25+15, 25+15, fill='white')
        PB2=Cadre.create_oval(125-15, 25-15, 125+15, 25+15, fill='white')
        PB3=Cadre.create_oval(225-15, 25-15, 225+15, 25+15, fill='white')
        PB4=Cadre.create_oval(325-15, 25-15, 325+15, 25+15, fill='white')
        PB5=Cadre.create_oval(425-15, 25-15, 425+15, 25+15, fill='white')
     
        PB6=Cadre.create_oval(75-15, 75-15, 75+15, 75+15, fill='white')
        PB7=Cadre.create_oval(175-15, 75-15, 175+15, 75+15, fill='white')
        PB8=Cadre.create_oval(275-15, 75-15, 275+15, 75+15, fill='white')
        PB9=Cadre.create_oval(375-15, 75-15, 375+15, 75+15, fill='white')
        PB10=Cadre.create_oval(475-15, 75-15, 475+15, 75+15, fill='white')
     
        PB11=Cadre.create_oval(25-15, 125-15, 25+15, 125+15, fill='white')
        PB12=Cadre.create_oval(125-15, 125-15, 125+15, 125+15, fill='white')
        PB13=Cadre.create_oval(225-15, 125-15, 225+15, 125+15, fill='white')
        PB14=Cadre.create_oval(325-15, 125-15, 325+15, 125+15, fill='white')
        PB15=Cadre.create_oval(425-15, 125-15, 425+15, 125+15, fill='white')
     
        PB16=Cadre.create_oval(75-15, 175-15, 75+15, 175+15, fill='white')
        PB17=Cadre.create_oval(175-15, 175-15, 175+15, 175+15, fill='white')
        PB18=Cadre.create_oval(275-15, 175-15, 275+15, 175+15, fill='white')
        PB19=Cadre.create_oval(375-15, 175-15, 375+15, 175+15, fill='white')
        PB20=Cadre.create_oval(475-15, 175-15, 475+15, 175+15, fill='white')
     
     
    # Cadre.create_oval(x-r, y-r, x+r, y+r, fill='color')
    # Centre de coordonnées (x;y) et de rayon r
     
     
    # Placement pion noir #
     
    def PionNoir():
        global PN1,PN2,PN3,PN4,PN5,PN6,PN7,PN8,PN9,PN10,PN11,PN12,PN13,PN14,PN15,PN16,PN17,PN18,PN19,PN20
     
        PN1=Cadre.create_oval(75-15, 475-15, 75+15, 475+15, outline='white')
        PN2=Cadre.create_oval(175-15, 475-15, 175+15, 475+15, outline='white')
        PN3=Cadre.create_oval(275-15, 475-15, 275+15, 475+15, outline='white')
        PN4=Cadre.create_oval(375-15, 475-15, 375+15, 475+15, outline='white')
        PN5=Cadre.create_oval(475-15, 475-15, 475+15, 475+15, outline='white')
     
        PN6=Cadre.create_oval(25-15, 425-15, 25+15, 425+15, outline='white')
        PN7=Cadre.create_oval(125-15, 425-15, 125+15, 425+15, outline='white')
        PN8=Cadre.create_oval(225-15, 425-15, 225+15, 425+15, outline='white')
        PN9=Cadre.create_oval(325-15, 425-15, 325+15, 425+15, outline='white')
        PN10=Cadre.create_oval(425-15, 425-15, 425+15, 425+15, outline='white')
     
        PN11=Cadre.create_oval(75-15, 375-15, 75+15, 375+15, outline='white')
        PN12=Cadre.create_oval(175-15, 375-15, 175+15, 375+15, outline='white')
        PN13=Cadre.create_oval(275-15, 375-15, 275+15, 375+15, outline='white')
        PN14=Cadre.create_oval(375-15, 375-15, 375+15, 375+15, outline='white')
        PN15=Cadre.create_oval(475-15, 375-15, 475+15, 375+15, outline='white')
     
        PN16=Cadre.create_oval(25-15, 325-15, 25+15, 325+15, outline='white')
        PN17=Cadre.create_oval(125-15, 325-15, 125+15, 325+15, outline='white')
        PN18=Cadre.create_oval(225-15, 325-15, 225+15, 325+15, outline='white')
        PN19=Cadre.create_oval(325-15, 325-15, 325+15, 325+15, outline='white')
        PN20=Cadre.create_oval(425-15, 325-15, 425+15, 325+15, outline='white')
     
     
    # Cadre.create_oval(x-r, y-r, x+r, y+r, outline='color')
    # Centre de coordonnées (x;y) et de rayon r   
     
    # Déplacement pions #
    def IdentificationCase(x=0,y=0):
        j=(x-case)//case
        i=(y-case)//case
        return i,j
     
    def IdentificationCase2(x=0,y=0):
        l=(x-case)//case
        k=(y-case)//case
        return k,l
     
    def Clique1(event):
     
        # Transformation premier clique souris en coordonnée tableau #
     
        i,j=IdentificationCase(event.x,event.y)
        i += 1
        j += 1
        print (PlateauPion[i][j])
     
    def Clique2(event):
     
        # Transformation deuxième clique souris en coordonnée tableau #
     
        k,l=IdentificationCase2(event.x,event.y)
        k += 1
        l += 1
        print (PlateauPion[k][l])
     
        # Teste toutes les possibilités à partir du clique de la souris #
     
        if [i,j]==[k,l]
            print ('If 1')
     
        if [i,j]!=[k,l]
            print ('If 2')
     
        if [i,j] and [k,l]==0:
            Cadre.move(Pion,l,k)
            print ('Else')
     
    ##### Programme principale #####
     
    # Affichage #
     
    Fenetre=Tk()
    Fenetre.title('Jeu de dame')
     
    Cadre=Canvas(Fenetre,bg='grey',height=500,width=500)
    Cadre.pack()
     
    Plateau()
    PionBlanc()
    PionNoir()
     
    # Identification de la case #
     
    IdentificationCase(x=0,y=0)
    IdentificationCase2(x=0,y=0)
     
    # Création liste #
     
    PlateauPion=[[1,0,1,0,1,0,1,0,1,0],[0,1,0,1,0,1,0,1,0,1],[1,0,1,0,1,0,1,0,1,0],[0,1,0,1,0,1,0,1,0,1],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[2,0,2,0,2,0,2,0,2,0],[0,2,0,2,0,2,0,2,0,2],[2,0,2,0,2,0,2,0,2,0],[0,2,0,2,0,2,0,2,0,2]]
     
    Cadre.bind("<Button-1>",Clique1)
    Cadre.bind("<Button-3>",Clique2)
     
    BoutonQuitter= Button (Fenetre, text='Quitter', command=Fenetre.destroy)
    BoutonQuitter.pack(side=RIGHT)
     
    Fenetre.mainloop()
    Les IdentificationCase servent à transformer les coordonnées du clique en coordonnée pour le tableau qui celui-ci renvoie 0 pour une case vide, 1 pour un pion blanc et 2 pour un pion noir.

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Regarde comment se comportent les autres jeux de ce type.

    Le jouer clique une case, la case devient sélectionnée, le joueur sélectionne un deuxième point et l'action s'exécute.

    Il ne te faut qu'un seul bind pour cela, sinon tu t'emmêle les pinceaux.

    Il te faudra une référence globale pour cela, appelons-là selection

    En pseudo-code ça donne ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    selection = None
     
    def click(event):
        global selection
        pos = IdentificationCase(....)
        si selection est None:
            # premier click, on sélectionne la case
            changer_l_aspect_de_la_case(pos, True)
            selection = pos
     
        sinon:
            si pos == selection:
                # deuxième click sur la même case, on désélectionne
                changer_l_aspect_de_la_case(pos, False)
                selection = None
     
            sinon:
                # deuxième case sélectionnée
                verifier_validite_du_coup()
                jouer()
                selection = None

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci de ton aide, j'ai résolu le problème différemment avec un autre bind dans la fonction ce qui fonctionne super bien
    Voici le code si ça t'intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    ####################################################################################################
    #                                       Programme : Jeu de dame                                    #
    #                                   Date : Troisième trimestre année 2014/2015                     #
    ####################################################################################################
     
    ##### Importation modules #####
     
    from tkinter import *
     
    ##### Fonction #####
     
    # Plateau #
     
    def Plateau():
        global a,b,case
        a=0
        b=0
        case=50
        for a in range (0,10):
            for b in range (0,10):
                if (a%2)==0:
                    if (b%2)==0:
                        Cadre.create_rectangle(b*case, a*case, (b*case)+case, (a*case)+case, fill='black')
                    else:
                        Cadre.create_rectangle(b*case, a*case, (b*case)+case, (a*case)+case, fill='white')
                else:
                    if (b%2)==0:
                        Cadre.create_rectangle(b*case, a*case, (b*case)+case, (a*case)+case, fill='white')
                    else:
                        Cadre.create_rectangle(b*case, a*case, (b*case)+case, (a*case)+case, fill='black')
                b+=1
            a+=1
     
     
    # Placement pion blanc #
     
    def PionBlanc():
        global PB1,PB2,PB3,PB4,PB5,PB6,PB7,PB8,PB9,PB10,PB11,PB12,PB13,PB14,PB15,PB16,PB17,PB18,PB19,PB20
     
        PB1=Cadre.create_oval(25-15, 25-15, 25+15, 25+15, fill='white')
        PB2=Cadre.create_oval(125-15, 25-15, 125+15, 25+15, fill='white')
        PB3=Cadre.create_oval(225-15, 25-15, 225+15, 25+15, fill='white')
        PB4=Cadre.create_oval(325-15, 25-15, 325+15, 25+15, fill='white')
        PB5=Cadre.create_oval(425-15, 25-15, 425+15, 25+15, fill='white')
     
        PB6=Cadre.create_oval(75-15, 75-15, 75+15, 75+15, fill='white')
        PB7=Cadre.create_oval(175-15, 75-15, 175+15, 75+15, fill='white')
        PB8=Cadre.create_oval(275-15, 75-15, 275+15, 75+15, fill='white')
        PB9=Cadre.create_oval(375-15, 75-15, 375+15, 75+15, fill='white')
        PB10=Cadre.create_oval(475-15, 75-15, 475+15, 75+15, fill='white')
     
        PB11=Cadre.create_oval(25-15, 125-15, 25+15, 125+15, fill='white')
        PB12=Cadre.create_oval(125-15, 125-15, 125+15, 125+15, fill='white')
        PB13=Cadre.create_oval(225-15, 125-15, 225+15, 125+15, fill='white')
        PB14=Cadre.create_oval(325-15, 125-15, 325+15, 125+15, fill='white')
        PB15=Cadre.create_oval(425-15, 125-15, 425+15, 125+15, fill='white')
     
        PB16=Cadre.create_oval(75-15, 175-15, 75+15, 175+15, fill='white')
        PB17=Cadre.create_oval(175-15, 175-15, 175+15, 175+15, fill='white')
        PB18=Cadre.create_oval(275-15, 175-15, 275+15, 175+15, fill='white')
        PB19=Cadre.create_oval(375-15, 175-15, 375+15, 175+15, fill='white')
        PB20=Cadre.create_oval(475-15, 175-15, 475+15, 175+15, fill='white')
     
     
    # Cadre.create_oval(x-r, y-r, x+r, y+r, fill='color')
    # Centre de coordonnées (x;y) et de rayon r
     
     
    # Placement pion noir #
     
    def PionNoir():
        global PN1,PN2,PN3,PN4,PN5,PN6,PN7,PN8,PN9,PN10,PN11,PN12,PN13,PN14,PN15,PN16,PN17,PN18,PN19,PN20
     
        PN1=Cadre.create_oval(75-15, 475-15, 75+15, 475+15, outline='white')
        PN2=Cadre.create_oval(175-15, 475-15, 175+15, 475+15, outline='white')
        PN3=Cadre.create_oval(275-15, 475-15, 275+15, 475+15, outline='white')
        PN4=Cadre.create_oval(375-15, 475-15, 375+15, 475+15, outline='white')
        PN5=Cadre.create_oval(475-15, 475-15, 475+15, 475+15, outline='white')
     
        PN6=Cadre.create_oval(25-15, 425-15, 25+15, 425+15, outline='white')
        PN7=Cadre.create_oval(125-15, 425-15, 125+15, 425+15, outline='white')
        PN8=Cadre.create_oval(225-15, 425-15, 225+15, 425+15, outline='white')
        PN9=Cadre.create_oval(325-15, 425-15, 325+15, 425+15, outline='white')
        PN10=Cadre.create_oval(425-15, 425-15, 425+15, 425+15, outline='white')
     
        PN11=Cadre.create_oval(75-15, 375-15, 75+15, 375+15, outline='white')
        PN12=Cadre.create_oval(175-15, 375-15, 175+15, 375+15, outline='white')
        PN13=Cadre.create_oval(275-15, 375-15, 275+15, 375+15, outline='white')
        PN14=Cadre.create_oval(375-15, 375-15, 375+15, 375+15, outline='white')
        PN15=Cadre.create_oval(475-15, 375-15, 475+15, 375+15, outline='white')
     
        PN16=Cadre.create_oval(25-15, 325-15, 25+15, 325+15, outline='white')
        PN17=Cadre.create_oval(125-15, 325-15, 125+15, 325+15, outline='white')
        PN18=Cadre.create_oval(225-15, 325-15, 225+15, 325+15, outline='white')
        PN19=Cadre.create_oval(325-15, 325-15, 325+15, 325+15, outline='white')
        PN20=Cadre.create_oval(425-15, 325-15, 425+15, 325+15, outline='white')
     
     
    # Cadre.create_oval(x-r, y-r, x+r, y+r, outline='color')
    # Centre de coordonnées (x;y) et de rayon r   
     
    # Déplacement pions #
    def IdentificationCase(x=0,y=0):
        j=(x-case)//case
        i=(y-case)//case
        return i,j
     
    def IdentificationCase2(x=0,y=0):
        l=(x-case)//case
        k=(y-case)//case
        return k,l
     
    def Clique1(event):
        global i,j
        # Transformation premier clique souris en coordonnée tableau #
     
        i,j=IdentificationCase(event.x,event.y)
        i += 1
        j += 1
        print (PlateauPion[i][j])
     
        Cadre.bind("<Button-1>",Clique2)
     
    def Clique2(event):
        # Transformation deuxième clique souris en coordonnée tableau #
     
        k,l=IdentificationCase2(event.x,event.y)
        k += 1
        l += 1
        print (PlateauPion[k][l])
     
        # Teste toutes les possibilités à partir du clique de la souris #
     
        wx=0
        xc=0
     
        if [i,j]==[k,l]:
            print ('If 1')
     
        if [i,j]!=[k,l]:
            print ('If 2')
            if wx==0:
                print ('Selectionner une première case')
            if xc==0:
                print ('Selectionner une seconde case')
     
     
        Cadre.bind("<Button-1>",Clique1)
     
    #Cadre.move(Pion,l,k)
    ##### Programme principale #####
     
    # Affichage #
     
    Fenetre=Tk()
    Fenetre.title('Jeu de dame')
     
    Cadre=Canvas(Fenetre,bg='grey',height=500,width=500)
    Cadre.pack()
     
    Plateau()
    PionBlanc()
    PionNoir()
     
    # Identification de la case #
     
    IdentificationCase(x=0,y=0)
    IdentificationCase2(x=0,y=0)
     
    # Création liste #
     
    PlateauPion=[[1,0,1,0,1,0,1,0,1,0],[0,1,0,1,0,1,0,1,0,1],[1,0,1,0,1,0,1,0,1,0],[0,1,0,1,0,1,0,1,0,1],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[2,0,2,0,2,0,2,0,2,0],[0,2,0,2,0,2,0,2,0,2],[2,0,2,0,2,0,2,0,2,0],[0,2,0,2,0,2,0,2,0,2]]
     
    Cadre.bind("<Button-1>",Clique1)
     
    BoutonQuitter= Button (Fenetre, text='Quitter', command=Fenetre.destroy)
    BoutonQuitter.pack(side=RIGHT)
     
    Fenetre.mainloop()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jeu de dame en c
    Par MALAKFATINE dans le forum Projets
    Réponses: 1
    Dernier message: 18/09/2006, 09h34
  2. créer jeu de dame en C
    Par SAMUELSalbert dans le forum C
    Réponses: 11
    Dernier message: 31/07/2006, 20h33
  3. Code source en c d'un jeu de dames
    Par ledawa dans le forum Développement 2D, 3D et Jeux
    Réponses: 33
    Dernier message: 22/05/2006, 08h54
  4. [Jeu de dames]Enregistrer les règles...
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/11/2005, 19h39
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo