Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
3207 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Python tkinter taquin

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Python tkinter taquin

n°2279427
cilouc
Posté le 13-04-2016 à 20:49:39  profilanswer
 

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.

mood
Publicité
Posté le 13-04-2016 à 20:49:39  profilanswer
 

n°2279433
rat de com​bat
attention rongeur méchant!
Posté le 13-04-2016 à 22:00:38  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Python tkinter taquin

 

Sujets relatifs
AIDE programme python DEBUTANTThread et tkinter
Client/Serveur PythonTraduction d'un programme C en python
[python] conseil pour la création d'un serveur de jeuxpistes pour traduction code écrit en C en python
Aide sur un code Python[Python] Problème de frame
Sudoku Solver -- PythonTraiter un tableau en .txt sur python
Plus de sujets relatifs à : Python tkinter taquin


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR