|
|
@@ -0,0 +1,86 @@
|
|
|
+"""Projection du deplacement d'un pion"""
|
|
|
+
|
|
|
+from PyQt4.QtCore import *
|
|
|
+from PyQt4.QtGui import *
|
|
|
+
|
|
|
+from Forme import Forme
|
|
|
+
|
|
|
+
|
|
|
+class ProjectionDep():
|
|
|
+ def __init__(self, plateau):
|
|
|
+ self.plateau = plateau
|
|
|
+ self._pion = None
|
|
|
+
|
|
|
+ self._coord = (-1,-1)
|
|
|
+ self._forme = Forme(self.plateau.formeCases)
|
|
|
+ self._nbRotations = 0
|
|
|
+
|
|
|
+ def creer(self, pion):
|
|
|
+ self._forme.definirForme(pion.formeDef[self.plateau.formeCases])
|
|
|
+
|
|
|
+ def majCoord(self, coord):
|
|
|
+ self.desactiver()
|
|
|
+ self._coord = coord
|
|
|
+ self.maj()
|
|
|
+
|
|
|
+ def majRotation(self, modRotation):
|
|
|
+ self.desactiver()
|
|
|
+ self._nbRotations += modRotation
|
|
|
+ self.maj()
|
|
|
+
|
|
|
+ def desactiver(self):
|
|
|
+ for coord in self._forme.listeCases(self._coord, self._nbRotations):
|
|
|
+ self.plateau.cases[coord].majEstCibleCurseur(False)
|
|
|
+
|
|
|
+ def projectionValide(self):
|
|
|
+ """la projection est valide si toutes les cases de la forme existent"""
|
|
|
+ valide = True
|
|
|
+ for coord in self._forme.listeCases(self._coord, self._nbRotations):
|
|
|
+ if not coord in self.plateau.cases:
|
|
|
+ valide = False
|
|
|
+ break
|
|
|
+ return valide
|
|
|
+
|
|
|
+ def deplacementValide(self):
|
|
|
+ """le deplacement est valide si toutes les cases de la forme sont franchissables"""
|
|
|
+ valide = False
|
|
|
+ compte = 0
|
|
|
+ ok = 0
|
|
|
+ if self.projectionValide():
|
|
|
+ for coord in self._forme.listeCases(self._coord, self._nbRotations):
|
|
|
+ compte += 1
|
|
|
+ if self.plateau.cases[coord].estFranchissable(self._pion.z):
|
|
|
+ ok += 1
|
|
|
+ else:
|
|
|
+ #si la case est occupee par le pion lui-meme
|
|
|
+ if self.plateau.cases[coord].estOccupeePar(self._pion.z) == self._pion:
|
|
|
+ ok += 1
|
|
|
+ valide = (ok == compte and compte > 0)
|
|
|
+ return valide
|
|
|
+
|
|
|
+ def maj(self):
|
|
|
+ if self.projectionValide():
|
|
|
+ depValide = self.deplacementValide()
|
|
|
+ for coord in self._forme.listeCases(self._coord, self._nbRotations):
|
|
|
+ self.plateau.cases[coord].majEstCibleCurseur(True, depValide)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|