Bonjour, je suis actuellement en première année de licence, et j'ai un projet de fin d'année à réaliser en informatique : le jeu taquin
Mon jeu fonctionne correctement en version "texte" mais je dois maintenant m'attaquer à la phase graphique, pourtant pas compliqué puisse tout est quasiment donnée dans le sujet
Sauf que je n'ai jamais fait de graphisme avec tkinter et je suis perdue
Je vous donne donc le code que le prof nous a donné ainsi que le sujet (les trucs a modifier dans le code)
Je suis preneuse de toute aide !
Merci d'avance
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
module
FIL - IEEA - Univ. Lille1.fr <http://portail.fil.univ-lille1.fr>_
:completed by:
2015, december
Interface graphique pour jouer eu taquin
"""
from tkinter import *
import tkinter.filedialog as tkfdial
from taquin import *
# nbre de lignes et de pièces par lignes du taquin
DIM_TAQUIN = 4
# dimension en pixels de la taille de l'image du taquin
TAILLE_TAQUIN = 600
# taille d'une pièce carrée du taquin (en pixels)
TAILLE_PIECE = TAILLE_TAQUIN // DIM_TAQUIN
GEOMETRIE = '{:d}x{:d}'.format (30 + 2 * DIM_TAQUIN * TAILLE_PIECE,
52 + DIM_TAQUIN * TAILLE_PIECE)
image = None
image_decoupee = [None for k in range(DIM_TAQUIN * DIM_TAQUIN)]
taquin = None
fenetre = None
case_vide = None
puzzle = None
modele = None
def cases_voisines (c1, c2):
"""
renvoie
- True si les cases c1 et c2 sont voisines
- False sinon
: CU: aucune
>>> cases_voisines ((1,2), (1,3))
True
>>> cases_voisines ((1,2), (1,1))
True
>>> cases_voisines ((1,2), (0,2))
True
>>> cases_voisines ((1,2), (2,2))
True
>>> cases_voisines ((1,2), (2,1))
False
"""
if c1[0]==c2[0]:
if c1[1]+1==c2[1]:
return True
elif c1[1]-1==c2[1]:
return True
else:
return False
if c1[1]==c2[1]:
if c1[0]+1==c2[0]:
return True
elif c1[0]-1==c2[0]:
return True
else:
return False
else:
return False
def afficher_pieces ():
"""
affiche les pièces du puzzle.
"""
for l in range (DIM_TAQUIN):
for c in range (DIM_TAQUIN):
num_piece = numero_piece (taquin, c, l)
#a modifier
piece = image_decoupee [num_piece - 1]
puzzle.create_image (c * (TAILLE_PIECE + 1),
l * (TAILLE_PIECE + 1),
anchor = NW,
image = piece)
def melanger ():
"""
mélange les pièces du taquin
"""
if image != None:
pass
def sous_image (src,xA,yA,xB,yB):
"""
renvoie un morceau rectangulaire de l'image ``src``
depuis le point supérieur gauche de coordonnées (xA,yA)
au point inférieur droit de coordonnées (xB,yB).
"""
pce = PhotoImage ()
pce.tk.call (pce, 'copy', src,
'-from', xA, yA, xB, yB, '-to', 0, 0)
return pce
def choix_image ():
"""
permet de choisir via une boîte de dialogues un fichier contenant une image.
Ce fichier doit être au format PNG ou GIF, et l'image qu'il contient doit
être au moins de taille 600x600.
L'image choisie est découpée en morceaux.
Les morceaux sont affichée à gauche, et l'image originale à droite.
"""
global image, taquin
taquin = cree_taquin (DIM_TAQUIN)
imagename = tkfdial.askopenfilename (title = 'Choisir une image',
filetypes = [('PNG','.png'),('GIF','.gif')])
image = PhotoImage (file = imagename)
for k in range (len(image_decoupee)):
l = k // DIM_TAQUIN
c = k % DIM_TAQUIN
image_decoupee[k] = sous_image (image, c * TAILLE_PIECE, l * TAILLE_PIECE,
(c+1) * TAILLE_PIECE, (l+1) * TAILLE_PIECE)
afficher_pieces ()
modele.create_image (0,0,anchor = NW, image = image)
def bouger_piece (event):
"""
bouge la pièce désignée par le clic de souris (event),
uniquement si cette pièce est voisine de la case vide.
"""
c = event.x // (TAILLE_PIECE + 1)
l = event.y // (TAILLE_PIECE + 1)
# A COMPLETER
afficher_pieces ()
def main ():
global fenetre, case_vide, puzzle, modele
# La fenêtre principale
fenetre = Tk ()
fenetre.title ('Jeu du taquin')
fenetre.geometry (GEOMETRIE)
fenetre.resizable (width=False, height= False)
# L'image représentant la case vide
case_vide = sous_image(PhotoImage(file='images/case_vide_bleue.gif'),
0, 0,
TAILLE_PIECE-1, TAILLE_PIECE-1)
# La zone gauche contenant le puzzle
puzzle = Canvas (fenetre, width = TAILLE_PIECE * DIM_TAQUIN + DIM_TAQUIN - 1,
height = TAILLE_PIECE * DIM_TAQUIN + DIM_TAQUIN - 1,
background = 'blue')
puzzle.bind ('<Button-1>',bouger_piece)
puzzle.grid (row=0, column=0, rowspan = DIM_TAQUIN, columnspan = DIM_TAQUIN,
padx = 6, pady = 8)
# La zone droite contenant l'image modèle à reconstituer
modele = Canvas (fenetre, width = TAILLE_PIECE * DIM_TAQUIN,
height = TAILLE_PIECE * DIM_TAQUIN,
background = 'black')
modele.grid (row=0, column=DIM_TAQUIN, rowspan = DIM_TAQUIN,
columnspan = DIM_TAQUIN, padx=6, pady=8)
# La zone du bas contenant les boutons
Bouton_choix = Button (fenetre, text ='Choix image',
command = choix_image)
Bouton_choix.grid (row = DIM_TAQUIN, column = 1, padx = 5, sticky = N)
Bouton_melanger = Button (fenetre, text ='Mélanger',
command = melanger)
Bouton_melanger.grid(row = DIM_TAQUIN, column = 2)
Bouton_quitter = Button (fenetre, text ='Quitter',
command = fenetre.destroy)
Bouton_quitter.grid(row = DIM_TAQUIN, column = 3)
fenetre.mainloop ()
Et voila le travail a réalisé :
Le fichier taquin_gr.py doit être complété par vos soins en
modifiant un peu la fonction afficher_pieces de sorte que la case vide soit représentée par un carré bleu (variable ̀̀case_vide``) ;
complétant la fonction melanger (remplacer le pass par ce qu’il faut) ;
compléter la fonction cases_voisines pour qu’elle satisfasse sa spécification ;
compléter la fonction bouger_piece.
Vous pourrez ensuite revenir sur les possibilités
d’abandonner
de compter le nombre de coups joués.