Jeu de carte

Le programme suivant dessine une carte sur un canvas. Un clic gauche avec la souris sur la carte retourne celle-ci.

jeu de cartes

Voici le programme. Pour le tester, vous aurez besoin de copier les fichiers carte<numero>.png dans le même dossier que le fichier python contenant le programme.

  
              import tkinter as tk

              # Variables globales
              LARGEUR, HAUTEUR = 292, 296
              no_image = 1 # No de carte
              
              def change_carte(event):
                  """Changement de carte si clic sur la carte"""
                  global no_image, imgtk
                  # On verifie que le clic a eu lieu sur la carte
                  if 50 < event.x < 242 and 10 < event.y < 286:
                      no_image = no_image % 8 + 1 # echange du no de carte
                      imgtk = tk.PhotoImage(file="carte" + str(no_image) + ".png")
                      # On charge la nouvelle image
                      surface_dessin.itemconfigure(ma_carte, image=imgtk)
              
              # Création de la fenêtre principale (main window)
              mon_app = tk.Tk()
              mon_app.title('Jeu de carte')
              
              # Création d'un widget Canvas (zone graphique)
              surface_dessin = tk.Canvas(mon_app, width=LARGEUR, height=HAUTEUR, bg='white')
              surface_dessin.grid(row=0, column=0)
              # La méthode bind() permet de lier un événement avec une fonction :
              # un clic gauche sur la surface provoquera l'appel de la fonction clic()
              surface_dessin.bind('<Button-1>', change_carte)
              
              # Bouton quitter
              tk.Button(mon_app, text = 'Quitter', command = mon_app.destroy).grid(row=1, column=0)
              
              # Placement de l'image initiale designee par "ma_carte" sur le canvas
              imgtk = tk.PhotoImage(file="carte1.png")
              ma_carte = surface_dessin.create_image((50, 10), image=imgtk, anchor="nw")
              
              mon_app.mainloop()

Tester avec repl.it

Affichage d'un fichier image sur un Canvas

L'affichage d'un fichier .png sur un Canvas se fait simplement à l'aide de ces deux lignes :


            imgtk = tk.PhotoImage(file="carte1.png")
            ma_carte = surface_dessin.create_image((50, 10), image=imgtk, anchor="nw")
          

La première ligne charge l'image en mémoire dans la variable imgtk, et la seconde se charge de son affichage sur la surface graphique aux coordonnées indiquées. Le paramètre anchor sert à indiquer que les coordonnées donées sont celles du coin supérieur gauche.

Dans le reste du programme, l'objet image sur la surface graphique sera accessible via la variable ma_carte.

Retournement de la carte

Pour retourner la carte, on doit reconfigurer l'objet ma_carte afin de modifier son attribut image sur l'autre face de l'image. Cela se fait gràce à la méthode itemconfigure() de la surface graphique :


                surface_dessin.itemconfigure(ma_carte, image=imgtk)
              

Le reste de la fonction change_carte() se charge d'alterner les images. On utilise pour cela une petite astuce utilisant l'opération modulo :


              no_image = no_image % 8 + 1 # echange du no de carte
            

Pour finir, on s'assure de ne retourner la carte que si le clic a été fait dans la zone de la carte. Comme on connaît les coordonnées du clic, un test d'intervalle pour les coordonnées se charge de cette vérification.