Bonjour à tous,

Je suis aujourd'hui face à un problème que je n'arrive pas à résoudre, en effet je souhaite réaliser le déplacement de mes pions. J'ai déjà réalisé les test de déplacement pour qu'à partir d'un pions donné deux pions sont crée pour représenter les possibilités.

Cependant je n'arrive pas à écrire la fonction de déplacement, je vous joins mon code ci-dessous :
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
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
 
 
########################
#### Importations ######
########################
 
from tkinter import *
from tkinter.simpledialog import *
from tkinter.messagebox import showerror
 
#########################
### Variables globales###
#########################
player1=''
player2=''
started=True
 
#########################################################################
############################# Fonctions principales #####################
#############################                       #####################
#########################################################################
 
 
##### Les fonctions pions1 et pions2 permettent l'affichage des pions sur le damier
def pions1():
    global pionsNoirs,black
    x,j=0,0
    for y, x in pionsNoirs:
        damier.create_oval(x*dimension_case, y*dimension_case, (x+1)*dimension_case, (y+1)*dimension_case,outline='white', fill="#623005")## Pions Noirs
 
def pions2():
    global pionsblanc,white
    x,j=0,0
 
    for y, x in pionsBlancs:
        damier.create_oval(x*dimension_case, y*dimension_case, (x+1)*dimension_case, (y+1)*dimension_case,outline='black', fill="#D78A46")## Pions Blancs
 
 
 
##### La fonction generateDamier permet l'affichage du damier
def generateDamier():
 
    i=0
    while i<sizeDamier:
        j=0
        while j<sizeDamier:
            if i%2==0:
                if j%2==0:
                    damier.create_rectangle(j*dimension_case, i*dimension_case, (j*dimension_case)+dimension_case, (i*dimension_case)+dimension_case, fill="#E49E60")## Couleur foncé
                else:
                    damier.create_rectangle(j*dimension_case, i*dimension_case, (j*dimension_case)+dimension_case, (i*dimension_case)+dimension_case,fill="#623005")## Couleur claire
            else:
                if j%2==0:
                    damier.create_rectangle(j*dimension_case, i*dimension_case, (j*dimension_case)+dimension_case, (i*dimension_case)+dimension_case, fill="#623005")
                else:
                    damier.create_rectangle(j*dimension_case, i*dimension_case, (j*dimension_case)+dimension_case, (i*dimension_case)+dimension_case, fill="#E49E60")
            j+=1
        i+=1
        pions1()
        pions2()
 
##### Les fonctions damier8 et damier10 permettent l'affichage d'un damier de 8X8 10X10 ou encore 12X12 cases
def damier8():
    global dimension_case, sizeDamier, rangee_pions,damier,x0,y0,c,nb,casesBlanches,casesNoires, pionsNoirs,pionsBlancs,casesDamier,provisoireBlancs
    dimension_case=75##600/8
    sizeDamier=8
    rangee_pions=3
    nb= 8# nombre de cases (grille carree)
    c=75
    x0,y0=0,0
 
    pionsNoirs=[   [0,1],[0,3],[0,5],[0,7],
                   [1,0],[1,2],[1,4],[1,6],
                   [2,1],[2,3],[2,5],[2,7]]
 
    casesDamier=[  [0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],
                   [1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],
                   [2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7],
                   [3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7],
                   [4,0],[4,1],[4,2],[4,3],[4,4],[4,5],[4,6],[4,7],
                   [5,0],[5,1],[5,2],[5,3],[5,4],[5,5],[5,6],[5,7],
                   [6,0],[6,1],[6,2],[6,3],[6,4],[6,5],[6,6],[6,7],
                   [7,0],[7,1],[7,2],[7,3],[7,4],[7,5],[7,6],[7,7] ]
 
 
    casesNoires=[  [0,1],[0,3],[0,5],[0,7],
                   [1,0],[1,2],[1,4],[1,6],
                   [2,1],[2,3],[2,5],[2,7],
                   [3,0],[3,2],[3,4],[3,6],
                   [4,1],[4,3],[4,5],[4,7],
                   [5,0],[5,2],[5,4],[5,6],
                   [6,1],[6,3],[6,5],[6,7],
                   [7,0],[7,2],[7,4],[7,6]]
 
    pionsBlancs=[  [5,0],[5,2],[5,4],[5,6],
                   [6,1],[6,3],[6,5],[6,7],
                   [7,0],[7,2],[7,4],[7,6]]
 
    provisoireBlancs=[]
 
 
    generateDamier()
 
def damier10():
    global dimension_case, sizeDamier, rangee_pions,damier,nb,c,x0,y0,casesBlanches,casesNoires,pionsNoirs,pionsBlancs,casesDamier,provisoireBlancs
    dimension_case=60## 600/15
    sizeDamier=10
    rangee_pions=4
    nb=10
    c=60## Tailles des cases d'un damier en 10*10
    x0,y0=0,0
 
    pionsNoirs=[   [0,1],[0,3],[0,5],[0,7],[0,9],
                   [1,0],[1,2],[1,4],[1,6],[1,8],
                   [2,1],[2,3],[2,5],[2,7],[2,9],
                   [3,0],[3,2],[3,4],[3,6],[3,8]]
 
    casesDamier=[  [0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],
                   [1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],
                   [2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7],[2,8],[2,9],
                   [3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7],[3,8],[3,9],
                   [4,0],[4,1],[4,2],[4,3],[4,4],[4,5],[4,6],[4,7],[4,8],[4,9],
                   [5,0],[5,1],[5,2],[5,3],[5,4],[5,5],[5,6],[5,7],[5,8],[5,9],
                   [6,0],[6,1],[6,2],[6,3],[6,4],[6,5],[6,6],[6,7],[6,8],[6,9],
                   [7,0],[7,1],[7,2],[7,3],[7,4],[7,5],[7,6],[7,7],[7,8],[7,9],
                   [8,0],[8,1],[8,2],[8,3],[8,4],[8,5],[8,6],[8,7],[8,8],[8,9],
                   [9,0],[9,1],[9,2],[9,3],[9,4],[9,5],[9,6],[9,7],[9,8],[9,9]]
 
 
 
    casesNoires=[  [0,1],[0,3],[0,5],[0,7],[0,9],
                   [1,0],[1,2],[1,4],[1,6],[1,8],
                   [2,1],[2,3],[2,5],[2,7],[2,9],
                   [3,0],[3,2],[3,4],[3,6],[3,8],
                   [4,1],[4,3],[4,5],[4,7],[4,9],
                   [5,0],[5,2],[5,4],[5,6],[5,8],
                   [6,1],[6,3],[6,5],[6,7],[6,9],
                   [7,0],[7,2],[7,4],[7,6],[7,8],
                   [8,1],[8,3],[8,5],[8,7],[8,9],
                   [9,0],[9,2],[9,4],[9,6],[9,8]]
 
 
    pionsBlancs=[  [6,1],[6,3],[6,5],[6,7],[6,9],
                   [7,0],[7,2],[7,4],[7,6],[7,8],
                   [8,1],[8,3],[8,5],[8,7],[8,9],
                   [9,0],[9,2],[9,4],[9,6],[9,8]]
 
    provisoireBlancs=[]
 
    generateDamier()
 
 
 
def deplacementsBlancs(event):
    ## Les conditions de déplacement sont réalisées ici
def deplacementpossiblesBlancs():
    global hautdroit,hautgauche
 
############TEST possibilitées
    ### Possibilités pionsBlancs
    if[y,x] in pionsBlancs:
        t1.delete("0.0",END)
 
        ## Déplacement pionsBlancs en haut à droite
        if [y-1,x+1] in casesNoires:
            if [y-1,x+1]not in( pionsNoirs and pionsBlancs):
                t1.insert(END,"(coup haut droite )+")
 
                hautdroit=damier.create_oval((x+1)*dimension_case, (y-1)*dimension_case, (x+2)*dimension_case, (y)*dimension_case,outline='white', fill="green")## Pions Noirs
                provisoireBlancs.append([y-1,x+1]) ## on ajoute à la variable provisoireBlancs les coordonnées d'un déplacement possible
                print(provisoireBlancs)
                damier.bind("<Button-1>",deplacementsBlancs)## si on clique on lance la fonction deplacement    
 
 
 
            if [y-1,x+1] in (pionsBlancs or pionsNoirs):
                t1.insert(END,"")               
 
        ## Déplacement pionsBlancs en haut à gauche
        if [y-1,x-1] in casesNoires:
            if [y-1,x-1]not in( pionsNoirs and pionsBlancs):
                t1.insert(END,"(coup haut gauche)+")
 
 
                hautgauche=damier.create_oval((x-1)*dimension_case, (y-1)*dimension_case, (x)*dimension_case, (y)*dimension_case,outline='white', fill="red")## Pions Noirs
                provisoireBlancs.append([y-1,x-1])
                print(provisoireBlancs)
 
                damier.bind("<Button-1>",deplacementsBlancs)    
 
            if [y-1,x-1] in (pionsBlancs or pionsNoirs):
                t1.insert(END,"")
 
 
        ## Si ce n'est pas dans une cases noire déplacement impossible
        if [y-1,x+1] not in casesNoires:
                t1.insert(END,"")
 
 
def deplacementpossibleNoirs():
 
    ## possibilitées pionsNoirs
    if[y,x] in pionsNoirs:
        t1.delete("0.0",END)
 
        ## Déplacement pionsNoirs en bas à droite
        if [y+1,x+1] in casesNoires:
            if [y+1,x+1]not in( pionsNoirs or pionsBlancs):
                t1.insert(END,"(coup bas droite )")
 
            if [y+1,x+1] in (pionsBlancs or pionsNoirs):
                t1.insert(END,"")
 
 
 
        ## Déplacement pionsNoirs en bas à gauche
        if [y+1,x-1] in casesNoires:
            if [y+1,x-1]not in( pionsNoirs or pionsBlancs):
                t1.insert(END,"(coup bas gauche )")
            if [y+1,x-1] in (pionsBlancs or pionsNoirs):
                t1.insert(END,"")
 
 
 
 
 
### Detection des coordonnées     
# fonction de correspondance
def correspond(x,y):
    global  damier,mainFen,texto,coord
    return((y-y0)//c,(x-x0)//c)
 
def ecrire(event):
    global  damier,mainFen,texto ,sizeDamier,dimension_case,coord,x,y
 
    t.delete("0.0",END)
    t1.delete("0.0",END)
    (i,j)=correspond(event.x,event.y)
    if i in range(nb) and j in range (nb):
        t.insert(END,"click dans la case  ou i  et j vallent " + str(int(i)) + "," + str(int(j)))
    coord=[i,j]
    y=i
    x=j
 
 
    testCases()
 
 
def testCases():
 
    if started:
        deplacementpossiblesBlancs()
 
 
    if not started : 
        deplacementpossibleNoirs()
 
######################################################################################
####################################                     #############################
#################################### INTERFACE GRAPHIQUE #############################
######################################################################################
 
 
def graphInterface():
 
 
    global mainFen,texto,dimension_case,damier,t1,t,t2
 
    mainFen=Tk()
    mainFen.title("Jeu de Dame")
 
 
    ###### Demande aux joueurs leurs noms
    player1 = askstring("Initialisation de la partie", "Joueur 1 (pions blancs) :" )
    player2 = askstring("Initialisation de la partie", "Joueur 2 (pions noirs) :")
 
    while (not player1 and not player2)or(not player1 or not player2) :
        false=showerror('Saisie incorrecte', 'Votre saisie est incorrecte veuillez recommencer')
        player1 = askstring("Initialisation de la partie", "Joueur 1 (pions blancs) :" )
        player2 = askstring("Initialisation de la partie", "Joueur 2 (pions noirs) :")
 
###### Label score Noirs
    scoreNoirs=Label(mainFen,text=player2+' :(score noir) : ',fg='#4E2E12',width=75,font = "Arial 22 bold italic",bg='#D78A46')
    scoreNoirs.pack()
    t2=Text(mainFen,height=1,width=60,bg="light grey",font=("comic",18,"bold"))
    t2.pack
##### Canvas du damier
    damier=Canvas(mainFen, width=600, height=600, bg="#4E2E12",relief='solid', borderwidth=4)
    damier.pack()
 
    scoreBlancs=Label(mainFen, text=player1+' :(score blanc) : ', fg='#D78A46',relief='sunken',width=75,font = "Arial 22 bold italic",bg='#4E2E12')
    scoreBlancs.pack()
 
    boutonNewGame=Button(mainFen, text="Nouvelle Partie", command=newGame)
    boutonNewGame.pack(side=LEFT)   
 
    boutonQuitter=Button(mainFen, text="Quitter", command=mainFen.destroy)
    boutonQuitter.pack(side=RIGHT)
 
    b2=Button(mainFen,text="Commencer la partie",command=plateauSize)
    b2.pack()
 
    t1=Text(mainFen,height=1,width=60,bg="light grey",font=("comic",18,"bold"))
    t1.pack()
    t=Text(mainFen ,height=1,width=40,bg="light grey",font=("comic",18,"bold"))
    t.pack()
 
    damier.bind("<Button-1>",ecrire)    
    ######################
    ### Menu en cascade###
    ######################
    menuCascading = Menu(mainFen)  ## Créer la barre de menu
 
 
    menuFile = Menu(menuCascading)
    menuCascading.add_cascade(label = "Fichier", menu=menuFile)
    menuFile.add_command(label="Nouvelle partie",command=newGame ) 
    menuFile.add_command(label="Quitter", command=mainFen.destroy)
 
 
    menuConfig=Menu(menuCascading)
    menuCascading.add_cascade(label = "Configuration", menu=menuConfig)
    menuConfig.add_command(label="Taille du plateau", command=plateauSize)
 
    menuSauvegarde=Menu(menuCascading)
    menuCascading.add_cascade(label = "Sauvegarde", menu=menuSauvegarde)
    menuSauvegarde.add_command(label="Sauvegarder partie", command=plateauSize)
    menuSauvegarde.add_command(label="Charger partie", command=plateauSize)
 
    menuInfo=Menu(menuCascading)
    menuCascading.add_cascade(label = "Informations", menu=menuInfo)
    menuInfo.add_command(label="Règles du jeu ", command=Regles)
 
    mainFen.config(menu = menuCascading)
 
 
    mainFen.mainloop()
 
 
 
## Règles du jeu
 
def Regles():
    regle=Tk()
    regle.title('Règles du jeu ')
    regle.geometry('1000x1000+150+150')
    ##  lecture du fichier test.txt qui contient les règles du jeu de dames
 
    f=open('regle.txt','r')
    data=f.read()
 
    texte=Text(regle,fg='blue',bg='grey',width=100,height=40)
    texte.insert(END, data)
    texte.pack()
 
    boutonQuitter=Button(regle, text="Quitter", command=regle.destroy)
    boutonQuitter.pack(side=BOTTOM)
 
## paramètre de la taille du plateau
 
def plateauSize():
    plateau=Tk()
    plateau.title('Paramètres du damier')
    plateau.geometry("225x150+785+50")
    def afterPlateauSize8():
        plateau.destroy()
        damier8()
    def afterPlateauSize10():
        plateau.destroy()
        damier10()
 
    bouton8=Button(plateau, text="Damier de 8 X 8 cases", command=afterPlateauSize8)
    bouton8.pack(pady=15)
 
    bouton10=Button(plateau, text="Damier de 10 X 10 cases", command=afterPlateauSize10)
    bouton10.pack(pady=15)
 
    boutonQuitter=Button(plateau, text="Quitter", command=plateau.destroy)
    boutonQuitter.pack()
 
    plateau.mainloop()
 
 
 
 
 
## Accueil du jeux demandant de choisir si l'on souhaite jouer contre une personne ou contre l'ordinateur
 
def accueil():
    accueil=Tk()
    accueil.title("Page d'accueil")
    accueil.geometry("367x330+785+230")
 
    ## La fonction afteraccueil permet de tuer le processus de la fenètre actuelle tout en lançant la fonction d'une autre fenètre
    def afteraccueil():   
        accueil.destroy()
        graphInterface()
 
 
 
    ####### Fond d'écran de la page d'accueil
    image=Canvas(accueil,width="801",height="801")
    photo = PhotoImage(file= "DECO62.gif")
    image.create_image(40,90,image=photo)
    image.grid(row=0, column=0, rowspan=12,columnspan=12)
 
 
    humanvshuman=Button(text='Joueur contre Joueur',command=afteraccueil,font = "Arial 19 bold italic")
    humanvshuman.grid(row=1,column=1)
 
    humanvsmachine=Button(text='Joueur contre ordinateur',command=afteraccueil,font = "Arial 19 bold italic")
    humanvsmachine.grid(row=2,column=1)
 
    boutonQuitter=Button(accueil, text="Quitter", command=accueil.destroy,font = "Arial 19 bold italic")
    boutonQuitter.grid(row=3,column=1)
 
 
    accueil.mainloop()
 
 
 
## Fonction qui relance la partie
def newGame():
    mainFen.destroy()
    accueil()
 
 
### TEST
accueil()

Si vous avez des question par rapport à mon code ou par rapport à mon problème n'hésitez surtout pas.
Je vous remercie d'avance.