############################################################################ # DM Jeu de mémoire # ############################################################################ from tkinter import * import random from tkinter import messagebox fen=Tk() fen.title("jeu de mémoire") fen.geometry("800x800") ecriture=("comic",12,"bold") cadre=Frame (fen) cadre.pack() cadre2=Frame (fen) cadre2.pack() #variables gobales nb= 8 # nombre de cases par ligne (grille carree) c= 50 # dimension d'une case supposée carrée x0,y0=20,20 #coordonnées du point en haut à gauche current_color = 0 # index du tuple actuel varChoix=StringVar() colors = [("lavender blush", "lavender")] ### DEFINITION DES FONCTIONS ### def quitter(): fen.quit() fen.destroy() def NewPart(): global current_color np.config(state=DISABLED) # désactiver le bouton "Nouvelle partie" for i in range(nb): for j in range(nb): can.create_rectangle(x0+c*j,y0+c*i,x0+c*(j+1),y0+c*(i+1),fill="lavender blush",width=4,outline="lavender") fen.after(1000, computer_play) # appel de la fonction computer_play() après 1 seconde def RDJ(): # Création de la fenêtre pop-up popup = Toplevel() popup.title("Règles du jeu") popup.geometry("800x200") # Création de l'étiquette avec le texte à afficher label = Label(popup, text="\n\n Mémorisez les cases noires aparraisant sur la grille. Retrouvez les toutes sans vous tromper en cliquant dessus.\n Si vous retrouver toutes les cases, alors votre score augmentera de 1.\n Continuez à jouer jusqu'à ce que vous commettiez une erreur.\n Si vous faites une erreur, le jeu sera terminé.\n Pour jouer à nouveau, appuyez sur le bouton 'Nouvelle partie''.", justify="left") label.pack(pady=10) # Bouton pour fermer la fenêtre pop-up close_button = Button(popup, text="Retour", command=popup.destroy) close_button.pack(pady=10) def computer_play(): global current_color fill_color, outline_color = colors[current_color] current_color = (current_color + 1) % len(colors) message['text']=" Le PC joue..." positions = random.sample(range(nb*nb), nb) # choix aléatoire de nb positions dans la grille for p in positions: i = p // nb j = p % nb can.create_rectangle(x0+c*j, y0+c*i, x0+c*(j+1), y0+c*(i+1), fill="black", width=4, outline="white") if varChoix.get()=="Norm": fen.after(5000, clear_board) elif varChoix.get()=="Rap": fen.after(3000, clear_board) else : fen.after(7000, clear_board) def clear_board(): global current_color message['text']="" items = can.find_all() # récupérer tous les éléments de la grille for item in items: fill_color, outline_color = colors[current_color-1] if can.itemcget(item, "fill") == "black": can.itemconfigure(item, fill=fill_color, outline=outline_color, state='hidden') else: can.itemconfigure(item, fill="lavender blush", outline="lavender", state='normal') current_color = (current_color + 1) % len(colors) def click_handler(event): global current_color message['text']="A votre tour..." fill_color, outline_color = colors[current_color] item = can.find_closest(event.x, event.y)[0] if "revealed" not in can.gettags(item): can.itemconfigure(item, fill=fill_color, outline=outline_color) can.addtag_withtag("revealed", item) black_items = can.find_withtag("black") if len(black_items) == 0 and len(can.find_withtag("black")) == len(black_items): messagebox.showinfo("Gagné", "Bravo, vous avez gagné !") else: # Création de la fenêtre pop-up2 popup2 = Toplevel() popup2.title("Perdu !") popup2.geometry("400x100") # Création de l'étiquette avec le texte à afficher label = Label(popup2, text=f"Dommage, c'est perdu !", justify="left") label.pack(pady=10) ### FIN DEFINITION DES FONCTIONS ### ### DEFINITION DES WIDGETS ET AFFICHAGE ### ## Création de la 2eme frame ## # Création du canvas can = Canvas(fen, width=600, height=600) can.bind("", click_handler) can.pack(side=RIGHT) # Quitter q=Button(cadre2,text="Quitter",command=quitter,font=ecriture) q.pack(side=BOTTOM) # Règles du jeu rdj=Button(cadre2,text="Règles",command=RDJ,font=ecriture) rdj.pack(side=BOTTOM) # Nouvelle partie np=Button(cadre2,text="Nouvelle partie",command=NewPart,font=ecriture) np.pack(side=BOTTOM) # Boutons de difficulté boutFacile = Radiobutton(cadre,text = "Facile",variable =varChoix,value = "fac") boutFacile.pack(side=LEFT) boutFacile.select() # Bouton choisi par défault boutNormal = Radiobutton(cadre,text = "Normal",variable =varChoix,value = "Norm") boutNormal.pack(side=LEFT) boutDiff = Radiobutton(cadre,text = "Difficile",variable =varChoix,value = "Rap") boutDiff.pack(side=LEFT) # Message jeu message = Label(fen,text="Veuillez choisir un niveau.") message.pack(side = TOP) ### FIN DEFINITION DES WIDGETS ET AFFICHAGE ### fen.mainloop()