[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 logique import LogiqueEchecs
class PlateauTk:
"""
@ -9,7 +8,7 @@ class PlateauTk:
"""
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
COTE_TOUT_DEFAUT = 500 # Coté par défaut du plateau
@ -57,6 +56,7 @@ class PlateauTk:
"""
Redimensionne le plateau de jeu
"""
self.animations = []
self.can.delete(ALL)
self.coteCase = cote // self.logique.CASES_COTE
cote = self.logique.CASES_COTE * self.coteCase
@ -68,33 +68,27 @@ class PlateauTk:
self.cGrille()
self.remplirGrille()
def nomPiece(self, tPiece):
"""
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):
def importerImage(self, piece):
"""
Importe l'image de la pièce donnée
"""
nom = 'sprites/' + \
self.nomPiece(self.logique.tPiece(piece)) + couleur + '.gif'
nom = 'sprites/'
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)})
def importerImages(self):
@ -102,9 +96,9 @@ class PlateauTk:
Importe les images des pièces du jeu
"""
for piece in self.logique.BLANCS:
self.importerImage(piece, 'B')
self.importerImage(piece)
for piece in self.logique.NOIRS:
self.importerImage(piece, 'N')
self.importerImage(piece)
def redimImage(self, piece, sample):
"""
@ -117,8 +111,7 @@ class PlateauTk:
"""
Redimensionne l'image des pièces du jeu
"""
sample = int(504 // (self.coteCase * self.RATIO_PCE_CASE)
) # TODO S'en sort pour être toujours plus grand
sample = int(504 // (self.coteCase * self.RATIO_PCE_CASE))
for piece in self.logique.BLANCS:
self.redimImage(piece, sample)
for piece in self.logique.NOIRS:
@ -166,12 +159,8 @@ class PlateauTk:
"""
Génère le damier
"""
self.grilleDamier = []
for x in range(0, self.logique.CASES_COTE): # TODO Peut être amélioré
colonne = []
for y in range(0, self.logique.CASES_COTE):
colonne.append(self.cCase(x, y))
self.grilleDamier.append(colonne)
self.grilleDamier = [[self.cCase(x, y) for y in range(self.logique.CASES_COTE)] \
for x in range(self.logique.CASES_COTE)]
self.coulDamier()
def cPiece(self, x, y, piece):
@ -179,8 +168,8 @@ class PlateauTk:
Crée la pièce aux coordonnées données
"""
if self.logique.ePiece(piece):
self.grillePieces[x][y] = self.can.create_image((x + .5) * self.coteCase,
(y + .5) * self.coteCase, image=self.imagesRedim[piece])
self.grillePieces[x][y] = self.can.create_image((x + .5) * self.coteCase, \
(y + .5) * self.coteCase, image=self.imagesRedim[piece])
else:
self.grillePieces[x][y] = False
@ -188,12 +177,8 @@ class PlateauTk:
"""
Crée le tableau contenant les images de pièces
"""
self.grillePieces = []
for x in range(0, self.logique.CASES_COTE): # Crée self.grillePieces
colonne = []
for y in range(0, self.logique.CASES_COTE):
colonne.append(False)
self.grillePieces.append(colonne)
self.grillePieces = [[False for y in range(self.logique.CASES_COTE)] \
for x in range(self.logique.CASES_COTE)]
def remplirGrille(self):
"""
@ -230,9 +215,10 @@ class PlateauTk:
"""
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'])
y = i['y1'] + (i['y2'] - i['y1']) * (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']-1)**2+1)
x = i['x1'] + (i['x2'] - i['x1']) * (-(i['avancement'] / i['total']-1)**2+1)
return [x, y]
def animation(self):
@ -283,13 +269,15 @@ class PlateauTk:
# Si une animation pour cette pièce existe déjà, on la
# reprend et on la modifie
coords = self.animationDCoords(i)
i['x1'] = coords[0] # TODO Simplifier avec update()
i['y1'] = coords[1]
i['x2'] = x2
i['y2'] = y2
# i['total'] = i['total'] - i['avancement']
i['total'] = self.TEMPS_ANIM
i['avancement'] = 0
i.update({
'x1': coords[0],
'y1': coords[1],
'x2': x2,
'y2': y2,
# 'total': i['total'] - i['avancement'],
'total': self.TEMPS_ANIM,
'avancement': 0
})
return
animation = {

View file

@ -41,11 +41,8 @@ class Logique:
"""
Crée le tableau self.grille.
"""
for x in range(self.CASES_COTE): # TODO Peut être amélioré
colonne = []
for y in range(self.CASES_COTE):
colonne.append(self.PCE_VIDE)
self.grille.append(colonne)
self.grille = [[self.PCE_VIDE for y in range(self.CASES_COTE)] \
for x in range(self.CASES_COTE)]
def ePieceBlanc(self, piece):
"""
@ -229,7 +226,7 @@ class LogiqueEchecs(Logique):
else:
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):
"""
Vérifie si le déplacement est possible.