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
| from tkinter import *
from random import randint
# ----- variables globales ---------------------------------------------------
images = [] # liste qui contient les images
cartes = [] # liste des différentes cartes
cartes_jouees = [] # liste qui contient les cartes jouées
nb_lignes, nb_colonnes = 5, 4
cartes_gagnees, nb_cartes_jouees = 0, 0
joueur_actuel = 1
nb_joueurs = 2
score = [0,0]
# ----- Création du canvas --------------------------------------------------------
def creer_canevas(fen, col, lig):
return Canvas(fen, width=(110*col)+10, height=(110*lig)+10, bg='green')
# ----- Images ----------------------------------------------------------------
def charger_images():
nb_images = 21 # l'image no 0 est le dos des cartes
for i in range(nb_images): # importation des images
nom = 'im' + str(i) + '.gif'
monimage = PhotoImage(file = nom)
images.append(monimage)
return images
# ----- Melange des cartes -----------------------------------------------------
def melange_les_cartes() :
nb_cartes = nb_colonnes*nb_lignes #le nombre de carte est égal au nombre de carte en abscisse multiplié par le nombre de carte en ordonnée
maliste = list(range(1,nb_cartes//2+1))*2 #on définit les cartes
for i in range(nb_cartes): #pour i allant de 0 à nombre de cartes
x = randint(0,nb_cartes-1) #on choisit aléatoirement une carte se trouvant sur l'axe x sur l'intervalle i à nombre de carte
y = randint(0,nb_cartes-1) #on choisit aléatoirement une carte se trouvant sur l'axe y sur l'intervalle i à nombre de carte
maliste[x],maliste[y]=maliste[y],maliste[x] #inverse la place des cartes en abscisses et celles en ordonnée
return maliste
def initialise(nb_colonnes,nb_lignes,images):
for i in range(nb_colonnes):
for j in range(nb_lignes):
canvas.create_image((110*i)+60, (110*j)+60, image = images[0])
def coordonnees(pos):
x=int((pos-1)%4*110)+60
y=int((pos-1)//4*110)+60
return (x,y)
#
def position(x,y):
return x//110+1+4*(y//110)
def Clic(event):
global compteur,listpos
compteur=compteur+1
X=event.x
Y=event.y
#d'apres les coordonnees on repere le numero de l'image a afficher
numero=position(X,Y)
#d'apres le numero on repere les coordonnes du coin sup gauche pour afficher l'image a cette place
(afx,afy)=coordonnees(numero)
#on affiche l'image de numero correspondant a la liste aleatoire cartealea
if compteur<3:
listpos.append(numero)
canvas.create_image(afx,afy, image = images[cartealea[numero-1]])
else:
if cartealea[listpos[0]-1]==cartealea[listpos[1]-1]:
print('gagné')
else:
(afx,afy)=coordonnees(listpos[0])
canvas.create_image(afx,afy, image = images[0])
(afx,afy)=coordonnees(listpos[1])
canvas.create_image(afx,afy, image = images[0])
compteur=0
listpos=[]
# ----- Programme principal ----------------------------------------------------
fenetre = Tk()
Largeur = 450
Hauteur = 550
compteur=0
listpos=[]
#la liste images contient les 21 images (dos + 2 fois 10 images)
images=charger_images()
canvas = Canvas(fenetre,width = Largeur, height =Hauteur)
#cree une liste aléatoire de 20 nombres entre 1 et 10 apparaissant deux fois
cartealea=melange_les_cartes()
#affiche le dos des cartes
initialise(nb_colonnes,nb_lignes,images)
#lorsque l'utilisateur clique on appelle la fonction Clic, il va falloir changer cette fonction Clic, pour que lorsque l'utilisateur clique deux fois le programme
#soit laisse les images dans le cas ou ce sont les mêmes, soit affiche le "dos"
canvas.bind('<Button-1>',Clic)
canvas.pack()
fenetre.mainloop() |
Partager