diff --git a/S1/Echecs/guiTk.py b/S1/Echecs/guiTk.py index f126d73..4e556f0 100644 --- a/S1/Echecs/guiTk.py +++ b/S1/Echecs/guiTk.py @@ -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 = { diff --git a/S1/Echecs/logique.py b/S1/Echecs/logique.py index 0d5b4b5..e7ec882 100644 --- a/S1/Echecs/logique.py +++ b/S1/Echecs/logique.py @@ -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.