[Echecs] Réalisation de certaines choses notées en TODO

This commit is contained in:
Geoffrey Frogeye 2014-12-14 18:24:40 +01:00
parent ab48ed3e69
commit e258823cd5
2 changed files with 45 additions and 60 deletions

View file

@ -1,7 +1,6 @@
from tkinter import * from tkinter import *
from logique import LogiqueEchecs from logique import LogiqueEchecs
class PlateauTk: class PlateauTk:
""" """
@ -9,7 +8,7 @@ class PlateauTk:
""" """
RATIO_PCE_CASE = .95 # Place que prend la pièce sur la case RATIO_PCE_CASE = .95 # Place que prend la pièce sur la case
TEMPS_ANIM = 200 # Temps en ms d'une animation TEMPS_ANIM = 300 # Temps en ms d'une animation
INTER_ANIM = 10 # Temps en ms entre deux actualisations d'animation INTER_ANIM = 10 # Temps en ms entre deux actualisations d'animation
COTE_TOUT_DEFAUT = 500 # Coté par défaut du plateau COTE_TOUT_DEFAUT = 500 # Coté par défaut du plateau
@ -57,6 +56,7 @@ class PlateauTk:
""" """
Redimensionne le plateau de jeu Redimensionne le plateau de jeu
""" """
self.animations = []
self.can.delete(ALL) self.can.delete(ALL)
self.coteCase = cote // self.logique.CASES_COTE self.coteCase = cote // self.logique.CASES_COTE
cote = self.logique.CASES_COTE * self.coteCase cote = self.logique.CASES_COTE * self.coteCase
@ -68,33 +68,27 @@ class PlateauTk:
self.cGrille() self.cGrille()
self.remplirGrille() self.remplirGrille()
def nomPiece(self, tPiece): def importerImage(self, piece):
"""
Renvoi le nom de fichier de la pièce donnée
"""
if tPiece == self.logique.PCE_PION:
nom = 'pion'
elif tPiece == self.logique.PCE_TOUR:
nom = 'tour'
elif tPiece == self.logique.PCE_CAVALIER:
nom = 'cavalier'
elif tPiece == self.logique.PCE_FOU:
nom = 'fou'
elif tPiece == self.logique.PCE_DAME:
nom = 'dame'
elif tPiece == self.logique.PCE_ROI:
nom = 'roi'
else:
return False
return nom
# TODO piece stocke déjà la couleur
def importerImage(self, piece, couleur):
""" """
Importe l'image de la pièce donnée Importe l'image de la pièce donnée
""" """
nom = 'sprites/' + \ nom = 'sprites/'
self.nomPiece(self.logique.tPiece(piece)) + couleur + '.gif' tPiece = self.logique.tPiece(piece)
if tPiece == self.logique.PCE_PION:
nom += 'pion'
elif tPiece == self.logique.PCE_TOUR:
nom += 'tour'
elif tPiece == self.logique.PCE_CAVALIER:
nom += 'cavalier'
elif tPiece == self.logique.PCE_FOU:
nom += 'fou'
elif tPiece == self.logique.PCE_DAME:
nom += 'dame'
elif tPiece == self.logique.PCE_ROI:
nom += 'roi'
else:
return False
nom += 'B' if self.logique.ePieceBlanche(piece) else 'N' + '.gif'
self.imagesOriginales.update({piece: PhotoImage(file=nom)}) self.imagesOriginales.update({piece: PhotoImage(file=nom)})
def importerImages(self): def importerImages(self):
@ -102,9 +96,9 @@ class PlateauTk:
Importe les images des pièces du jeu Importe les images des pièces du jeu
""" """
for piece in self.logique.BLANCS: for piece in self.logique.BLANCS:
self.importerImage(piece, 'B') self.importerImage(piece)
for piece in self.logique.NOIRS: for piece in self.logique.NOIRS:
self.importerImage(piece, 'N') self.importerImage(piece)
def redimImage(self, piece, sample): def redimImage(self, piece, sample):
""" """
@ -117,8 +111,7 @@ class PlateauTk:
""" """
Redimensionne l'image des pièces du jeu Redimensionne l'image des pièces du jeu
""" """
sample = int(504 // (self.coteCase * self.RATIO_PCE_CASE) sample = int(504 // (self.coteCase * self.RATIO_PCE_CASE))
) # TODO S'en sort pour être toujours plus grand
for piece in self.logique.BLANCS: for piece in self.logique.BLANCS:
self.redimImage(piece, sample) self.redimImage(piece, sample)
for piece in self.logique.NOIRS: for piece in self.logique.NOIRS:
@ -166,12 +159,8 @@ class PlateauTk:
""" """
Génère le damier Génère le damier
""" """
self.grilleDamier = [] self.grilleDamier = [[self.cCase(x, y) for y in range(self.logique.CASES_COTE)] \
for x in range(0, self.logique.CASES_COTE): # TODO Peut être amélioré for x in range(self.logique.CASES_COTE)]
colonne = []
for y in range(0, self.logique.CASES_COTE):
colonne.append(self.cCase(x, y))
self.grilleDamier.append(colonne)
self.coulDamier() self.coulDamier()
def cPiece(self, x, y, piece): def cPiece(self, x, y, piece):
@ -179,8 +168,8 @@ class PlateauTk:
Crée la pièce aux coordonnées données Crée la pièce aux coordonnées données
""" """
if self.logique.ePiece(piece): if self.logique.ePiece(piece):
self.grillePieces[x][y] = self.can.create_image((x + .5) * self.coteCase, self.grillePieces[x][y] = self.can.create_image((x + .5) * self.coteCase, \
(y + .5) * self.coteCase, image=self.imagesRedim[piece]) (y + .5) * self.coteCase, image=self.imagesRedim[piece])
else: else:
self.grillePieces[x][y] = False self.grillePieces[x][y] = False
@ -188,12 +177,8 @@ class PlateauTk:
""" """
Crée le tableau contenant les images de pièces Crée le tableau contenant les images de pièces
""" """
self.grillePieces = [] self.grillePieces = [[False for y in range(self.logique.CASES_COTE)] \
for x in range(0, self.logique.CASES_COTE): # Crée self.grillePieces for x in range(self.logique.CASES_COTE)]
colonne = []
for y in range(0, self.logique.CASES_COTE):
colonne.append(False)
self.grillePieces.append(colonne)
def remplirGrille(self): def remplirGrille(self):
""" """
@ -230,9 +215,10 @@ class PlateauTk:
""" """
Retourne les coordonnées auxquelles doit se placer une pièce en cours d'animation Retourne les coordonnées auxquelles doit se placer une pièce en cours d'animation
""" """
# TODO Faire autre chose qu'une animation linéaire constante # x = i['x1'] + (i['x2'] - i['x1']) * (i['avancement'] / i['total'])
x = i['x1'] + (i['x2'] - i['x1']) * (i['avancement'] / i['total']) # x = i['x1'] + (i['x2'] - i['x1']) * (i['avancement'] / i['total'])
y = i['y1'] + (i['y2'] - i['y1']) * (i['avancement'] / i['total']) y = i['y1'] + (i['y2'] - i['y1']) * (-(i['avancement'] / i['total']-1)**2+1)
x = i['x1'] + (i['x2'] - i['x1']) * (-(i['avancement'] / i['total']-1)**2+1)
return [x, y] return [x, y]
def animation(self): def animation(self):
@ -283,13 +269,15 @@ class PlateauTk:
# Si une animation pour cette pièce existe déjà, on la # Si une animation pour cette pièce existe déjà, on la
# reprend et on la modifie # reprend et on la modifie
coords = self.animationDCoords(i) coords = self.animationDCoords(i)
i['x1'] = coords[0] # TODO Simplifier avec update() i.update({
i['y1'] = coords[1] 'x1': coords[0],
i['x2'] = x2 'y1': coords[1],
i['y2'] = y2 'x2': x2,
# i['total'] = i['total'] - i['avancement'] 'y2': y2,
i['total'] = self.TEMPS_ANIM # 'total': i['total'] - i['avancement'],
i['avancement'] = 0 'total': self.TEMPS_ANIM,
'avancement': 0
})
return return
animation = { animation = {

View file

@ -41,11 +41,8 @@ class Logique:
""" """
Crée le tableau self.grille. Crée le tableau self.grille.
""" """
for x in range(self.CASES_COTE): # TODO Peut être amélioré self.grille = [[self.PCE_VIDE for y in range(self.CASES_COTE)] \
colonne = [] for x in range(self.CASES_COTE)]
for y in range(self.CASES_COTE):
colonne.append(self.PCE_VIDE)
self.grille.append(colonne)
def ePieceBlanc(self, piece): def ePieceBlanc(self, piece):
""" """
@ -229,7 +226,7 @@ class LogiqueEchecs(Logique):
else: else:
return self.MVT_N_AUTORISE return self.MVT_N_AUTORISE
# TODO Utiliser la gestion d'erreurs ? # TODO Utiliser la gestion d'erreurs de Python ?
def deplPossible(self, x1, y1, x2, y2): def deplPossible(self, x1, y1, x2, y2):
""" """
Vérifie si le déplacement est possible. Vérifie si le déplacement est possible.