[Echecs] Réalisation de certaines choses notées en TODO
This commit is contained in:
parent
ab48ed3e69
commit
e258823cd5
|
@ -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 = {
|
||||
|
|
|
@ -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.
|
||||
|
|
Reference in a new issue