[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:
parent
3dc2cdb531
commit
87635bb8a6
|
@ -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)
|
||||||
|
@ -65,7 +71,6 @@ class PlateauTk:
|
||||||
def importerImage(self, piece, couleur):
|
def importerImage(self, piece, couleur):
|
||||||
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:
|
||||||
|
@ -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:
|
||||||
|
|
Reference in a new issue