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 :

Boucle interne Tkinter


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Boucle interne Tkinter
    Bonjour, je suis en classe de terminale et pour mon projet d'ISN (Informatique) j'ai choisi de réaliser un jeu de Uno sur python avec une interface Tkinter, un joueur contre un ordinateur. Je vous explique mon problème: Je suis entrain de faire une fonction jeu qui s'éxécuterais en boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def jeu():
        table_jeu.unbind_all
        valeur, couleur = talon[-1][0], talon[-1][1]  
        cartes_jouables =[]
        for carte in carte_joueur_1:  
            if carte[0] == valeur or carte[1] == couleur or carte=="+4" or carte=="4c": 
                cartes_jouables.append (carte)
        if len (cartes_jouables) != 0:  #au moins une carte jouable
            table_jeu.tag_bind("carte_joueur_1", "<Button-1>", jouer_carte)
        else: #il n'a plus de cartes jouables (pioche)
            bou1.config (state = tkinter.NORMAL)
            time.sleep(2)
            ordinateur ()
            #il ne se passe rien parce que normalement ca doit faire une boucle et revenir au debut de la fonction jeu()
    Dans un premier temps, elle vérifie si le joueur 1 a dans sa liste de carte au moins une carte jouable, et si oui, il est alors possible de jouer une carte avec cette fonction :
    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
    def jouer_carte (event):
        global image, image_talon, images_cartes_joueur_1,carte_joueur_1, selection_carte, i
    # items du canvas sur lequels le clic souris a été fait
        items = table_jeu.find_overlapping(event.x, event.y, event.x, event.y)
        i = len(carte_joueur_1) - 1 # index max des cartes joueurs
    # Parcours des images de droite à gauche
        for image in images_cartes_joueur_1[::-1]:
    # Si le clic correspond à cette image
            if image in items:
                break
            i -= 1
        else:
    # Le clic n'a pas été fait sur une image des cartes joueurs
    # Il n'y a rien à faire
            return
        carte = carte_joueur_1[i]
    # S'il y avait une sélection et que c'est la même que la nouvelle
        if selection_carte == i:
            print("Le joueur joue la carte :", carte)
     
            #-------------------------------------conditions d'une carte posable-----------------------------------------
            if carte == '+4':   # +4 carte à l'adversaire
                talon.append (carte)
                deplacement_carte ()
                w = 200
                for i in range (4):        
                    p=cartes.pop()
                    n=len (carte_joueur_2)
                    o= (n*CHEVAUCHEMENT_CARTE)+ w
                    carte_joueur_2.append(p)
                    table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
                    images_cartes_joueur_2.append(p)
                    o += CHEVAUCHEMENT_CARTE
                    time.sleep( 1 )
                    table_jeu.update()
                affichage_choix_couleur ()
     
            elif carte == '4c':    #changement de couleur
                talon.append (carte)
                deplacement_carte ()
                affichage_choix_couleur ()
     
            elif carte [1] == talon[-1][1] and carte [0] == "j" or talon[-1][0]=="j" and carte[0] == "j": # +2
                talon.append (carte)
                deplacement_carte ()
                w = 200
                for i in range (2):        
                    p=cartes.pop()
                    n=len (carte_joueur_2)
                    o= (n*CHEVAUCHEMENT_CARTE)+ w
                    carte_joueur_2.append(p)
                    table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
                    images_cartes_joueur_2.append(p)
                    o += CHEVAUCHEMENT_CARTE
                    time.sleep( 1 )
                    table_jeu.update()
     
            elif carte [0] == "s" and carte [1]==talon[-1][1] or talon[-1][0]=="s" and carte [0]=="s" : # joker passe ton tour
                    talon.append(carte)   
                    deplacement_carte()
                    #comment faire rejouer l'adversaire
     
            elif carte [1] == talon[-1][1]:     # carte de la meme couleur du talon
                talon.append (carte)
                deplacement_carte()
     
     
            elif carte [0] == talon[-1][0]:  # carte du meme chiffre du talon
                talon.append (carte)
                deplacement_carte ()
            ordinateur ()
            #retourne au debut de jeu
    # Soit il n'y avait pas de sélection, soit elle différente de la précédente
        else:
    # Il y avait une sélection
            if selection_carte is not None:
                print("Le joueur choisit une autre carte :", carte)
    # désélection de la précédente carte
                image_carte_precedente = images_cartes_joueur_1[selection_carte]
                table_jeu.move(image_carte_precedente, 0, DECALAGE_SELECTION_CARTE)
            else:
    # 1ère sélection
                print("Le joueur selectionne la carte :", carte)
    # Mise en sélection de la carte
            table_jeu.move(image, 0, -DECALAGE_SELECTION_CARTE)
            selection_carte = i
    Et si il n'a aucune carte jouable, alors il pioche avec cette fonction:
    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
    def pioche ():
        pioche=cartes.pop ()
        if pioche[0] == talon[-1][0] or pioche [1] == talon[-1][1] or pioche=="+4" or pioche[1] == talon[-1][0] or pioche[0] == talon[-1][1] or pioche=="4c":  # et si on pioche un joker ? // verifier toute les conditions si il peut jouer et relancer carte posable
            print ("Tu peux jouer la carte pioché") #vérification
            n=len (carte_joueur_1)
            carte_joueur_1.append (pioche ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 550, image=images_cartes[pioche], tags="carte_joueur_1")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            table_jeu.update()
            bou1.config (state = tkinter.DISABLED)
            #relancer jouer carte (event)
     
        else :  
            print( "carte pioché pas jouable")
            n=len (carte_joueur_1)
            carte_joueur_1.append (pioche ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 550, image=images_cartes[pioche], tags="carte_joueur_1")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            table_jeu.update()
            bou1.config (state = tkinter.DISABLED)
            ordinateur()
            #lancer fonction de l'ordi parce que carte piochée pas jouable
    Ce bouton qui est crée comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    image_pioche = tk.PhotoImage(file='imagecarte/dos.png')
    bou1 = tk.Button(uno, text='Pioche',image=image_pioche, command = pioche)
    bou1.place(x=1200, y=300)
    bou1.config (state = tkinter.DISABLED)
    Je vous met le code en entier en fin de message si vous avez une question.

    MON PROBLEME : Quand je fait le bind de ma fonction jouer_carte, il faudrait que après avoir jouer une carte, le programme retourne au debut de ma fonction jeu() et vérifie si il peut jouer ou si il doit piocher, et pareil après avoir piocher. En effet, quand je bind les cartes sur la table de jeu, elle reste dans cette "fonction" et ne vérifie plus si le joueur a une carte jouable ou si il doit piocher.

    Je ne sais pas si vous m'avez bien compris. Est ce que vous pourriez m'aider ?

    Merci beaucoup !

    PS: mon code en entier:
    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
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import random   
    from random import choice 
    import tkinter as tk 
    import tkinter as tkinter
    from tkinter import Toplevel
    import time
    from time import sleep
     
    def initialisation():       # distribution des cartes et créations d'images
        joker=["+4","+4","jV","jV","4c","4c","jJ","jJ","sV","sV","+4","+4","sJ","sJ","4c","4c","jB","jB","sB","sB","jR","jR","sR","sR"]       
        cartes=["9V","9V","8V","8V","7V","7V","6V","6V","5V","5V","4V","4V","3V","3V","2V","2V","1V","1V","0V","9J","9J","8J","8J","7J","7J","6J","6J","5J","5J","4J","4J","3J","3J","2J","2J","1J","1J","0J","9R","9R","8R","8R","7R","7R","6R","6R","5R","5R","4R","4R","3R","3R","2R","2R","1R","1R","0R","9B","9B","8B","8B","7B","7B","6B","6B","5B","5B","4B","4B","3B","3B","2B","2B","1B","1B","0B"]      
        random.shuffle (joker)   
        random.shuffle (cartes)  
     
        images_cartes = dict()
        for carte in set(cartes): 
            image = "imagecarte/" + carte.lower() + ".png" 
            images_cartes[carte] = tk.PhotoImage(file=image)
        talon=[cartes.pop()] 
     
        image_joker = dict ()
        for carte in set (joker):
            image = "imagecarte/" + carte.lower() + ".png"
            image_joker[carte] = tk.PhotoImage(file=image) 
     
        cartes.extend(joker)
        random.shuffle(cartes)
        images_cartes.update(image_joker)
        carte_joueur_1=[]        
        carte_joueur_2=[]          
        for i in range (7):         
            carte_joueur_1.append(cartes.pop())         
            carte_joueur_2.append(cartes.pop())          
        return images_cartes,joker,cartes,carte_joueur_1,carte_joueur_2,talon
     
    def affichage_choix_couleur (): #  fenetre pour choisir une couleur apres un joker
        w = Toplevel (uno)
        # le tableau à afficher : [0, 1, 2, 3]
        tableau = [[0,1],[2,3]]
        # taille d'une "case"
        size = 100
        couleurs = {0: "green", 1: "blue", 2:"red", 3:"yellow"} # les 4 couleurs à utiliser
        can = tk.Canvas(w, width=200, height=200)# création canevas
        can.grid()
     
        # affichage du tableau de cette fenetre
        for j in range(2):
            for i in range(2) :
                can.create_rectangle(i * size,
                                j*size,
                                i * size + size,
                                j*size+size,
                                fill = couleurs[tableau[i][j]])
     
        def couleur(evt):      # renvoie couleur choisis suite a un joker
            pos_x = int(evt.x / size)
            pos_y = int(evt.y / size)
     
            if tableau[pos_x][pos_y] == 0:
                print ("V")
                nouvelle_couleur = ["+V"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
            elif tableau[pos_x][pos_y] == 1:
                print ("B")
                nouvelle_couleur = ["+B"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
            elif tableau[pos_x][pos_y] == 2:
                print ("R")
                nouvelle_couleur = ["+R"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
            elif tableau[pos_x][pos_y] == 3:
                print ("J")
                nouvelle_couleur = ["+J"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
     
        can.bind("<Button-1>", couleur) # binding de la fonction couleur sur le canevas
        w.mainloop()  # boucle principale
     
    def deplacement_carte():
        global image, image_talon, images_cartes_joueur_1,carte_joueur_1, selection_carte, i
            # Suppression du tag pour que la carte ne puisse plus être cliquable
        table_jeu.dtag(image, "carte_joueur_1")
    # Déplacement de la carte sur le talon
        table_jeu.coords(image, COORD_TALON)
     # S'il y avait déjà une image sur le talon, on la supprime
        if image_talon is not None:
            table_jeu.delete(image_talon)
    # On affecte à l'image du talon la nouvelle carte
        image_talon = image
    # Suppression de l'image et de la carte
        images_cartes_joueur_1.pop(i)
        carte_joueur_1.pop(i)
    # Décalage vers la gauche des images (pour ne pas laisser de trou entre les cartes
        for ii in range(i, len(carte_joueur_1)):
            table_jeu.move(images_cartes_joueur_1[ii], -CHEVAUCHEMENT_CARTE, 0)
    # On remet à None la selection car il n'y en a plus.
        selection_carte = None 
     
     
    def jouer_carte (event):
        global image, image_talon, images_cartes_joueur_1,carte_joueur_1, selection_carte, i
    # items du canvas sur lequels le clic souris a été fait
        items = table_jeu.find_overlapping(event.x, event.y, event.x, event.y)
        i = len(carte_joueur_1) - 1 # index max des cartes joueurs
    # Parcours des images de droite à gauche
        for image in images_cartes_joueur_1[::-1]:
    # Si le clic correspond à cette image
            if image in items:
                break
            i -= 1
        else:
    # Le clic n'a pas été fait sur une image des cartes joueurs
    # Il n'y a rien à faire
            return
        carte = carte_joueur_1[i]
    # S'il y avait une sélection et que c'est la même que la nouvelle
        if selection_carte == i:
            print("Le joueur joue la carte :", carte)
     
            #-------------------------------------conditions d'une carte posable-----------------------------------------
            if carte == '+4':   # +4 carte à l'adversaire
                talon.append (carte)
                deplacement_carte ()
                w = 200
                for i in range (4):        
                    p=cartes.pop()
                    n=len (carte_joueur_2)
                    o= (n*CHEVAUCHEMENT_CARTE)+ w
                    carte_joueur_2.append(p)
                    table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
                    images_cartes_joueur_2.append(p)
                    o += CHEVAUCHEMENT_CARTE
                    time.sleep( 1 )
                    table_jeu.update()
                affichage_choix_couleur ()
     
            elif carte == '4c':    #changement de couleur
                talon.append (carte)
                deplacement_carte ()
                affichage_choix_couleur ()
     
            elif carte [1] == talon[-1][1] and carte [0] == "j" or talon[-1][0]=="j" and carte[0] == "j": # +2
                talon.append (carte)
                deplacement_carte ()
                w = 200
                for i in range (2):        
                    p=cartes.pop()
                    n=len (carte_joueur_2)
                    o= (n*CHEVAUCHEMENT_CARTE)+ w
                    carte_joueur_2.append(p)
                    table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
                    images_cartes_joueur_2.append(p)
                    o += CHEVAUCHEMENT_CARTE
                    time.sleep( 1 )
                    table_jeu.update()
     
            elif carte [0] == "s" and carte [1]==talon[-1][1] or talon[-1][0]=="s" and carte [0]=="s" : # joker passe ton tour
                    talon.append(carte)   
                    deplacement_carte()
                    #comment faire rejouer l'adversaire
     
            elif carte [1] == talon[-1][1]:     # carte de la meme couleur du talon
                talon.append (carte)
                deplacement_carte()
     
     
            elif carte [0] == talon[-1][0]:  # carte du meme chiffre du talon
                talon.append (carte)
                deplacement_carte ()
            ordinateur ()
            #retourne au debut de jeu
    # Soit il n'y avait pas de sélection, soit elle différente de la précédente
        else:
    # Il y avait une sélection
            if selection_carte is not None:
                print("Le joueur choisit une autre carte :", carte)
    # désélection de la précédente carte
                image_carte_precedente = images_cartes_joueur_1[selection_carte]
                table_jeu.move(image_carte_precedente, 0, DECALAGE_SELECTION_CARTE)
            else:
    # 1ère sélection
                print("Le joueur selectionne la carte :", carte)
    # Mise en sélection de la carte
            table_jeu.move(image, 0, -DECALAGE_SELECTION_CARTE)
            selection_carte = i
     
    def pioche ():
        pioche=cartes.pop ()
        if pioche[0] == talon[-1][0] or pioche [1] == talon[-1][1] or pioche=="+4" or pioche[1] == talon[-1][0] or pioche[0] == talon[-1][1] or pioche=="4c":  # et si on pioche un joker ? // verifier toute les conditions si il peut jouer et relancer carte posable
            print ("Tu peux jouer la carte pioché") #vérification
            n=len (carte_joueur_1)
            carte_joueur_1.append (pioche ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 550, image=images_cartes[pioche], tags="carte_joueur_1")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            table_jeu.update()
            bou1.config (state = tkinter.DISABLED)
            #relancer jouer carte (event)
     
        else :  
            print( "carte pioché pas jouable")
            n=len (carte_joueur_1)
            carte_joueur_1.append (pioche ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 550, image=images_cartes[pioche], tags="carte_joueur_1")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            table_jeu.update()
            bou1.config (state = tkinter.DISABLED)
            ordinateur()
            #lancer fonction de l'ordi parce que carte pioché pas jouable
     
     
    def ordinateur ():
        time.sleep (2)
        cartes_jouables = []  
        valeur, couleur = talon[-1][0], talon[-1][1]   
        for carte in carte_joueur_2:  
             if carte[0] == valeur or carte[1] == couleur or carte=="+4" or carte=="4c":  
                 cartes_jouables.append(carte)  # est ce que ca prend TOUTES les cartes qu'il peut jouer ou que la première ?
                 carte_jouee_ordi = choice (cartes_jouables)  
     
                 if carte_jouee_ordi == '+4':
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi) 
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     nouvelle_couleur = []
                     liste= ["+B","+V","+J","+R"]
                     nouvelle_couleur.append (random.choice(liste))
                     talon [-1]= "".join(nouvelle_couleur)
                     print ("L'adversaire vient de jouer un +4") 
                     print ("Tu dois jouer sur du ", talon[-1][1])
                     for i in range (4):        # +4  carte dans tes cartes
                         p=cartes.pop()
                         n=len (carte_joueur_1)
                         o= (n*CHEVAUCHEMENT_CARTE)+ 200
                         carte_joueur_1.append(p)
                         image1=table_jeu.create_image(o, 550, image=images_cartes[p], tags="carte_joueur_1")
                         images_cartes_joueur_1.append(image1)
                         o += CHEVAUCHEMENT_CARTE
                         sleep( 1 )
                         table_jeu.update() 
                     return;
     
                 elif carte_jouee_ordi == '4c':
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)    
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'ordinateur a joué un changement de couleur")  
                     liste= ["B","V","J","R"]
                     nouvelle_couleur = ["*"] 
                     nouvelle_couleur.append (random.choice (liste))
                     talon [-1]= "".join(nouvelle_couleur)
                     print ("Tu dois jouer sur du ", talon[-1][1])
     
                     return;
     
                 elif carte_jouee_ordi [1] == talon[-1][1] and carte_jouee_ordi [0] == "j" or talon[-1][0]=="j" and carte_jouee_ordi [0] == "j":    # +2
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'adversaire as joué un +2")   
                     print ("La dernière carte posée est :  ",talon [-1]  )
                     for i in range (2):        # +2  carte à l'adversaire
                         p=cartes.pop()
                         n=len (carte_joueur_1)
                         o= (n*CHEVAUCHEMENT_CARTE)+ 200
                         carte_joueur_1.append(p)
                         image2=table_jeu.create_image(o, 550, image=images_cartes[p], tags="carte_joueur_1")
                         images_cartes_joueur_1.append(image2)
                         o += CHEVAUCHEMENT_CARTE
                         sleep( 1 )
                         table_jeu.update() 
                     return;
     
                 elif carte_jouee_ordi [0] == "s" and carte_jouee_ordi [1]==talon[-1][1] or talon[-1][0]=="s" and carte_jouee_ordi [0]=="s" : # joker passe ton tour
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)  
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'adversaire as joué un joker :", talon[-1])
                     sleep (2)
                     print(" L'adversaire saute ton tour ! Il rejoue encore.")
                     ordinateur ()
                     return;
     
     
                 elif carte_jouee_ordi [1]==talon[-1][1] or carte_jouee_ordi[0]==talon[-1][0]:  
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)         
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'adversaire a joué un  :" ,talon [-1]) 
                     return;
        pioche_ordi = cartes.pop()  
        print("L'adversaire pioche un :  ", pioche_ordi)      
        if pioche_ordi [0] == talon[-1][0] or pioche_ordi [1] == talon[-1][1] or pioche_ordi=="+4" or pioche_ordi[1] == talon[-1][0] or pioche_ordi[0] == talon[-1][1] or pioche_ordi=="4c":  
            print ("L'adversaire peut jouer la carte piochée") 
            carte_joueur_2.append (pioche_ordi)
            ordinateur ()
     
        else :  
            n=len (carte_joueur_2)
            carte_joueur_2.append (pioche_ordi ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            table_jeu.update()
     
        return;
     
    def jeu():
        table_jeu.unbind_all
        valeur, couleur = talon[-1][0], talon[-1][1]  
        cartes_jouables =[]
        for carte in carte_joueur_1:  
            if carte[0] == valeur or carte[1] == couleur or carte=="+4" or carte=="4c": 
                cartes_jouables.append (carte)
        if len (cartes_jouables) != 0:  #au moins une carte jouable
            table_jeu.tag_bind("carte_joueur_1", "<Button-1>", jouer_carte)
        else: #il n'a plus de cartes jouables (pioche)
            bou1.config (state = tkinter.NORMAL)
            time.sleep(2)
            ordinateur ()
            #il ne se passe rien parce que normalement ca doit faire une boucle et revenir au debut de la fonction jeu()
    #--------------------PROGRAMME--------------------------------------------------------------
     
    #INTERFACE GRAPHIQUE
     
    LARGEUR_TABLE = 1500 
    HAUTEUR_TABLE = 700  
     
    uno= tk.Tk()
    # Distribution des cartes 
    images_cartes,joker,cartes,carte_joueur_1,carte_joueur_2,talon = initialisation()  
    # Largeur et hauteur des cartes (on prend en base celles de la 1ère carte) 
    LARGEUR_CARTE = images_cartes[cartes[0]].width()  #comment reduire la taille des cartes ?
    HAUTEUR_CARTE = images_cartes[cartes[0]].height() 
    # Chevauchement des cartes du joueur sur la table
    CHEVAUCHEMENT_CARTE = int(LARGEUR_CARTE / 2)
    # Décalage vers le haut lorsqu'une carte est cliquée
    DECALAGE_SELECTION_CARTE = int(HAUTEUR_CARTE / 3)
     
    table_jeu = tk.Canvas(uno, width=LARGEUR_TABLE, height=HAUTEUR_TABLE, bg="green")
    table_jeu.grid()
     
     
     
    # Création sur la table de l'image de la pioche (bouton)
    image_pioche = tk.PhotoImage(file='imagecarte/dos.png')
    bou1 = tk.Button(uno, text='Pioche',image=image_pioche, command = pioche)
    bou1.place(x=1200, y=300)
    bou1.config (state = tkinter.DISABLED)
     
     
     
    # coordonnée sur la table de jeu du talon
    COORD_TALON = (
        int(LARGEUR_TABLE / 2 + LARGEUR_CARTE + 50),
        300,
    )
    # Création sur la table de l'image du talon
    z=LARGEUR_TABLE / 2 + LARGEUR_CARTE + 50
    image_talon = []
    for carte in talon :    #comment faire pour que ca affiche que la derniere valeur du talon ?
        image_id = table_jeu.create_image(z, 300, image=images_cartes[carte], tags="carte_talon")
        image_talon.append(image_id)
     
     
    # Création sur la table des images des cartes du joueur1.
    x=200
    images_cartes_joueur_1 = []
    for carte in carte_joueur_1:
        image_id = table_jeu.create_image(x, 550, image=images_cartes[carte], tags="carte_joueur_1")
        images_cartes_joueur_1.append(image_id)
        x += CHEVAUCHEMENT_CARTE
     
     # Création sur la table des images des l'ordi.
    w = 200
    carte_dos = tk.PhotoImage(file='imagecarte/dos.png')
    images_cartes_joueur_2 = []
    for i in range (len(carte_joueur_2)):
        image_id = table_jeu.create_image(w, 150, image=carte_dos, tags="carte_joueur_2")
        images_cartes_joueur_2.append(image_id)
        w += CHEVAUCHEMENT_CARTE
     
    image_talon = None
    selection_carte = None 
     
    uno.after_idle(jeu)
    uno.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Arnoanais Voir le message
    MON PROBLEME : Quand je fait le bind de ma fonction jouer_carte, il faudrait que après avoir jouer une carte, le programme retourne au debut de ma fonction jeu() et vérifie si il peut jouer ou si il doit piocher, et pareil après avoir piocher. En effet, quand je bind les cartes sur la table de jeu, elle reste dans cette "fonction" et ne vérifie plus si le joueur a une carte jouable ou si il doit piocher.

    Je ne sais pas si vous m'avez bien compris. Est ce que vous pourriez m'aider ?
    Vous connaissez .after_idle... pourquoi ne pas l'utiliser?
    Pour le reste votre programmation d'une interface graphique est l'empilement plus ou moins heureux de bouts de solutions. C'est illisible et dangereux de toucher à un code qu'on ne comprend pas: pas grand monde va pouvoir vous aider si vous n'envisagez pas une sérieuse remise à plat.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup W, au niveau du code, nous faisons du mieux que possible pour le rendre clair et lisible mais nous n'avons pas les connaissances et l'expérience d'un bon programmeur. Comment pourrait on le simplifier ? De plus j'ai essayé de simplifier le code mais je rencontre des problèmes dont je ne connais pas la source...
    Voici la nouvelle version:
    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
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import random   
    from random import choice 
    import tkinter as tk 
    import tkinter as tkinter
    from tkinter import Toplevel
     
    def initialisation():       # distribution des cartes et créations d'images
        joker=["+4","+4","jV","jV","4c","4c","jJ","jJ","sV","sV","+4","+4","sJ","sJ","4c","4c","jB","jB","sB","sB","jR","jR","sR","sR"]       
        cartes=["9V","9V","8V","8V","7V","7V","6V","6V","5V","5V","4V","4V","3V","3V","2V","2V","1V","1V","0V","9J","9J","8J","8J","7J","7J","6J","6J","5J","5J","4J","4J","3J","3J","2J","2J","1J","1J","0J","9R","9R","8R","8R","7R","7R","6R","6R","5R","5R","4R","4R","3R","3R","2R","2R","1R","1R","0R","9B","9B","8B","8B","7B","7B","6B","6B","5B","5B","4B","4B","3B","3B","2B","2B","1B","1B","0B"]      
        random.shuffle (joker)   
        random.shuffle (cartes)  
     
        images_cartes = dict()
        for carte in set(cartes): 
            image = "imagecarte/" + carte.lower() + ".png" 
            images_cartes[carte] = tk.PhotoImage(file=image)
        talon=[cartes.pop()] 
     
        image_joker = dict ()
        for carte in set (joker):
            image = "imagecarte/" + carte.lower() + ".png"
            image_joker[carte] = tk.PhotoImage(file=image) 
     
        cartes.extend(joker)
        random.shuffle(cartes)
        images_cartes.update(image_joker)
        carte_joueur_1=[]        
        carte_joueur_2=[]          
        for i in range (7):         
            carte_joueur_1.append(cartes.pop())         
            carte_joueur_2.append(cartes.pop())          
        return images_cartes,joker,cartes,carte_joueur_1,carte_joueur_2,talon
     
    def affichage_choix_couleur (): #  fenetre pour choisir une couleur apres un joker
        w = Toplevel (uno)
        # le tableau à afficher : [0, 1, 2, 3]
        tableau = [[0,1],[2,3]]
        # taille d'une "case"
        size = 100
        couleurs = {0: "green", 1: "blue", 2:"red", 3:"yellow"} # les 4 couleurs à utiliser
        can = tk.Canvas(w, width=200, height=200)# création canevas
        can.grid()
     
        # affichage du tableau de cette fenetre
        for j in range(2):
            for i in range(2) :
                can.create_rectangle(i * size,
                                j*size,
                                i * size + size,
                                j*size+size,
                                fill = couleurs[tableau[i][j]])
     
        def couleur(evt):      # renvoie couleur choisis suite a un joker
            pos_x = int(evt.x / size)
            pos_y = int(evt.y / size)
     
            if tableau[pos_x][pos_y] == 0:
                print ("V")
                nouvelle_couleur = ["+V"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
            elif tableau[pos_x][pos_y] == 1:
                print ("B")
                nouvelle_couleur = ["+B"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
            elif tableau[pos_x][pos_y] == 2:
                print ("R")
                nouvelle_couleur = ["+R"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
            elif tableau[pos_x][pos_y] == 3:
                print ("J")
                nouvelle_couleur = ["+J"]
                w.destroy()
                talon [-1]= "".join(nouvelle_couleur)
                ordinateur ()
     
        can.bind("<Button-1>", couleur) # binding de la fonction couleur sur le canevas
        w.mainloop()  # boucle principale
     
    def deplacement_carte():
        global image, image_talon, images_cartes_joueur_1,carte_joueur_1, selection_carte, i
            # Suppression du tag pour que la carte ne puisse plus être cliquable
        table_jeu.dtag(image, "carte_joueur_1")
    # Déplacement de la carte sur le talon
        table_jeu.coords(image, COORD_TALON)
     # S'il y avait déjà une image sur le talon, on la supprime
        if image_talon is not None:
            table_jeu.delete(image_talon)
    # On affecte à l'image du talon la nouvelle carte
        image_talon = image
    # Suppression de l'image et de la carte
        images_cartes_joueur_1.pop(i)
        carte_joueur_1.pop(i)
    # Décalage vers la gauche des images (pour ne pas laisser de trou entre les cartes
        for ii in range(i, len(carte_joueur_1)):
            table_jeu.move(images_cartes_joueur_1[ii], -CHEVAUCHEMENT_CARTE, 0)
    # On remet à None la selection car il n'y en a plus.
        selection_carte = None 
     
     
    def jouer_carte (event):
        global image, image_talon, images_cartes_joueur_1,carte_joueur_1, selection_carte, i
    # items du canvas sur lequels le clic souris a été fait
        items = table_jeu.find_overlapping(event.x, event.y, event.x, event.y)
        i = len(carte_joueur_1) - 1 # index max des cartes joueurs
    # Parcours des images de droite à gauche
        for image in images_cartes_joueur_1[::-1]:
    # Si le clic correspond à cette image
            if image in items:
                break
            i -= 1
        else:
    # Le clic n'a pas été fait sur une image des cartes joueurs
    # Il n'y a rien à faire
            return
        carte = carte_joueur_1[i]
    # S'il y avait une sélection et que c'est la même que la nouvelle
        if selection_carte == i and carte [0] == talon[-1][0] or carte [1] == talon[-1][1] or carte=="+4" or carte=="4c":
            print("Le joueur joue la carte :", carte)
     
            #-------------------------------------conditions d'une carte posable-----------------------------------------
            if carte == '+4':   # +4 carte à l'adversaire
                talon.append (carte)
                deplacement_carte ()
                for i in range (4):        
                    p=cartes.pop()
                    n=len (carte_joueur_2)
                    o= (n*CHEVAUCHEMENT_CARTE)+ 200
                    carte_joueur_2.append(p)
                    table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
                    images_cartes_joueur_2.append(p)
                    o += CHEVAUCHEMENT_CARTE
                affichage_choix_couleur ()
     
            elif carte == '4c':    #changement de couleur
                talon.append (carte)
                deplacement_carte ()
                affichage_choix_couleur ()
     
            elif carte [1] == talon[-1][1] and carte [0] == "j" or talon[-1][0]=="j" and carte[0] == "j": # +2
                talon.append (carte)
                deplacement_carte ()
                for i in range (2):        
                    p=cartes.pop()
                    n=len (carte_joueur_2)
                    o= (n*CHEVAUCHEMENT_CARTE)+ 200
                    carte_joueur_2.append(p)
                    table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
                    images_cartes_joueur_2.append(p)
                    o += CHEVAUCHEMENT_CARTE
     
            elif carte [0] == "s" and carte [1]==talon[-1][1] or talon[-1][0]=="s" and carte [0]=="s" : # joker passe ton tour
                talon.append(carte)   
                deplacement_carte()
                    #comment faire rejouer l'adversaire
     
            elif carte [1] == talon[-1][1]:     # carte de la meme couleur du talon
                talon.append (carte)
                deplacement_carte()
     
     
            elif carte [0] == talon[-1][0]:  # carte du meme chiffre du talon
                talon.append (carte)
                deplacement_carte ()
            ordinateur ()
            #retourne au debut de jeu
    # Soit il n'y avait pas de sélection, soit elle différente de la précédente
        else:
            selection_carte = i
     
    def pioche ():
        pioche=cartes.pop ()
        if pioche[0] == talon[-1][0] or pioche [1] == talon[-1][1] or pioche=="+4" or pioche[1] == talon[-1][0] or pioche[0] == talon[-1][1] or pioche=="4c":  # et si on pioche un joker ? // verifier toute les conditions si il peut jouer et relancer carte posable
            print ("Tu peux jouer la carte pioché") #vérification
            n=len (carte_joueur_1)
            carte_joueur_1.append (pioche ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 550, image=images_cartes[pioche], tags="carte_joueur_1")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            bou1.config (state = tkinter.DISABLED)
            #relancer jouer carte (event)
     
        else :  
            print( "carte pioché pas jouable")
            n=len (carte_joueur_1)
            carte_joueur_1.append (pioche ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 550, image=images_cartes[pioche], tags="carte_joueur_1")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
            bou1.config (state = tkinter.DISABLED)
            ordinateur()
            #lancer fonction de l'ordi parce que carte pioché pas jouable
     
     
    def ordinateur ():
        cartes_jouables = []  
        valeur, couleur = talon[-1][0], talon[-1][1]   
        for carte in carte_joueur_2:  
             if carte[0] == valeur or carte[1] == couleur or carte=="+4" or carte=="4c":  
                 cartes_jouables.append(carte)  # est ce que ca prend TOUTES les cartes qu'il peut jouer ou que la première ?
                 carte_jouee_ordi = choice (cartes_jouables)  
     
                 if carte_jouee_ordi == '+4':
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi) 
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     nouvelle_couleur = []
                     liste= ["+B","+V","+J","+R"]
                     nouvelle_couleur.append (random.choice(liste))
                     talon [-1]= "".join(nouvelle_couleur)
                     print ("L'adversaire vient de jouer un +4") 
                     print ("Tu dois jouer sur du ", talon[-1][1])
                     for i in range (4):        # +4  carte dans tes cartes
                         p=cartes.pop()
                         n=len (carte_joueur_1)
                         o= (n*CHEVAUCHEMENT_CARTE)+ 200
                         carte_joueur_1.append(p)
                         image1=table_jeu.create_image(o, 550, image=images_cartes[p], tags="carte_joueur_1")
                         images_cartes_joueur_1.append(image1)
                         o += CHEVAUCHEMENT_CARTE
                     return;
     
                 elif carte_jouee_ordi == '4c':
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)    
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'ordinateur a joué un changement de couleur")  
                     liste= ["B","V","J","R"]
                     nouvelle_couleur = ["*"] 
                     nouvelle_couleur.append (random.choice (liste))
                     talon [-1]= "".join(nouvelle_couleur)
                     print ("Tu dois jouer sur du ", talon[-1][1])
     
                     return;
     
                 elif carte_jouee_ordi [1] == talon[-1][1] and carte_jouee_ordi [0] == "j" or talon[-1][0]=="j" and carte_jouee_ordi [0] == "j":    # +2
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'adversaire as joué un +2")   
                     print ("La dernière carte posée est :  ",talon [-1]  )
                     for i in range (2):        # +2  carte à l'adversaire
                         p=cartes.pop()
                         n=len (carte_joueur_1)
                         o= (n*CHEVAUCHEMENT_CARTE)+ 200
                         carte_joueur_1.append(p)
                         image2=table_jeu.create_image(o, 550, image=images_cartes[p], tags="carte_joueur_1")
                         images_cartes_joueur_1.append(image2)
                         o += CHEVAUCHEMENT_CARTE
                     return;
     
                 elif carte_jouee_ordi [0] == "s" and carte_jouee_ordi [1]==talon[-1][1] or talon[-1][0]=="s" and carte_jouee_ordi [0]=="s" : # joker passe ton tour
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)  
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'adversaire as joué un joker :", talon[-1])
                     print(" L'adversaire saute ton tour ! Il rejoue encore.")
                     ordinateur ()
                     return;
     
     
                 elif carte_jouee_ordi [1]==talon[-1][1] or carte_jouee_ordi[0]==talon[-1][0]:  
                     u=images_cartes_joueur_2.pop()
                     table_jeu.delete(u)
                     carte_joueur_2.remove(carte_jouee_ordi)  
                     talon.append(carte_jouee_ordi)         
                     table_jeu.create_image(z, 300, image=images_cartes[carte_jouee_ordi], tags="carte_talon")
                     print("L'adversaire a joué un  :" ,talon [-1]) 
                     return;
        pioche_ordi = cartes.pop()  
        print("L'adversaire pioche un :  ", pioche_ordi)      
        if pioche_ordi [0] == talon[-1][0] or pioche_ordi [1] == talon[-1][1] or pioche_ordi=="+4" or pioche_ordi[1] == talon[-1][0] or pioche_ordi[0] == talon[-1][1] or pioche_ordi=="4c":  
            print ("L'adversaire peut jouer la carte piochée") 
            carte_joueur_2.append (pioche_ordi)
            ordinateur ()
     
        else :  
            n=len (carte_joueur_2)
            carte_joueur_2.append (pioche_ordi ) 
            o= (n*CHEVAUCHEMENT_CARTE)+ 200
            image_p=table_jeu.create_image(o, 150, image=carte_dos, tags="carte_joueur_2")
            images_cartes_joueur_1.append(image_p)
            o += CHEVAUCHEMENT_CARTE
     
        return;
     
    def jeu():
        valeur, couleur = talon[-1][0], talon[-1][1]  
        cartes_jouables =[]
        for carte in carte_joueur_1:  
            if carte[0] == valeur or carte[1] == couleur or carte=="+4" or carte=="4c": 
                cartes_jouables.append (carte)
        if len (cartes_jouables) != 0:  #au moins une carte jouable
            table_jeu.tag_bind("carte_joueur_1", "<Button-1>", jouer_carte)
        else: #il n'a plus de cartes jouables (pioche)
            bou1.config (state = tkinter.NORMAL)
            ordinateur ()
        uno.after(10, jeu)
            #il ne se passe rien parce que normalement ca doit faire une boucle et revenir au debut de la fonction jeu()
    #--------------------PROGRAMME--------------------------------------------------------------
     
    #INTERFACE GRAPHIQUE
     
    LARGEUR_TABLE = 1500 
    HAUTEUR_TABLE = 700  
     
    uno= tk.Tk()
    # Distribution des cartes 
    images_cartes,joker,cartes,carte_joueur_1,carte_joueur_2,talon = initialisation()  
    # Largeur et hauteur des cartes (on prend en base celles de la 1ère carte) 
    LARGEUR_CARTE = images_cartes[cartes[0]].width()  #comment reduire la taille des cartes ?
    HAUTEUR_CARTE = images_cartes[cartes[0]].height() 
    # Chevauchement des cartes du joueur sur la table
    CHEVAUCHEMENT_CARTE = int(LARGEUR_CARTE / 2)
     
    table_jeu = tk.Canvas(uno, width=LARGEUR_TABLE, height=HAUTEUR_TABLE, bg="green")
    table_jeu.grid()
     
    # Création sur la table de l'image de la pioche (bouton)
    image_pioche = tk.PhotoImage(file='imagecarte/dos.png')
    bou1 = tk.Button(uno, text='Pioche',image=image_pioche, command = pioche)
    bou1.place(x=1200, y=300)
    bou1.config (state = tkinter.DISABLED)
     
    # coordonnée sur la table de jeu du talon
    COORD_TALON = (
        int(LARGEUR_TABLE / 2 + LARGEUR_CARTE + 50),
        300,
    )
    # Création sur la table de l'image du talon
    z=LARGEUR_TABLE / 2 + LARGEUR_CARTE + 50
    image_talon = []
    for carte in talon :    #comment faire pour que ca affiche que la derniere valeur du talon ?
        image_id = table_jeu.create_image(z, 300, image=images_cartes[carte], tags="carte_talon")
        image_talon.append(image_id)
     
    # Création sur la table des images des cartes du joueur1.
    x=200
    images_cartes_joueur_1 = []
    for carte in carte_joueur_1:
        image_id = table_jeu.create_image(x, 550, image=images_cartes[carte], tags="carte_joueur_1")
        images_cartes_joueur_1.append(image_id)
        x += CHEVAUCHEMENT_CARTE
     
     # Création sur la table des images des l'ordi.
    w = 200
    carte_dos = tk.PhotoImage(file='imagecarte/dos.png')
    images_cartes_joueur_2 = []
    for i in range (len(carte_joueur_2)):
        image_id = table_jeu.create_image(w, 150, image=carte_dos, tags="carte_joueur_2")
        images_cartes_joueur_2.append(image_id)
        w += CHEVAUCHEMENT_CARTE
     
    image_talon = None
    selection_carte = None 
    uno.after_idle(jeu)
    uno.mainloop()

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Si quelqu'un veut tester notre code j'ai crée un drive avec le dossier image (https://drive.google.com/open?id=1AZ...4KDxI1VWfIAa);)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arnoanais Voir le message
    De plus j'ai essayé de simplifier le code mais je rencontre des problèmes dont je ne connais pas la source...
    S'il fonctionne, il ne faut surtout plus y toucher. S'il ne fonctionne pas, alors bon courage

    Citation Envoyé par Arnoanais Voir le message
    Comment pourrait on le simplifier ?
    En évitant de corseter le fonctionnement de tkinter en appelant .update n'importe où.
    Et çà simplifie les choses car, çà va sérialiser l'appel des callbacks: un callback sera appelé après l'autre par la mainloop (que l 'on peut remplacer par .update mais pas partout).
    Cela garanti que l'état des différentes variables du programme ne changent pas entre le début et la fin d'un callback.
    Cette sérialisation est à la base de la programmation évènementielle. C'est une technique mise au point par vos anciens dans les années 70/80 et c'est ce que vous apprenez en ouvrant un bon tuto. sur tkinter.
    Et rien que çà, c'est pas de la tarte, vu que tout votre code est basé la dessus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui j'avais enlevé tout les updates et les sleep qui sont une source d'erreur si mal utilisés. Est ce que vous pouvez jeter un coup d'oeil au code et essayer de trouver une erreur si vous avez un peu de temps ?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arnoanais Voir le message
    Est ce que vous pouvez jeter un coup d'oeil au code et essayer de trouver une erreur si vous avez un peu de temps ?
    Désolé mais lire 400 lignes de code aussi mal écrites n'est pas ma tasse de thé.
    Par contre, si vous avez un problème, vous pouvez essayer de le reproduire en quelques lignes. Moi (ou d'autres) pourront y jeter un œil.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/03/2016, 13h01
  2. [Tkinter] Button, lambda et boucle : effet indesirable
    Par KINENVEU dans le forum Tkinter
    Réponses: 6
    Dernier message: 24/09/2011, 08h56
  3. Tkinter Bind et boucle infinie
    Par lilly74 dans le forum Tkinter
    Réponses: 3
    Dernier message: 12/03/2010, 23h41
  4. Boucles dans Tkinter
    Par Nightmare Theater dans le forum Tkinter
    Réponses: 3
    Dernier message: 28/02/2010, 14h54
  5. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06

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