Python tkinter taquin

Python tkinter taquin - Python - Programmation

Marsh Posté le 13-04-2016 à 20:49:39    

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 :roll:
 
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 -*-
 
"""
:mod: module
 
:author: FIL - IEEA - Univ. Lille1.fr <http://portail.fil.univ-lille1.fr>_
:completed by:
 
:date: 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
 
    :Exemples:
    >>> 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.

Reply

Marsh Posté le 13-04-2016 à 20:49:39   

Reply

Marsh Posté le 13-04-2016 à 22:00:38    

Et la question est... ? On ne fera pas ton travail à ta place. Perso je ne "parle" pas Python mais le code n'a pas l'air très compliqué, avec la doc tkinter et/ou un bon tuto on doit pouvoir s'en sortir. https://wiki.python.org/moin/TkInter

 

Tu peux modifier ton message pour rajouter des balises autour du code.


Message édité par rat de combat le 13-04-2016 à 22:01:28
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed