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
| from tkinter import *
from random import *
#Création des variables liées aux images et au quadrillage
tailleimage=120
ecart=10
cote=tailleimage+ecart
nblignes=4
nbcolonnes=5
nbimages=nblignes*nbcolonnes//2
largeur=cote*nbcolonnes
longueur=cote*nblignes
x0=y0=cote//2
cartes=['chat_casquette','chat_débile','chat_élastique','chat_étonné','chat_festif','chat_lgbt','chat_lunettes','chat_postit','chat_riche','chat_vampire']
#Création du plateau
def creer_plateau():
L=[v % nbimages for v in range(2*nbimages)] #Génération d'une liste d'entiers aléatoires dans une liste provisoire "L".
shuffle(L) #Mélange de la liste avec la fonction shuffle
board=[]
k=0
for line in range(nblignes): #Placement ligne par ligne et colonne par colonne de la liste L mélangée dans le tableau board
row=[]
for col in range(nbcolonnes):
row.append(L[k])
k+=1
board.append(row)
return board
#Placement des images
def placement(zg,board,couverture,cartes,ids_couverture):
for ligne in range (nblignes): #On parcourt la future grille par indice de ligne et de colonne et, en même temps, on accède à la même position dans board
for colonne in range (nbcolonnes): #Puis, on demande au canevas de dessiner d’abord la carte puis de le recouvrir avec l’image de couverture
centre=(x0+colonne*cote,y0+ligne*cote) #Pour dessiner la carte, il suffit de récupérer l’équivalent entier de cette carte dans board (ligne 60), puis d’accéder à la version PhotoImage correspondante (ligne 61)
num_image=board[ligne][colonne]
mon_image=cartes[num_image]
zg.create_image(centre, image=mon_image)
id_couverture=zg.create_image(centre,image=couverture) #On récupère l’id de chacune des 20 images de couverture utilisées
ids_couverture[ligne][colonne]=id_couverture
#Identification de la carte avec un clic
def clic(event):
x=event.x
y=event.y
colonne=x//cote
ligne=y//cote
zg.delete(ids_couverture[ligne][colonne])
i=board[ligne][colonne]
print(cartes[i].upper())
#Création de la fenêtre
fenetre1=Tk()
fenetre1.title('Mémory')
zg=Canvas(fenetre1, width=largeur, height=longueur,bg='white')
zg.pack()
zg.bind("<Button>", clic)
#Chargement des images
couverture=PhotoImage(file="dos.gif")
images=[PhotoImage(file="%s.gif" %nomfichier) for nomfichier in cartes] #Création d'une liste qui convertit chaque image gif dans un format utilisable par Tkinter
ids_couverture=[[None for j in range (nbcolonnes)] for i in range (nblignes)]
board=creer_plateau()
placement(zg,board,couverture,cartes,ids_couverture)
fenetre1.mainloop() |
Partager