[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 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,7 +168,7 @@ 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 = {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Reference in a new issue