[Echecs] Séparation plateau/canvas et frontend/fenêtre

This commit is contained in:
Geoffrey Frogeye 2014-12-12 22:03:16 +01:00
parent abfd04e7fc
commit 83b956e632

View file

@ -1,4 +1,5 @@
from tkinter import *
from logique import LogiqueEchecs
class PlateauTk:
@ -9,10 +10,11 @@ class PlateauTk:
TEMPS_ANIM = 200
INTER_ANIM = 10
def __init__(self, logique):
def __init__(self, fen, can, statut, logique):
self.fen = None
self.can = None
self.can = can
self.fen = fen
self.statut = statut
self.chaine = None
self.grilleDamier = []
self.imagesOriginales = {}
@ -29,7 +31,8 @@ class PlateauTk:
self.mvtsPossibles = []
self.logique = logique
self.creerFen()
self.redimCan()
self.can.bind('<Button-1>', self.clic)
self.importerImages()
self.redimImages()
@ -37,26 +40,10 @@ class PlateauTk:
self.cGrille()
self.remplirGrille(self.logique.grille)
self.fen.mainloop()
self.statutPrendre()
def creerFen(self):
self.fen = Tk()
self.fen.title("Jeu d'Échecs")
self.can = Canvas(self.fen, width=PlateauTk.COTE_CASE * self.logique.CASES_COTE,
height=PlateauTk.COTE_CASE * self.logique.CASES_COTE, bg="ivory")
self.can.grid(row=0, column=1, columnspan=3)
self.can.bind('<Button-1>', self.clic)
self.chaine = Label(self.fen, text="Aux blancs")
self.chaine.grid(row=2, column=2, padx=3, pady=3)
# Button(self.fen, text="Nv. Partie", command=f_nvPartie).grid(row=2, \
# column=1, padx=3, pady=3)
Button(self.fen, text="Quitter", command=self.fen.destroy).grid(row=2,
column=3, padx=3, pady=3)
def statut(self, texte, delai=0):
self.chaine.config(text=texte)
# TODO Timeout effacer si parametre / Liste
def redimCan(self):
self.can.config(width=self.COTE_CASE * self.logique.CASES_COTE, height=self.COTE_CASE * self.logique.CASES_COTE)
def nomPiece(self, piece):
tPiece = self.logique.tPiece(piece)
@ -132,8 +119,7 @@ class PlateauTk:
def cPion(self, x, y, piece):
if piece > 0:
self.grillePions[x][y] = self.can.create_image((x + .5) * PlateauTk.COTE_CASE,
(y + .5) * PlateauTk.COTE_CASE, image=self.imagesRedim[piece])
self.grillePions[x][y] = self.can.create_image((x + .5) * PlateauTk.COTE_CASE, (y + .5) * PlateauTk.COTE_CASE, image=self.imagesRedim[piece])
else:
self.grillePions[x][y] = False
@ -152,9 +138,9 @@ class PlateauTk:
# Interaction
def nomJoueur(self, joueur, pluriel=True):
if joueur == self.logique.BLANCS:
if joueur == self.logique.BLANC:
nom = 'blanc'
elif joueur == self.logique.NOIRS:
elif joueur == self.logique.NOIR:
nom = 'noir'
else:
nom = 'inconnu'
@ -305,8 +291,40 @@ class PlateauTk:
self.animerC(self.dx2, self.dy2)
def clic(self, event):
x = event.x // PlateauTk.COTE_CASE
y = event.y // PlateauTk.COTE_CASE
x = event.x // self.COTE_CASE
y = event.y // self.COTE_CASE
self.dClic(x, y)
# TODO Un jeu (canvas) et un frontend (fenetre)
class fenetreTk:
PLACEHOLDER_DIMENSIONS = 300
def __init__(self):
self.fen = None
self.can = None
self.chaine = ''
self.plateau = None
self.creerFen()
self.fen.mainloop()
def creerFen(self):
self.fen = Tk()
self.fen.title("Jeu de plateau")
self.can = Canvas(self.fen, width=self.PLACEHOLDER_DIMENSIONS, height=self.PLACEHOLDER_DIMENSIONS, bg="ivory")
self.can.grid(row=0, column=1, columnspan=3)
self.chaine = Label(self.fen, text="Bienvenue !")
self.chaine.grid(row=2, column=2, padx=3, pady=3)
Button(self.fen, text="Nv. Partie", command=self.nvPartie).grid(row=2, column=1, padx=3, pady=3)
Button(self.fen, text="Quitter", command=self.fen.destroy).grid(row=2, column=3, padx=3, pady=3)
def statut(self, texte, delai=0):
self.chaine.config(text=texte)
# TODO Timeout effacer si parametre / Liste
def nvPartie(self):
self.plateau = PlateauTk(self.fen, self.can, self.statut, LogiqueEchecs())