# ----------------- Modules nécessaire --------------------------------------------------------------------------------------------- from Tkinter import * from random import * # ----------------- Variables Globales --------------------------------------------------------------------------------------------- nombreCases=6 #nombre de cases par ligne x0,y0=10,10 #coordonnées du début de la grille c=80 #longueur et largeur d'une case matriceLettres=[["" for x in range (nombreCases)]for x in range (nombreCases)] #matrice vide destinée à accueillir les lettres decouvert=[[False for x in range (nombreCases)]for x in range (nombreCases)] #matrice destinée à afficher les lettres trouvées carte=0 #Nombre de cartes tirées. Si 0 je tire la première, si 1 je tire la deuxième lettre1="" #Va prendre la valeur de la première lettre pour la comparer à la deuxième #------------------Fonctions ------------------------------------------------------------------------------------------------------- #------------------Question 1: Cette fonction remplit aléatoirement la matrice matriceLettres avec les lettres disponible----------- def remplissage_matrice(): global matriceLettres global nombreCases lettres=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"] dicoLettres={"A":2,"B":2,"C":2,"D":2,"E":2,"F":2,"G":2,"H":2,"I":2,"J":2,"K":2,"L":2,"M":2,"N":2,"O":2,"P":2,"Q":2,"R":2} for ligne in range (nombreCases): for colonne in range (nombreCases): matriceLettres[ligne][colonne]=choice(dicoLettres.keys()) #Pour chaque case je choisit une lettre au hasard dicoLettres[matriceLettres[ligne][colonne]]-=1 #Je supprime une fois cette lettre du dictionnaire if dicoLettres[matriceLettres[ligne][colonne]]==0: #Si la lettre a été utilisée deux fois, je la supprime del dicoLettres[matriceLettres[ligne][colonne]] return matriceLettres #-------------------Question 2: On repère la fin de la partie---------------------------------------------------------------------- def fini(): for ligne in range (nombreCases): for colonne in range (nombreCases): if decouvert[ligne][colonne]==False: #S'il reste une case False, la partie n'est pas finie return False return True #-------------------Question 4: On affiche les lettres trouvées (ayant la valeur True)--------------------------------------------- def dessin_grille(): for ligne in range (nombreCases): for colonne in range (nombreCases): if decouvert[ligne][colonne]==True: # Pour chaque case découvert, j'affiche la lettre dans le canvas canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne]) #-------------------Question 5: On crée la grille et on associe une lettre par case. (Bouton Recommencer)-------------------------- def init(): global lettre1 lettre1="" #On commencera forcément par tirer la première carte canvas.delete(ALL) #J'efface tout ce qui était affiché dans le canvas termine.config(text="Bonne Partie") #J'affiche le texte bonne partir for ligne in range (nombreCases): for colonne in range (nombreCases): #J'indique qu'aucune case n'est trouvée decouvert[ligne][colonne]=False for i in range(nombreCases+1): #Je crée les lignes canvas.create_line(x0+c*i, y0,x0+c*i,y0 + nombreCases*c) canvas.create_line(x0, y0+c*i,x0+nombreCases*c ,y0+c*i) remplissage_matrice() #J'utilise cette fonction pour associer à chaque case une lettre #-------------------Question 5: On retourne une carte, une autre et on les compare------------------------------------------------ def action(ligne,colonne): global carte global lettre1 if decouvert[ligne][colonne]==False: #Si je clique sur une carte non affichée if carte==0: # Premier cas, je tire la première carte carte=1 #Au prochain coup je tirerais la deuxième #Je veux effacer les deux cartes précédentes si elles sont différentes, la méthode est certainement perfectible canvas.delete(ALL) #Je commence par tous supprimer for i in range(nombreCases+1): #Je retrace les lignes canvas.create_line(x0+c*i, y0,x0+c*i,y0 + nombreCases*c) canvas.create_line(x0, y0+c*i,x0+nombreCases*c ,y0+c*i) dessin_grille() #J'affiche les lettres qui étaient déja trouvée (valeur True) decouvert[ligne][colonne]=True #J'affiche la première lettre dessin_grille() lettre1=matriceLettres[ligne][colonne] #Je la mémorise else: # Deuxième cas, je tire la deuxième carte carte=0 #Au prochain coup je tirerais la première et recommencerais un tour canvas.create_text (y0 +c*(ligne+.5),x0+c*(colonne+.5),text=matriceLettres[ligne][colonne]) #J'affiche la deuxième lettre lettre2=matriceLettres[ligne][colonne] #Je la mémorise if lettre1!=lettre2: for lig in range (nombreCases): for col in range (nombreCases): #Je recherce donc quelle case avait la lettre1 if matriceLettres[lig][col]==lettre1: decouvert[lig][col]=False #Et je la laisse découvert else: #Si les deux lettres sont identiques: decouvert[ligne][colonne]=True #La deuxième carte doit donc rester découverte (True) if fini(): #Je regarde si la partie est terminée termine.config(text="La partie est finie") #Si oui je change le texte #-------------------Question 5: On remmene le clic a une case --------------------------------------------------------------------- def correspond(x,y): return (x-x0)/c,(y-y0)/c #-------------------Question 5: On repère la case du clic et on appelle action(ligne,colonne)-------------------------------------- def retourner(event): pos=correspond(event.x,event.y) ligne=pos[0] colonne=pos[1] if ligne in range(nombreCases) and colonne in range (nombreCases): action(ligne,colonne) #-------------------Fonction quitter ---------------------------------------------------------------------------------------------- def quitter(): memory.quit() memory.destroy() #-------------------Fenetre Tkinter ----------------------------------------------------------------------------------------------- memory=Tk() #-------------------Création des widgets------------------------------------------------------------------------------------------- titre=Label(memory, text="Jeu du memory") #le titre termine=Label(memory, text="Bonne Partie") #l'encouragement qui se transforme en félicitation canvas=Canvas(memory, width=500, height=500) #le canvas boutonQuitter=Button(memory, text="Quitter", command=quitter) #le bouton quitter boutonRecommencer=Button(memory, text="Recommencer une partie", command=init) #le bouton recommencer #-------------------Placement des widgets------------------------------------------------------------------------------------------ titre.grid(row=0, column=0) canvas.grid(row=1, column=0) boutonQuitter.grid(row=2, column=0) boutonRecommencer.grid(row=1, column=1) termine.grid(row=2, column=1) canvas.bind("",retourner) memory.mainloop() #Je ferme le tout