Jeu de dames sur tkinter
Fermé
CalioPur
-
20 févr. 2021 à 18:06
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 21 févr. 2021 à 16:28
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 21 févr. 2021 à 16:28
A voir également:
- Jeu de dames python
- 94 jeu - Télécharger - Puzzle & Réflexion
- Jeu zuma - Télécharger - Jeux vidéo
- Jeux de moto: jeu de course 3d - Télécharger - Course
- Citizen code python - Guide
- Jeu shazam comment scanner ✓ - Forum Jeux vidéos smartphones
5 réponses
dachiasse
Messages postés
1709
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
148
20 févr. 2021 à 18:23
20 févr. 2021 à 18:23
Salut,
Je n'ai plus fait de tkinter depuis un moment, mais, en algorithmique, tu pourrais essayer de créer une fonction qui retourne une liste de cases à verdir. La fonction prendrait la case cliquée en paramètres d'entrée, puis tu calcules les cases en ajoutant/retirant une valeur entière n à i et j et à chaque étape valide tu ajoutes la case dans la liste finale tant que le résultat n'est pas inférieur à 0 (première case en [0][0]) ni supérieur à N ([N][N] étant la dernière case).
Ensuite, dans une fonction de mise à jour de l'affichage, tu récupères le retour de la première fonction en tant que paramètres d'entrée.
Je n'ai plus fait de tkinter depuis un moment, mais, en algorithmique, tu pourrais essayer de créer une fonction qui retourne une liste de cases à verdir. La fonction prendrait la case cliquée en paramètres d'entrée, puis tu calcules les cases en ajoutant/retirant une valeur entière n à i et j et à chaque étape valide tu ajoutes la case dans la liste finale tant que le résultat n'est pas inférieur à 0 (première case en [0][0]) ni supérieur à N ([N][N] étant la dernière case).
Ensuite, dans une fonction de mise à jour de l'affichage, tu récupères le retour de la première fonction en tant que paramètres d'entrée.
j'assigne déjà les cases censé être verte, malheureusement, c'est l'affichage qui ne fonctionne pas ^^'
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
21 févr. 2021 à 10:41
21 févr. 2021 à 10:41
Bonjour,
merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique), et pas à ce que tu as affiché :
merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique), et pas à ce que tu as affiché :
def test(): print('test') test()
pardon, je savais pas comment faire, le voici :
my_root.mainloop()
from tkinter import* WIDTH=400 HEIGHT=400 plateau=[[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]] def placerLesPions(cnv,plateau): for i in range (10): for j in range (10): if plateau[i][j]==1: cnv.create_oval((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='black', outline='') elif plateau[i][j]==2: cnv.create_oval((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='bisque', outline='') def souris(event): global cnv #print("x", event.x, end=" ") #print("y", event.y) x=int(event.x//(HEIGHT/10)) y=int(event.y//(WIDTH/10)) options(x,y) def options(x,y): global cnv global plateau if plateau[x][y]==1 or plateau[x][y]==2: if plateau[x+1][y+1]==0: plateau[x+1][y+1]=5 if plateau[x+1][y-1]==0: plateau[x+1][y-1]=5 if plateau[x-1][y+1]==0: plateau[x-1][y+1]=5 if plateau[x-1][y-1]==0: plateau[x-1][y-1]=5 for j in range(10): for i in range (10): print(plateau[i][j], end=' ') print() print() # Le constructeur Tk my_root=Tk() cnv=Canvas(my_root, width=WIDTH, height=HEIGHT, background='papaya whip') cnv.pack() for i in range (10): for j in range (10): if i==0 or i%2==0: if j==0 or j%2==0: cnv.create_rectangle((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='sienna4', outline='') if i%2==1: if j%2==1: cnv.create_rectangle((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='sienna4', outline='') for i in range (10): for j in range (10): if plateau[i][j]==5: cnv.create_rectangle((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='lime green', outline='') placerLesPions(cnv,plateau) cnv.bind("<Button-1>", souris) my_root.update
my_root.mainloop()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
Modifié le 21 févr. 2021 à 16:44
Modifié le 21 févr. 2021 à 16:44
Pour faire plus propre et plus homogène, tu peux même créer le dessin du plateau dans une fonction:
A part ça, ton code affiche un damier et imprime le contenu du tableau quand on clique une case, mais tu ne cherche pas la diagonale pour la peindre en vert ...
De plus, ce qui est troublant quand on veut se retrouver dans les coordonnées des cases, c'est que dans la variable plateau, les 1 (donc les noirs) sont en haut et les 2 (donc les blancs) en bas
et graphiquement, les noirs sont à gauche et les blancs à droite
Et puis moi, au lieu d'utiliser tous ces nombres magiques, je ferais ça:
et plus loin :
etc ...
# -*- coding:Latin-1 -*- from tkinter import* WIDTH=400 HEIGHT=400 plateau=[[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]] def creer_plateau(): for i in range (10): for j in range (10): if i==0 or i%2==0: if j==0 or j%2==0: cnv.create_rectangle((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='sienna4', outline='') if i%2==1: if j%2==1: cnv.create_rectangle((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='sienna4', outline='') for i in range (10): for j in range (10): if plateau[i][j]==5: cnv.create_rectangle((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='lime green', outline='') def placerLesPions(plateau): for i in range (10): for j in range (10): if plateau[i][j]==1: cnv.create_oval((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='black', outline='') elif plateau[i][j]==2: cnv.create_oval((i*(WIDTH/10),j*(HEIGHT/10),(i*(WIDTH/10)+(WIDTH/10)),(j*(HEIGHT/10)+(HEIGHT/10))), fill='bisque', outline='') def souris(event): global cnv x=int(event.x//(HEIGHT/10)) y=int(event.y//(WIDTH/10)) options(x,y) def options(x,y): global cnv global plateau if plateau[x][y]==1 or plateau[x][y]==2: if plateau[x+1][y+1]==0: plateau[x+1][y+1]=5 if plateau[x+1][y-1]==0: plateau[x+1][y-1]=5 if plateau[x-1][y+1]==0: plateau[x-1][y+1]=5 if plateau[x-1][y-1]==0: plateau[x-1][y-1]=5 for j in range(10): for i in range (10): print(plateau[i][j], end=' ') print() print() my_root=Tk() cnv=Canvas(my_root, width=WIDTH, height=HEIGHT, background='papaya whip') cnv.pack() cnv.bind("<Button-1>", souris) creer_plateau() placerLesPions(plateau) my_root.mainloop()
A part ça, ton code affiche un damier et imprime le contenu du tableau quand on clique une case, mais tu ne cherche pas la diagonale pour la peindre en vert ...
De plus, ce qui est troublant quand on veut se retrouver dans les coordonnées des cases, c'est que dans la variable plateau, les 1 (donc les noirs) sont en haut et les 2 (donc les blancs) en bas
et graphiquement, les noirs sont à gauche et les blancs à droite
Et puis moi, au lieu d'utiliser tous ces nombres magiques, je ferais ça:
BLACK = 1 WHITE = 2
et plus loin :
if plateau[i][j]==BLACK:
etc ...