ProjectionDep.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. """Projection du deplacement d'un pion"""
  2. from Forme import Forme
  3. class ProjectionDep():
  4. def __init__(self, plateau):
  5. self.plateau = plateau
  6. self._active = False
  7. self._pion = None
  8. self._coord = (-1,-1)
  9. self._forme = Forme(self.plateau.formeCases)
  10. self._nbRotations = 0
  11. def creer(self, pion):
  12. self._pion = pion
  13. self._forme.definirForme(pion.formeDef[self.plateau.formeCases])
  14. self._coord = pion.position
  15. self._nbRotations = pion.nbRotations
  16. self._active = True
  17. def majCoord(self, coord):
  18. self.desactiver()
  19. self._coord = coord
  20. self.maj()
  21. def majRotation(self, modRotation):
  22. self.desactiver()
  23. self._nbRotations += modRotation
  24. self.maj()
  25. def coord(self):
  26. return self._coord
  27. def nbRotations(self):
  28. return self._nbRotations
  29. def listeCoord(self):
  30. return self._forme.listeCases(self._coord, self._nbRotations)
  31. def listeCases(self):
  32. return [self.plateau.cases[coord] for coord in self.listeCoord()]
  33. def desactiver(self):
  34. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  35. if coord in self.plateau.cases:
  36. self.plateau.cases[coord].majEstCibleCurseur(False)
  37. self.active = False
  38. def existe(self):
  39. """la projection est valide si toutes les cases de la forme existent
  40. si non, elle n'apparait pas"""
  41. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  42. if not coord in self.plateau.cases: return False
  43. return True
  44. def valide(self):
  45. """le deplacement est valide si toutes les cases de la forme
  46. sont franchissables par le pion"""
  47. if not self.existe(): return False
  48. return self._pion.projectionValide(self)
  49. def maj(self):
  50. self._active = True
  51. if self.existe():
  52. depValide = self.valide()
  53. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  54. self.plateau.cases[coord].majEstCibleCurseur(True, depValide)