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
Bonjour, je veux faire un jeu de dames avec tkinter, j'en suis au tout début et je veux faire en sorte que les cases en diagonales du pion cliqué soit vertes, mais ça ne marche pas. pouvez vous m'aider ? voici mon code :

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()


Configuration: Windows / Firefox 85.0
A voir également:

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
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.
1
j'assigne déjà les cases censé être verte, malheureusement, c'est l'affichage qui ne fonctionne pas ^^'
1
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
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é :

def test():
    print('test')

test()
1
pardon, je savais pas comment faire, le voici :

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()
1

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
Pour faire plus propre et plus homogène, tu peux même créer le dessin du plateau dans une fonction:
# -*- 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 ...
1