Bonjour tout le monde, nous sommes en terminale et avons un projet de fin d'année a faire sur python. Nous avons bien avancé le fonctionnement du jeu (sans interface) et avon commencer a afficher le plateau de jeu et les carte du joueur et de l'adversaire, ainsi que le talon sur lequel on joue les carte. Cependant nous sommes bloqués : il faut sélectionner une carte et vérifier si elle est jouables sur le paquet. Avant ca, il faut verifier si le joueur a au moins une carte jouables et sinon, il pioche automatiquement.. Ces fonctions ont été faites mais sans interface Tkinter. Pouvez vous jeter un coup d'oeil au code et nous aidez ? Merci !
PS: les images des cartes sont dans un dossier imagecarte

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
 
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Apr  8 17:01:04 2018
 
@author: Arnold
"""
 
import random  
 
from random import choice   
import tkinter as tk 
 
 
 
def initialisation():       
    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 carte_posable ():     
    valeur, couleur = talon[-1][0], talon[-1][1]   
    for carte in carte_joueur_1:   
            if carte[0] == valeur or carte[1] == couleur or carte=="+4" or carte=="4c":   
                carte_jouee = input("Que jouez-vous ?    ")      
                coup_possible (carte_jouee)    
                return;  
 
    pioche = cartes.pop()   
    print("Tu as pioché la carte : ", pioche )     
    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ée")  
        carte_joueur_1.append (pioche) 
        print (carte_joueur_1) 
        carte_jouee = input("Que jouez-vous ?    ")      
        coup_possible (carte_jouee) 
        return; 
    else :   
        carte_joueur_1.append (pioche )      
 
 
def coup_possible (carte_jouee):       
 
    if carte_jouee == '+4':   # +4 
        carte_joueur_1.remove(carte_jouee)   
        talon.append(carte_jouee)          
        print("Tu as joué cette carte et quelle couleur choisis tu ?")    
        nouvelle_couleur = ["+"] 
        nouvelle_couleur.append (input ("Ecris la premiere lettre de ta couleur :  ")) 
        talon [-1]= "".join(nouvelle_couleur) 
        print ("le joueur joue sur un  ", talon[-1]) 
        for i in range (4):        # +4  carte à l'adversaire 
            carte_joueur_2.append(cartes.pop()) 
 
    elif carte_jouee == '4c': 
        carte_joueur_1.remove(carte_jouee)   
        talon.append(carte_jouee)          
        print("Tu as joué un changement de couleur, quelle couleur choisis tu ?")    
        nouvelle_couleur = ["*"] #pour que le joeur puisse jouer que une carte de la couleur du talon (pas de valeur) 
        nouvelle_couleur.append (input ("Ecris la premiere lettre de ta couleur :  ")) 
        talon [-1]= "".join(nouvelle_couleur) 
    elif carte_jouee [1] == talon[-1][1] and carte_jouee [0] == "j" or talon[-1][0]=="j" and carte_jouee [0] == "j":    # +2 
        carte_joueur_1.remove(carte_jouee)   
        talon.append(carte_jouee) 
        print ("Tu as joué un +2") 
        for i in range (2):        # +2  carte à l'adversaire 
            carte_joueur_2.append(cartes.pop()) 
 
    elif carte_jouee [0] == "s" and carte_jouee [1]==talon[-1][1] or talon[-1][0]=="s" and carte_jouee [0]=="s" : # joker passe ton tour 
        carte_joueur_1.remove(carte_jouee)   
        talon.append(carte_jouee)   
        print(" Tu sautes le tour de l'adversaire ! Rejoue encore.") 
        carte_posable () 
 
    elif carte_jouee[1]==talon[-1][1] or carte_jouee[0]==talon[-1][0]:       
 
        carte_joueur_1.remove(carte_jouee)   
 
        talon.append(carte_jouee)          
 
        print("Tu as joué cette carte")       
 
    else:       
        print("Carte impossible à jouer: chosis une autre carte")        
        carte_jouee = input("Que jouez-vous ?    ")      
        coup_possible (carte_jouee)    
 
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': 
                 carte_joueur_2.remove(carte_jouee_ordi)   
                 talon.append(carte_jouee_ordi)           
                 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 
                     carte_joueur_1.append(cartes.pop())  
                 return;  
             elif carte_jouee_ordi == '4c': 
                 carte_joueur_2.remove(carte_jouee_ordi)   
                 talon.append(carte_jouee_ordi)          
                 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 
                 carte_joueur_2.remove(carte_jouee_ordi)   
                 talon.append(carte_jouee_ordi) 
                 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 
                     carte_joueur_1.append(cartes.pop()) 
                 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 
                 carte_joueur_2.remove(carte_jouee_ordi)   
                 talon.append(carte_jouee_ordi)   
                 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]:       
                 carte_joueur_2.remove(carte_jouee_ordi)   
                 talon.append(carte_jouee_ordi)          
                 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 :   
        carte_joueur_2.append (pioche_ordi )       
 
 
#INTERFACE GRAPHIQUE
 
LARGEUR_TABLE = 1000 
HAUTEUR_TABLE = 600  
 
uno= tk.Tk()
images_cartes,joker,cartes,carte_joueur_1,carte_joueur_2,talon = initialisation()  # Distribution des cartes 
 
 
# 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)
 
# coordonnée sur la table de jeu de l'image du talon
COORD_TALON = (
    int(LARGEUR_TABLE / 2 + LARGEUR_CARTE + 50),
    300,
)
 
# coordonnée sur la table de jeu de l'image de la pioche
COORD_PIOCHE = (
    int(LARGEUR_TABLE / 2 - LARGEUR_CARTE - 50),
    int(HAUTEUR_TABLE / 2),
)
 
table_jeu = tk.Canvas(uno, width=LARGEUR_TABLE, height=HAUTEUR_TABLE, bg="green")
table_jeu.grid()
 
# Création sur la table du talon
z=int(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 = LARGEUR_TABLE / 2 - CHEVAUCHEMENT_CARTE * 3.5 # 3.5 = 7 (cartes) / 2
images_cartes_joueur_1 = []
for carte in carte_joueur_1:
    image_id = table_jeu.create_image(x, 500, 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 = LARGEUR_TABLE / 2 - CHEVAUCHEMENT_CARTE * 3.5 # 3.5 = 7 (cartes) / 2
images_cartes_joueur_2 = []
for carte in carte_joueur_2:
    image_id = table_jeu.create_image(w, 150, image=images_cartes[carte], tags="carte_joueur_2")
    images_cartes_joueur_2.append(image_id)
    w += CHEVAUCHEMENT_CARTE
 
image_talon = None
selection_carte = None 
 
 
 
 
uno.mainloop()    
 
 
 
 
while carte_joueur_1 and carte_joueur_2 : 
    carte_posable ()    
    if len (carte_joueur_1)== 0:
        print ("Tu as gagné la partie")
        break ;
    print ("Tes cartes sont donc :   ",carte_joueur_1) 
 
    ordinateur ()
    if len (carte_joueur_2)== 0:
        print ("L'adversaire a gagné la partie")
        break ;
    print ("Tes nouvelles cartes sont ", carte_joueur_1)