[Echecs] Possibilité de redimensionner le canvas

Je pensais que je l'avais commité ce matin, mais les changements ne se
sont retrouvé que dans la branche tkResize...
This commit is contained in:
Geoffrey Frogeye 2014-12-13 23:11:25 +01:00
parent 3dc2cdb531
commit 87635bb8a6

View file

@ -3,13 +3,12 @@ from logique import LogiqueEchecs
class PlateauTk: class PlateauTk:
DECX = 0 RATIO_PCE_CASE = .95
DECY = 0
COTE_CASE = 50
MARGE_PIONS = 5
TEMPS_ANIM = 200 TEMPS_ANIM = 200
INTER_ANIM = 10 INTER_ANIM = 10
COTE_TOUT_DEFAUT = 500
def __init__(self, fen, can, statut, logique): def __init__(self, fen, can, statut, logique):
self.can = can self.can = can
@ -31,19 +30,26 @@ class PlateauTk:
self.mvtsPossibles = [] self.mvtsPossibles = []
self.logique = logique self.logique = logique
self.redimCan() self.coteCase = 0
self.can.bind('<Button-1>', self.clic)
self.importerImages()
self.redimImages()
self.importerImages()
self.redimCan(self.COTE_TOUT_DEFAUT)
self.can.bind('<Button-1>', self.clic)
self.statutPrendre()
def redimCan(self, cote):
self.can.delete(ALL)
self.coteCase = cote // self.logique.CASES_COTE
cote = self.logique.CASES_COTE * self.coteCase
self.can.config(width=cote, height=cote)
for i in self.imagesRedim:
del i
self.redimImages()
self.cDamier() self.cDamier()
self.cGrille() self.cGrille()
self.remplirGrille(self.logique.grille) self.remplirGrille(self.logique.grille)
self.statutPrendre()
def redimCan(self):
self.can.config(width=self.COTE_CASE * self.logique.CASES_COTE, height=self.COTE_CASE * self.logique.CASES_COTE)
def nomPiece(self, piece): def nomPiece(self, piece):
tPiece = self.logique.tPiece(piece) tPiece = self.logique.tPiece(piece)
@ -66,7 +72,6 @@ class PlateauTk:
nom = 'sprites/'+self.nomPiece(piece)+couleur+'.gif' nom = 'sprites/'+self.nomPiece(piece)+couleur+'.gif'
self.imagesOriginales.update({piece:PhotoImage(file=nom)}) self.imagesOriginales.update({piece:PhotoImage(file=nom)})
def importerImages(self): def importerImages(self):
for piece in self.logique.BLANCS: for piece in self.logique.BLANCS:
self.importerImage(piece, 'B') self.importerImage(piece, 'B')
@ -77,7 +82,7 @@ class PlateauTk:
self.imagesRedim.update({piece:self.imagesOriginales[piece].subsample(sample)}) self.imagesRedim.update({piece:self.imagesOriginales[piece].subsample(sample)})
def redimImages(self): def redimImages(self):
sample = int(504 / (PlateauTk.COTE_CASE - PlateauTk.MARGE_PIONS)) 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:
@ -97,7 +102,7 @@ class PlateauTk:
def cCase(self, x, y): def cCase(self, x, y):
couleur = self.caseCouleur(self.logique.eCaseBlanche(x, y), 0) couleur = self.caseCouleur(self.logique.eCaseBlanche(x, y), 0)
return self.can.create_rectangle(x * PlateauTk.COTE_CASE, y * PlateauTk.COTE_CASE, (x + 1) * PlateauTk.COTE_CASE, (y + 1) * PlateauTk.COTE_CASE) return self.can.create_rectangle(x * self.coteCase, y * self.coteCase, (x + 1) * self.coteCase, (y + 1) * self.coteCase)
def coulCase(self, x, y, contexte): def coulCase(self, x, y, contexte):
couleur = self.caseCouleur(self.logique.eCaseBlanche(x, y), contexte) couleur = self.caseCouleur(self.logique.eCaseBlanche(x, y), contexte)
@ -113,13 +118,13 @@ class PlateauTk:
for x in range(0, self.logique.CASES_COTE): for x in range(0, self.logique.CASES_COTE):
colonne = [] colonne = []
for y in range(0, self.logique.CASES_COTE): for y in range(0, self.logique.CASES_COTE):
colonne.append(self.cCase(x + PlateauTk.DECX, y + PlateauTk.DECY)) colonne.append(self.cCase(x, y))
self.grilleDamier.append(colonne) self.grilleDamier.append(colonne)
self.coulDamier() self.coulDamier()
def cPion(self, x, y, piece): def cPion(self, x, y, piece):
if piece > 0: if piece > 0:
self.grillePions[x][y] = self.can.create_image((x + .5) * PlateauTk.COTE_CASE, (y + .5) * PlateauTk.COTE_CASE, image=self.imagesRedim[piece]) self.grillePions[x][y] = self.can.create_image((x + .5) * self.coteCase, (y + .5) * self.coteCase, image=self.imagesRedim[piece])
else: else:
self.grillePions[x][y] = False self.grillePions[x][y] = False
@ -168,7 +173,7 @@ class PlateauTk:
# TODO Opacité de i['pion'] # TODO Opacité de i['pion']
# elif i['type'] == 'c': # elif i['type'] == 'c':
# TODO Opacité de case # TODO Opacité de case
i['avancement'] += PlateauTk.INTER_ANIM i['avancement'] += self.INTER_ANIM
animationsNv.append(i) animationsNv.append(i)
else: else:
if i['type'] == 'd': if i['type'] == 'd':
@ -179,7 +184,7 @@ class PlateauTk:
self.coulCase(i['x'], i['y'], 0) self.coulCase(i['x'], i['y'], 0)
self.animations = animationsNv self.animations = animationsNv
if len(animationsNv): if len(animationsNv):
self.fen.after(PlateauTk.INTER_ANIM, self.animation) self.fen.after(self.INTER_ANIM, self.animation)
def animer(self, animation): def animer(self, animation):
etaitVide = len(self.animations) < 1 etaitVide = len(self.animations) < 1
@ -190,15 +195,15 @@ class PlateauTk:
def animerD(self, x1, y1, x2, y2, pion): def animerD(self, x1, y1, x2, y2, pion):
if len(self.animations): if len(self.animations):
for i in self.animations: for i in self.animations:
if i['pion'] == pion: # Si une animation pour ce pion existe if i['type'] == 'd' and i['pion'] == pion:
# déjà, on la reprend et on la modifie # Si une animation pour ce pion existe déjà, on la reprend et on la modifie
coords = self.animationDCoords(i) coords = self.animationDCoords(i)
i['x1'] = coords[0] i['x1'] = coords[0]
i['y1'] = coords[1] i['y1'] = coords[1]
i['x2'] = x2 i['x2'] = x2
i['y2'] = y2 i['y2'] = y2
# i['total'] = i['total'] - i['avancement'] # i['total'] = i['total'] - i['avancement']
i['total'] = PlateauTk.TEMPS_ANIM i['total'] = self.TEMPS_ANIM
i['avancement'] = 0 i['avancement'] = 0
return return
@ -209,7 +214,7 @@ class PlateauTk:
'y2': y2, 'y2': y2,
'pion': pion, 'pion': pion,
'type': 'd', 'type': 'd',
'total': PlateauTk.TEMPS_ANIM, 'total': self.TEMPS_ANIM,
'avancement': 0 'avancement': 0
} }
self.can.tag_raise(pion) # Mise au premier plan self.can.tag_raise(pion) # Mise au premier plan
@ -219,7 +224,7 @@ class PlateauTk:
animation = { animation = {
'pion': pion, 'pion': pion,
'type': 'f', 'type': 'f',
'total': PlateauTk.TEMPS_ANIM, 'total': self.TEMPS_ANIM,
'avancement': 0 'avancement': 0
} }
self.animer(animation) self.animer(animation)
@ -229,7 +234,7 @@ class PlateauTk:
'type': 'c', 'type': 'c',
'x': x, 'x': x,
'y': y, 'y': y,
'total': PlateauTk.TEMPS_ANIM, 'total': self.TEMPS_ANIM,
'avancement': 0 'avancement': 0
} }
self.animer(animation) self.animer(animation)
@ -254,8 +259,8 @@ class PlateauTk:
for d in test['deplacer']: for d in test['deplacer']:
self.grillePions[d[2]][d[3]], self.grillePions[d[0]][d[1]] = \ self.grillePions[d[2]][d[3]], self.grillePions[d[0]][d[1]] = \
self.grillePions[d[0]][d[1]], False self.grillePions[d[0]][d[1]], False
self.animerD((d[0] + .5) * PlateauTk.COTE_CASE, (d[1] + .5) * PlateauTk.COTE_CASE, \ self.animerD((d[0] + .5) * self.coteCase, (d[1] + .5) * self.coteCase, \
(d[2] + .5) * PlateauTk.COTE_CASE, (d[3] + .5) * PlateauTk.COTE_CASE, \ (d[2] + .5) * self.coteCase, (d[3] + .5) * self.coteCase, \
self.grillePions[d[2]][d[3]]) self.grillePions[d[2]][d[3]])
else: else:
@ -291,9 +296,8 @@ class PlateauTk:
self.animerC(self.dx2, self.dy2) self.animerC(self.dx2, self.dy2)
def clic(self, event): def clic(self, event):
x = event.x // self.COTE_CASE if event.x in range(0, self.coteCase * self.logique.CASES_COTE) and event.y in range(0, self.coteCase * self.logique.CASES_COTE):
y = event.y // self.COTE_CASE self.dClic(event.x // self.coteCase, event.y // self.coteCase)
self.dClic(x, y)
class FenetreTk: class FenetreTk: