Explorar el Código

Creation des differentes classes d'attaque (structures à optimiser)

unknown hace 10 años
padre
commit
17bffebe43
Se han modificado 3 ficheros con 495 adiciones y 186 borrados
  1. 0 0
      doc/restruct.docx
  2. 312 3
      lib/Attaque.py
  3. 183 183
      lib/Plateau.py

+ 0 - 0
restruct.docx → doc/restruct.docx


+ 312 - 3
lib/Attaque.py

@@ -6,9 +6,318 @@ class Attaque():
     """attaque pre-parametree affectee a un pion, un personnage ou une creature"""
     def __init__(self):
         self.nom = "Attaque"
-        self.typ = "cac"   #cac, dist, zone
         self.portee = 1   #portee max en cases
-        self.formeZone = ""   #forme de l'attaque de zone
-        self.rayon = 1    #rayon d'une attaque de zone de type disque
         self.attributs = regles.listeAttributsAttaques()
         self.notes = ""
+
+        #variables de fonctionnement
+        self._numPionCible = None
+        self._coordCible = (-1, -1)
+        self._casesCibles = []
+
+        #items graphiques
+        self._itemLigne = None
+        self._itemCible = None
+
+    def activer(self, plateau):
+        self.plateau = plateau
+        self.plateau.materialiserPions(False)
+
+    def desactiver(self):
+        pass
+
+    def effectuer(self):
+        pass
+
+    def annuler(self):
+        pass
+
+    def majCoordCible(self, coord):
+        """met a jour les coordonnees de la cible,
+            cad la case actuellement survolee par la souris"""
+        if self.plateau.estCoordonneeValide(coord):
+            self._coordCible = coord
+            self.maj()
+
+
+class Cac(Attaque):
+    """attaque au corps a corps"""
+    def __init__(self):
+        super(Cac, self).__init__(self)
+        self.nom = "Attaque au corps-à-corps"
+        self._pionCible = None
+        
+    def maj(self):
+        pionCible = self_plateau.cases[self._coordCible].pionOccupant()
+        
+        if pionCible != None and pionCible != self._plateau.pionSelectionne():
+            self._pionCible = pionCible
+            self._pionCible.estCibleAttaque(True, self.estValide())
+        else:
+            self._pionCible.estCibleAttaque(False)
+            self._pionCible = None
+
+    def estValide(self):
+        return (self._coordCible in self.plateau.zone(self.plateau.pionSelectionne().position, self.portee, 0, False, True))
+
+
+
+            
+class Distance(Attaque):
+    """attaque a distance"""
+    def __init__(self):
+        super(Distance, self).__init__(self)
+        self.nom = "Attaque à distance"
+        self._itemLigne = None
+        self._pionCible = None
+
+    def activer(self, plateau):
+        #creation de la ligne de mire
+##        self._pointOrigine = self.plateau.cases[self.plateau.pionSelectionne().position].centreGraphique
+        self._itemLigne = QGraphicsLineItem()
+        self._itemLigne.setZValue(100)
+        pinceau = QPen()
+        pinceau.setWidth(6)
+        self._itemLigne.setPen(pinceau)
+        self._itemLigne.prepareGeometryChange()
+        self.plateau.addItem(self._itemLigne)
+        super(Distance, self).activer(self, plateau)
+
+    def majCoordCible(self, coord):
+        if self._pionCible:
+            self._pionCible.estCibleAttaque(False, self.estValide())
+        if self._coordCible in self.plateau.cases:    
+            self.plateau.cases[self._coordCible].majEstCibleCurseur(False)
+        super(Distance, self).majCoord(self, coord)        
+        
+    def desactiver(self):
+        if self._itemLigne != None:
+            self._itemLigne.prepareGeometryChange()
+            self.removeItem(self._itemLigne)
+            self._itemLigne = None
+        super(Distance, self).desactiver(self)
+        
+
+    def maj(self):
+        """met a jour la ligne de mire representant l'attaque a distance"""
+        pionCible = self_plateau.cases[self._coordCible].pionOccupant()
+
+        self._itemLigne.setLine(QLineF(self.plateau.cases[self.plateau.pionSelectionne().position].centreGraphique, \
+                                       self.plateau.cases[self._coordCible].centreGraphique))
+
+        if pionCible != None and pionCible != self._plateau.pionSelectionne():
+            self._pionCible = pionCible
+            self._pionCible.estCibleAttaque(True, self.estValide())
+        else:
+            self._pionCible.estCibleAttaque(False)
+            self._pionCible = None
+            #si pas de pion vise, on affiche la case cible comme visee
+            self.plateau.cases[self._coordCible].majEstCibleCurseur(True, self.estValide())
+
+    def estValide(self):
+        return self.plateau.estCibleAttaqueDistValide(self.plateau.pionSelectionne().position, self._coordCible, 0)
+
+
+
+class Ligne(Attaque):
+    """attaque de zone de forme lineaire"""
+    def __init__(self):
+        super(Ligne, self).__init__(self)
+        self.nom = "Attaque de zone: ligne"
+        self._itemLigne = None
+        self._casesCibles = []
+
+
+    def activer(self, plateau):
+        self._itemLigne = QGraphicsLineItem()
+        self._itemLigne.setPen(QPen(QColor("black")))
+        self._itemLigne.prepareGeometryChange()
+        self.plateau.addItem(self._itemLigne)
+
+        super(Ligne, self).activer(self, plateau)
+
+    def desactiver(self):
+        if self._itemLigne != None:
+            self._itemLigne.prepareGeometryChange()
+            self.removeItem(self._itemLigne)
+            self._itemLigne = None
+        super(Ligne, self).desactiver(self)
+
+    def majCoordCible(self, coord):
+        for coord in self._casesCibles:
+            self.plateau.cases[coord].majEstCibleAttaque(False)
+            
+        for numCombattant in self.pionsSurListeCase(self._casesCibles):
+             self.plateau.combattants[numCombattant].estCibleAttaque(False)
+        super(Ligne, self).majCoord(self, coord)
+
+
+    def maj(self):
+        """cree la forme de l'attaque de zone"""
+        self._itemLigne.setLine(QLineF(self.plateau.cases[self.plateau.pionSelectionne().position].centreGraphique, \
+                                       self.plateau.cases[self._coordCible].centreGraphique))
+        self._casesCibles = []
+        for coord in self.plateau.casesSousForme(self._itemLigne, False):
+            if coord != self.plateau.pionSelectionne().position:
+                self._casesCibles.append(coord)    
+
+        for coord in self._casesCibles:
+            self.plateau.cases[coord].majEstCibleAttaque(True)
+        for numCombattant in self.plateau.pionsSurListeCase(self._casesCibles):
+            self.plateau.combattants[numCombattant].estCibleAttaque(True)
+
+
+class Disque(Attaque):
+    """attaque de zone de forme circulaire"""
+    def __init__(self):
+        super(Disque, self).__init__(self)
+        self.nom = "Attaque de zone: disque"
+        self.rayon = 1
+        
+        self._itemLigne = None
+        self._casesCibles = []
+        self._itemLigne = None
+        self._itemCible = None
+
+    def activer(self, plateau):
+        self._itemLigne = QGraphicsLineItem()
+        self._itemLigne.setPen(QPen(QColor("black")))
+        self._itemLigne.prepareGeometryChange()
+        self.plateau.addItem(self._itemLigne)
+
+        self._itemCible = QGraphicsEllipseItem()
+        self._itemCible.setPen(QPen(QColor("black")))
+        self._itemCible.prepareGeometryChange()
+        self.plateau.addItem(self._itemCible)
+
+        super(Disque, self).activer(self, plateau)
+
+    def desactiver(self):
+        if self._itemCible != None:
+            self._itemCible.prepareGeometryChange()
+            self.removeItem(self._itemCible)
+            self._itemCible = None
+
+        if self._itemLigne != None:
+            self._itemLigne.prepareGeometryChange()
+            self.removeItem(self._itemLigne)
+            self._itemLigne = None
+            
+        super(Disque, self).desactiver(self)
+
+    def majCoordCible(self, coord):
+        for coord in self._casesCibles:
+            self.plateau.cases[coord].majEstCibleAttaque(False)
+            
+        for numCombattant in self.pionsSurListeCase(self._casesCibles):
+             self.plateau.combattants[numCombattant].estCibleAttaque(False)
+        super(Disque, self).majCoord(self, coord)
+
+    def maj(self):
+        """cree la forme de l'attaque de zone"""
+        self._itemLigne.setLine(QLineF(self.plateau.cases[self.plateau.pionSelectionne().position].centreGraphique, \
+                                       self.plateau.cases[self._coordCible].centreGraphique))
+
+        if self.estValide():
+            #maj du disque
+            self.rectEllipseCirculaire(self.plateau.cases[self._coordCible].centreGraphique, self.rayon)
+            
+            self._casesCibles = []
+            if rect != None:
+                self._itemCible.setRect(rect)
+                #zone plus rapide que casesSousForme:
+                self._casesCibles = self.plateau.zone(self._coordCible, self.rayon, 0)
+
+                for coord in self._casesCibles:
+                    self.plateau.cases[coord].majEstCibleAttaque(True)
+                for numCombattant in self.plateau.pionsSurListeCase(self._casesCibles):
+                    self.plateau.combattants[numCombattant].estCibleAttaque(True)
+        else:
+            self.plateau.cases[self._coordCible].majEstCibleCurseur(True, False)
+
+        self._itemCible.setVisible(self.estvalide() and rect != None)
+
+
+    def estValide(self):
+        return self.plateau.estCibleAttaqueDistValide(self.plateau.pionSelectionne().position, self._coordCible)
+
+    def rectEllipseCirculaire(self, centre, rayon):
+        """renvoie le QRectF definissant une ellipse ayant le QPointF pour centre et le rayon en cases entres en param
+           attention: l'ellipse n'est pas tout a fait circulaire, elle couvre horizontalement et
+           verticalement le nombre de cases demandees"""
+        rect = None
+        if rayon > 0:
+            p1 = QPointF((centre.x() - (rayon*self.hCase)), (centre.y() - (rayon*self.hCase)))
+            p2 = QPointF((centre.x() + (rayon*self.hCase)), (centre.y() + (rayon*self.hCase)))
+            if p1 != p2:
+                rect = QRectF()
+                rect.setTopLeft(p1)
+                rect.setBottomRight(p2)
+        return rect
+
+
+
+class Cone(Attaque):
+    """attaque de zone de forme conique"""
+    def __init__(self):
+        super(Cone, self).__init__(self)
+        self.nom = "Attaque de zone: cône"
+        self._itemCible = None
+        self._casesCibles = []
+
+    def activer(self, plateau):
+        self._itemCible = QGraphicsPolygonItem()
+        self._itemCible.setPen(QPen(QColor("black")))
+        self._itemCible.prepareGeometryChange()
+        self.plateau.addItem(self._itemCible)
+
+        super(Cone, self).activer(self, plateau)
+
+    def desactiver(self):
+        if self._itemCible != None:
+            self._itemCible.prepareGeometryChange()
+            self.removeItem(self._itemCible)
+            self._itemCible = None
+            
+        super(Cone, self).desactiver(self)
+
+    def majCoordCible(self, coord):
+        for coord in self._casesCibles:
+            self.plateau.cases[coord].majEstCibleAttaque(False)
+            
+        for numCombattant in self.pionsSurListeCase(self._casesCibles):
+             self.plateau.combattants[numCombattant].estCibleAttaque(False)
+
+        super(Cone, self).majCoord(self, coord)
+
+    def maj(self):
+        """cree la forme de l'attaque de zone"""
+        self._itemCible.setPolygon(self.polygoneCone(self.plateau.cases[self.plateau.pionSelectionne().position].centreGraphique, \
+                                                     self.plateau.cases[self._coordCible].centreGraphique))
+        self._casesCibles = []
+        for coord in self.plateau.casesSousForme(self._itemCible, True, True):
+            if coord != self.plateau.pionSelectionne().position:
+                self._casesCibles.append(coord)    
+
+        for coord in self._casesCibles:
+            self.plateau.cases[coord].majEstCibleAttaque(True)
+        for numCombattant in self.plateau.pionsSurListeCase(self._casesCibles):
+            self.plateau.combattants[numCombattant].estCibleAttaque(True)
+
+    def polygoneCone(self, point1, point2):
+        """renvoie le polygone du cone defini par les deux points (origine, distance)"""
+        ligne1 = QLineF(point1, point2)
+        longueur = ligne1.length()
+        ligne1.setAngle(ligne1.angle() + 22.5)
+        ligne1.setLength(1.1547*longueur)
+        ligne2 = QLineF(point1, point2)    
+        ligne2.setAngle(ligne2.angle() - 22.5)
+        ligne2.setLength(1.1547*longueur)
+        polygone = QPolygonF()
+        polygone.append(point1)
+        polygone.append(ligne1.p2())
+        polygone.append(ligne2.p2())
+        return polygone
+
+
+

+ 183 - 183
lib/Plateau.py

@@ -1310,51 +1310,51 @@ class Plateau(QGraphicsScene):
         return preSelection                         
 
 
-    def majLigneMireAttaqueDist(self, coordCible = None):
-        """met a jour la ligne de mire representant l'attaque a distance"""
-        if self.modeParam["cibleAttaqueDist"] != None and self.modeParam["cibleAttaqueDist"] != coordCible:
-            self.cases[self.modeParam["cibleAttaqueDist"]].majEstCibleCurseur(False)
-
-        if self.modeParam["pionCibleAttaqueDist"] != None:
-            self.modeParam["pionCibleAttaqueDist"].estCibleAttaque(False)
-            
-        if coordCible != None and self.pionSelectionne() != None and self.modeCombat == "combatAttaqueDist":
-            if coordCible == None:
-                coordCible = pion.position
-                
-            if coordCible != self.modeParam["cibleAttaqueDist"]:
-                if self.modeParam["ligneAttaqueDist"] == None:
-                    self.modeParam["ligneAttaqueDist"] = QGraphicsLineItem()
-                    self.modeParam["ligneAttaqueDist"].setZValue(100)
-                    pinceau = QPen()
-                    pinceau.setWidth(6)
-                    self.modeParam["ligneAttaqueDist"].setPen(pinceau)
-                    self.modeParam["ligneAttaqueDist"].prepareGeometryChange()
-                    self.addItem(self.modeParam["ligneAttaqueDist"])
-
-                z = 0
-                pionSurCase = self.cases[coordCible].pionOccupant()
-                if pionSurCase != None:
-                    z = pionSurCase.z
-                cibleValide = self.estCibleAttaqueDistValide(self.pionSelectionne().position, coordCible, z)
-
-                if pionSurCase != None:
-                    pionSurCase.estCibleAttaque(True, cibleValide)
-                    self.modeParam["pionCibleAttaqueDist"] = pionSurCase
-                else:
-                    self.cases[coordCible].majEstCibleCurseur(True, cibleValide)
-                self.modeParam["cibleAttaqueDist"] = coordCible
-                    
-                point1 = self.cases[self.pionSelectionne().position].centreGraphique
-                point2 = self.cases[coordCible].centreGraphique
-                ligne = QLineF(point1, point2)
-                self.modeParam["ligneAttaqueDist"].setLine(ligne)
-        else:
-            if self.modeParam["ligneAttaqueDist"] != None:
-                self.modeParam["ligneAttaqueDist"].prepareGeometryChange()
-                self.removeItem(self.modeParam["ligneAttaqueDist"])
-            self.modeParam["ligneAttaqueDist"] = None
-            self.modeParam["cibleAttaqueDist"] = None
+##    def majLigneMireAttaqueDist(self, coordCible = None):
+##        """met a jour la ligne de mire representant l'attaque a distance"""
+##        if self.modeParam["cibleAttaqueDist"] != None and self.modeParam["cibleAttaqueDist"] != coordCible:
+##            self.cases[self.modeParam["cibleAttaqueDist"]].majEstCibleCurseur(False)
+##
+##        if self.modeParam["pionCibleAttaqueDist"] != None:
+##            self.modeParam["pionCibleAttaqueDist"].estCibleAttaque(False)
+##            
+##        if coordCible != None and self.pionSelectionne() != None and self.modeCombat == "combatAttaqueDist":
+##            if coordCible == None:
+##                coordCible = pion.position
+##                
+##            if coordCible != self.modeParam["cibleAttaqueDist"]:
+##                if self.modeParam["ligneAttaqueDist"] == None:
+##                    self.modeParam["ligneAttaqueDist"] = QGraphicsLineItem()
+##                    self.modeParam["ligneAttaqueDist"].setZValue(100)
+##                    pinceau = QPen()
+##                    pinceau.setWidth(6)
+##                    self.modeParam["ligneAttaqueDist"].setPen(pinceau)
+##                    self.modeParam["ligneAttaqueDist"].prepareGeometryChange()
+##                    self.addItem(self.modeParam["ligneAttaqueDist"])
+##
+##                z = 0
+##                pionSurCase = self.cases[coordCible].pionOccupant()
+##                if pionSurCase != None:
+##                    z = pionSurCase.z
+##                cibleValide = self.estCibleAttaqueDistValide(self.pionSelectionne().position, coordCible, z)
+##
+##                if pionSurCase != None:
+##                    pionSurCase.estCibleAttaque(True, cibleValide)
+##                    self.modeParam["pionCibleAttaqueDist"] = pionSurCase
+##                else:
+##                    self.cases[coordCible].majEstCibleCurseur(True, cibleValide)
+##                self.modeParam["cibleAttaqueDist"] = coordCible
+##                    
+##                point1 = self.cases[self.pionSelectionne().position].centreGraphique
+##                point2 = self.cases[coordCible].centreGraphique
+##                ligne = QLineF(point1, point2)
+##                self.modeParam["ligneAttaqueDist"].setLine(ligne)
+##        else:
+##            if self.modeParam["ligneAttaqueDist"] != None:
+##                self.modeParam["ligneAttaqueDist"].prepareGeometryChange()
+##                self.removeItem(self.modeParam["ligneAttaqueDist"])
+##            self.modeParam["ligneAttaqueDist"] = None
+##            self.modeParam["cibleAttaqueDist"] = None
             
                 
     def estCibleAttaqueDistValide(self, coordOrigine, coordCible, zPion = 0):
@@ -1421,144 +1421,144 @@ class Plateau(QGraphicsScene):
         print(msg)
         self.majModeCombat("aucun")
 
-    def rectEllipseCirculaire(self, centre, rayon):
-        """renvoie le QRectF definissant une ellipse ayant le QPointF pour centre et le rayon en cases entres en param
-           attention: l'ellipse n'est pas tout a fait circulaire, elle couvre horizontalement et
-           verticalement le nombre de cases demandees"""
-        rect = QRectF()
-        if rayon > 0:
-            p1 = QPointF((centre.x() - (rayon*self.hCase)), (centre.y() - (rayon*self.hCase)))
-            p2 = QPointF((centre.x() + (rayon*self.hCase)), (centre.y() + (rayon*self.hCase)))
-            rect.setTopLeft(p1)
-            rect.setBottomRight(p2)
-        else:
-            rect = None
-        return rect
-
-    def polygoneCone(self, point1, point2):
-        """renvoie le polygone du cone defini par les deux points (origine, distance)"""
-        ligne1 = QLineF(point1, point2)
-        longueur = ligne1.length()
-        ligne1.setAngle(ligne1.angle() + 22.5)
-        ligne1.setLength(1.1547*longueur)
-        ligne2 = QLineF(point1, point2)    
-        ligne2.setAngle(ligne2.angle() - 22.5)
-        ligne2.setLength(1.1547*longueur)
-        polygone = QPolygonF()
-        polygone.append(point1)
-        polygone.append(ligne1.p2())
-        polygone.append(ligne2.p2())
-        return polygone
-
-    def majFormeAttaqueZone(self):
-        """cree la forme de l'attaque de zone"""
-        for coord in self.modeParam["listeCasesAttaqueZone"]:
-            self.cases[coord].majEstCibleAttaque(False)
-        for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
-             self.combattants[numCombattant].estCibleAttaque(False)
-        
-        if self.modeCombat == "combatAttaqueZone" and self.pionSelectionne() != None:
-            if self.modeParam["typeAttaqueZone"] == "ligne":
-                if self.modeParam["formeAttaqueZone"] == None:
-                    self.modeParam["origineAttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
-                    self.modeParam["point2AttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
-                    self.modeParam["formeAttaqueZone"] = QGraphicsLineItem()
-                    self.modeParam["formeAttaqueZone"].setPen(QPen(QColor("black")))
-                    self.modeParam["formeAttaqueZone"].prepareGeometryChange()
-                    self.addItem(self.modeParam["formeAttaqueZone"])
-                if self.modeParam["origineAttaqueZone"] != self.modeParam["point2AttaqueZone"]: 
-                    ligne = QLineF(self.modeParam["origineAttaqueZone"], self.modeParam["point2AttaqueZone"])
-                    self.modeParam["formeAttaqueZone"].setLine(ligne)
-                    self.modeParam["listeCasesAttaqueZone"] = []
-                    lst = self.casesSousForme(self.modeParam["formeAttaqueZone"],False)
-                    for coord in lst:
-                        self.modeParam["listeCasesAttaqueZone"].append(coord)                
-                    #on retire la case du pion selectionne si besoin:
-                    if self.pionSelectionne().position in self.modeParam["listeCasesAttaqueZone"]:
-                        self.modeParam["listeCasesAttaqueZone"].remove(self.pionSelectionne().position)
-                                                 
-            elif self.modeParam["typeAttaqueZone"] == "disque":
-                if self.modeParam["ligneMireAttaqueZone"] == None:
-                    self.modeParam["origineAttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
-                    self.modeParam["point2AttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
-                    self.modeParam["ligneMireAttaqueZone"] = QGraphicsLineItem()
-                    self.modeParam["ligneMireAttaqueZone"].setPen(QPen(QColor("black")))
-                    self.modeParam["ligneMireAttaqueZone"].prepareGeometryChange()
-                    self.addItem(self.modeParam["ligneMireAttaqueZone"])
-   
-                if self.modeParam["origineAttaqueZone"] != self.modeParam["point2AttaqueZone"]: 
-                    ligne = QLineF(self.modeParam["origineAttaqueZone"], self.modeParam["point2AttaqueZone"])
-                    self.modeParam["ligneMireAttaqueZone"].setLine(ligne)
-                    coordCible = self.coordonneesAuPoint(self.modeParam["point2AttaqueZone"])
-                    cibleValide = self.estCibleAttaqueDistValide(self.pionSelectionne().position, coordCible)
-                    
-                    if cibleValide:
-                        rayon = self.fenetre.ui.pi_rayonAttaqueZone.value()
-                        if self.modeParam["formeAttaqueZone"] == None:
-                            self.modeParam["formeAttaqueZone"] = QGraphicsEllipseItem()
-                            self.modeParam["formeAttaqueZone"].setPen(QPen(QColor("black")))
-                            self.modeParam["formeAttaqueZone"].prepareGeometryChange()
-                            self.addItem(self.modeParam["formeAttaqueZone"])
-                        rect = self.rectEllipseCirculaire(self.modeParam["point2AttaqueZone"], rayon)
-                        self.modeParam["listeCasesAttaqueZone"] = []
-                        if rect != None and rect.bottomRight() != rect.topLeft():
-                            self.modeParam["formeAttaqueZone"].setRect(rect)
-                            lst = self.zone(coordCible, rayon, 0)   #zone bcp plus rapide que casesSousforme
-                            self.modeParam["listeCasesAttaqueZone"] = lst
-                    else:
-                        self.cases[coordCible].majEstCibleCurseur(True, False)
-                        self.modeParam["listeCasesAttaqueZone"] = []
-                    
-                    if self.modeParam["formeAttaqueZone"] != None:        
-                        self.modeParam["formeAttaqueZone"].setVisible(cibleValide == True and rect != None)    
-                
-            elif self.modeParam["typeAttaqueZone"] == "cone":
-                if self.modeParam["formeAttaqueZone"] == None:
-                    self.modeParam["origineAttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
-                    self.modeParam["point2AttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
-                    self.modeParam["formeAttaqueZone"] = QGraphicsPolygonItem()
-                    self.modeParam["formeAttaqueZone"].setPen(QPen(QColor("black")))
-                    self.modeParam["formeAttaqueZone"].prepareGeometryChange()
-                    self.addItem(self.modeParam["formeAttaqueZone"])
-                    
-                if self.modeParam["origineAttaqueZone"] != self.modeParam["point2AttaqueZone"]:
-                    cone = self.polygoneCone(self.modeParam["origineAttaqueZone"], self.modeParam["point2AttaqueZone"])
-                    self.modeParam["formeAttaqueZone"].setPolygon(cone)
-                    lst = self.casesSousForme(self.modeParam["formeAttaqueZone"], True, True)
-                    self.modeParam["listeCasesAttaqueZone"] = []
-                    for coord in lst:
-                        if coord != self.pionSelectionne().position:
-                            self.modeParam["listeCasesAttaqueZone"].append(coord)
-
-            for coord in self.modeParam["listeCasesAttaqueZone"]:
-                self.cases[coord].majEstCibleAttaque(True)
-            for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
-                self.combattants[numCombattant].estCibleAttaque(True)
-
-
-    def validerAttaqueZone(self):
-        """l'attaque de zone est validee"""
-        if self.modeActif_old == "pionSelectionne" and self.modeCombat == "combatAttaqueZone":
-            for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
-                print("{} a lance une attaque de zone sur {}".format(self.pionSelectionne().nom, self.pionSelectionne().numero , \
-                                                                     self.combattants[numCombattant].nom, self.combattants[numCombattant].numero))
-        self.majModeCombat("aucun")        
-
-    def reinitAttaqueZone(self):
-        if self.modeParam["formeAttaqueZone"] != None:
-            self.modeParam["formeAttaqueZone"].prepareGeometryChange()
-            self.removeItem(self.modeParam["formeAttaqueZone"])
-            self.modeParam["formeAttaqueZone"] = None
-        if self.modeParam["ligneMireAttaqueZone"] != None:
-            self.modeParam["ligneMireAttaqueZone"].prepareGeometryChange()
-            self.removeItem(self.modeParam["ligneMireAttaqueZone"])
-            self.modeParam["ligneMireAttaqueZone"] = None
-        if self.modeParam["point2AttaqueZone"] != None:
-            self.cases[self.coordonneesAuPoint(self.modeParam["point2AttaqueZone"])].majEstCibleCurseur(False)
-        for coord in self.modeParam["listeCasesAttaqueZone"]:
-            self.cases[coord].majEstCibleAttaque(False)
-        for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
-            self.combattants[numCombattant].estCibleAttaque(False)
+##    def rectEllipseCirculaire(self, centre, rayon):
+##        """renvoie le QRectF definissant une ellipse ayant le QPointF pour centre et le rayon en cases entres en param
+##           attention: l'ellipse n'est pas tout a fait circulaire, elle couvre horizontalement et
+##           verticalement le nombre de cases demandees"""
+##        rect = QRectF()
+##        if rayon > 0:
+##            p1 = QPointF((centre.x() - (rayon*self.hCase)), (centre.y() - (rayon*self.hCase)))
+##            p2 = QPointF((centre.x() + (rayon*self.hCase)), (centre.y() + (rayon*self.hCase)))
+##            rect.setTopLeft(p1)
+##            rect.setBottomRight(p2)
+##        else:
+##            rect = None
+##        return rect
+
+##    def polygoneCone(self, point1, point2):
+##        """renvoie le polygone du cone defini par les deux points (origine, distance)"""
+##        ligne1 = QLineF(point1, point2)
+##        longueur = ligne1.length()
+##        ligne1.setAngle(ligne1.angle() + 22.5)
+##        ligne1.setLength(1.1547*longueur)
+##        ligne2 = QLineF(point1, point2)    
+##        ligne2.setAngle(ligne2.angle() - 22.5)
+##        ligne2.setLength(1.1547*longueur)
+##        polygone = QPolygonF()
+##        polygone.append(point1)
+##        polygone.append(ligne1.p2())
+##        polygone.append(ligne2.p2())
+##        return polygone
+
+##    def majFormeAttaqueZone(self):
+##        """cree la forme de l'attaque de zone"""
+##        for coord in self.modeParam["listeCasesAttaqueZone"]:
+##            self.cases[coord].majEstCibleAttaque(False)
+##        for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
+##             self.combattants[numCombattant].estCibleAttaque(False)
+##        
+##        if self.modeCombat == "combatAttaqueZone" and self.pionSelectionne() != None:
+##            if self.modeParam["typeAttaqueZone"] == "ligne":
+##                if self.modeParam["formeAttaqueZone"] == None:
+##                    self.modeParam["origineAttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
+##                    self.modeParam["point2AttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
+##                    self.modeParam["formeAttaqueZone"] = QGraphicsLineItem()
+##                    self.modeParam["formeAttaqueZone"].setPen(QPen(QColor("black")))
+##                    self.modeParam["formeAttaqueZone"].prepareGeometryChange()
+##                    self.addItem(self.modeParam["formeAttaqueZone"])
+##                if self.modeParam["origineAttaqueZone"] != self.modeParam["point2AttaqueZone"]: 
+##                    ligne = QLineF(self.modeParam["origineAttaqueZone"], self.modeParam["point2AttaqueZone"])
+##                    self.modeParam["formeAttaqueZone"].setLine(ligne)
+##                    self.modeParam["listeCasesAttaqueZone"] = []
+##                    lst = self.casesSousForme(self.modeParam["formeAttaqueZone"],False)
+##                    for coord in lst:
+##                        self.modeParam["listeCasesAttaqueZone"].append(coord)                
+##                    #on retire la case du pion selectionne si besoin:
+##                    if self.pionSelectionne().position in self.modeParam["listeCasesAttaqueZone"]:
+##                        self.modeParam["listeCasesAttaqueZone"].remove(self.pionSelectionne().position)
+##                                                 
+##            elif self.modeParam["typeAttaqueZone"] == "disque":
+##                if self.modeParam["ligneMireAttaqueZone"] == None:
+##                    self.modeParam["origineAttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
+##                    self.modeParam["point2AttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
+##                    self.modeParam["ligneMireAttaqueZone"] = QGraphicsLineItem()
+##                    self.modeParam["ligneMireAttaqueZone"].setPen(QPen(QColor("black")))
+##                    self.modeParam["ligneMireAttaqueZone"].prepareGeometryChange()
+##                    self.addItem(self.modeParam["ligneMireAttaqueZone"])
+##   
+##                if self.modeParam["origineAttaqueZone"] != self.modeParam["point2AttaqueZone"]: 
+##                    ligne = QLineF(self.modeParam["origineAttaqueZone"], self.modeParam["point2AttaqueZone"])
+##                    self.modeParam["ligneMireAttaqueZone"].setLine(ligne)
+##                    coordCible = self.coordonneesAuPoint(self.modeParam["point2AttaqueZone"])
+##                    cibleValide = self.estCibleAttaqueDistValide(self.pionSelectionne().position, coordCible)
+##                    
+##                    if cibleValide:
+##                        rayon = self.fenetre.ui.pi_rayonAttaqueZone.value()
+##                        if self.modeParam["formeAttaqueZone"] == None:
+##                            self.modeParam["formeAttaqueZone"] = QGraphicsEllipseItem()
+##                            self.modeParam["formeAttaqueZone"].setPen(QPen(QColor("black")))
+##                            self.modeParam["formeAttaqueZone"].prepareGeometryChange()
+##                            self.addItem(self.modeParam["formeAttaqueZone"])
+##                        rect = self.rectEllipseCirculaire(self.modeParam["point2AttaqueZone"], rayon)
+##                        self.modeParam["listeCasesAttaqueZone"] = []
+##                        if rect != None and rect.bottomRight() != rect.topLeft():
+##                            self.modeParam["formeAttaqueZone"].setRect(rect)
+##                            lst = self.zone(coordCible, rayon, 0)   #zone bcp plus rapide que casesSousforme
+##                            self.modeParam["listeCasesAttaqueZone"] = lst
+##                    else:
+##                        self.cases[coordCible].majEstCibleCurseur(True, False)
+##                        self.modeParam["listeCasesAttaqueZone"] = []
+##                    
+##                    if self.modeParam["formeAttaqueZone"] != None:        
+##                        self.modeParam["formeAttaqueZone"].setVisible(cibleValide == True and rect != None)    
+##                
+##            elif self.modeParam["typeAttaqueZone"] == "cone":
+##                if self.modeParam["formeAttaqueZone"] == None:
+##                    self.modeParam["origineAttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
+##                    self.modeParam["point2AttaqueZone"] = self.cases[self.pionSelectionne().position].centreGraphique
+##                    self.modeParam["formeAttaqueZone"] = QGraphicsPolygonItem()
+##                    self.modeParam["formeAttaqueZone"].setPen(QPen(QColor("black")))
+##                    self.modeParam["formeAttaqueZone"].prepareGeometryChange()
+##                    self.addItem(self.modeParam["formeAttaqueZone"])
+##                    
+##                if self.modeParam["origineAttaqueZone"] != self.modeParam["point2AttaqueZone"]:
+##                    cone = self.polygoneCone(self.modeParam["origineAttaqueZone"], self.modeParam["point2AttaqueZone"])
+##                    self.modeParam["formeAttaqueZone"].setPolygon(cone)
+##                    lst = self.casesSousForme(self.modeParam["formeAttaqueZone"], True, True)
+##                    self.modeParam["listeCasesAttaqueZone"] = []
+##                    for coord in lst:
+##                        if coord != self.pionSelectionne().position:
+##                            self.modeParam["listeCasesAttaqueZone"].append(coord)
+##
+##            for coord in self.modeParam["listeCasesAttaqueZone"]:
+##                self.cases[coord].majEstCibleAttaque(True)
+##            for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
+##                self.combattants[numCombattant].estCibleAttaque(True)
+
+
+##    def validerAttaqueZone(self):
+##        """l'attaque de zone est validee"""
+##        if self.modeActif_old == "pionSelectionne" and self.modeCombat == "combatAttaqueZone":
+##            for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
+##                print("{} a lance une attaque de zone sur {}".format(self.pionSelectionne().nom, self.pionSelectionne().numero , \
+##                                                                     self.combattants[numCombattant].nom, self.combattants[numCombattant].numero))
+##        self.majModeCombat("aucun")        
+##
+##    def reinitAttaqueZone(self):
+##        if self.modeParam["formeAttaqueZone"] != None:
+##            self.modeParam["formeAttaqueZone"].prepareGeometryChange()
+##            self.removeItem(self.modeParam["formeAttaqueZone"])
+##            self.modeParam["formeAttaqueZone"] = None
+##        if self.modeParam["ligneMireAttaqueZone"] != None:
+##            self.modeParam["ligneMireAttaqueZone"].prepareGeometryChange()
+##            self.removeItem(self.modeParam["ligneMireAttaqueZone"])
+##            self.modeParam["ligneMireAttaqueZone"] = None
+##        if self.modeParam["point2AttaqueZone"] != None:
+##            self.cases[self.coordonneesAuPoint(self.modeParam["point2AttaqueZone"])].majEstCibleCurseur(False)
+##        for coord in self.modeParam["listeCasesAttaqueZone"]:
+##            self.cases[coord].majEstCibleAttaque(False)
+##        for numCombattant in self.pionsSurListeCase(self.modeParam["listeCasesAttaqueZone"]):
+##            self.combattants[numCombattant].estCibleAttaque(False)
                       
     def pionSurCase(self, coord):
         """renvoie le pion present sur la case, none sinon"""