ProjectionDep.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. """Projection du deplacement d'un pion"""
  2. from PyQt4.QtCore import *
  3. from PyQt4.QtGui import *
  4. from Forme import Forme
  5. class ProjectionDep():
  6. def __init__(self, plateau):
  7. self.plateau = plateau
  8. self._pion = None
  9. self._coord = (-1,-1)
  10. self._forme = Forme(self.plateau.formeCases)
  11. self._nbRotations = 0
  12. def creer(self, pion):
  13. self._forme.definirForme(pion.formeDef[self.plateau.formeCases])
  14. def majCoord(self, coord):
  15. self.desactiver()
  16. self._coord = coord
  17. self.maj()
  18. def majRotation(self, modRotation):
  19. self.desactiver()
  20. self._nbRotations += modRotation
  21. self.maj()
  22. def desactiver(self):
  23. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  24. self.plateau.cases[coord].majEstCibleCurseur(False)
  25. def projectionValide(self):
  26. """la projection est valide si toutes les cases de la forme existent"""
  27. valide = True
  28. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  29. if not coord in self.plateau.cases:
  30. valide = False
  31. break
  32. return valide
  33. def deplacementValide(self):
  34. """le deplacement est valide si toutes les cases de la forme sont franchissables"""
  35. valide = False
  36. compte = 0
  37. ok = 0
  38. if self.projectionValide():
  39. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  40. compte += 1
  41. if self.plateau.cases[coord].estFranchissable(self._pion.z):
  42. ok += 1
  43. else:
  44. #si la case est occupee par le pion lui-meme
  45. if self.plateau.cases[coord].estOccupeePar(self._pion.z) == self._pion:
  46. ok += 1
  47. valide = (ok == compte and compte > 0)
  48. return valide
  49. def maj(self):
  50. if self.projectionValide():
  51. depValide = self.deplacementValide()
  52. for coord in self._forme.listeCases(self._coord, self._nbRotations):
  53. self.plateau.cases[coord].majEstCibleCurseur(True, depValide)