Ver código fonte

C=orrections de bugs
Ajout d'un délai avant le calcul des chemins

olinox 10 anos atrás
pai
commit
604780ddab
4 arquivos alterados com 25 adições e 22 exclusões
  1. 3 11
      lib/AEtoile.py
  2. 17 6
      lib/Actions.py
  3. 4 4
      lib/Modes.py
  4. 1 1
      lib/Plateau.py

+ 3 - 11
lib/AEtoile.py

@@ -17,7 +17,7 @@ def distanceCarree(coord1, coord2):
 def chemin(plateau, origine, cible):
     """retourne la liste des coord a traverser pour atteindre l'objectif
         se base sur la fonction estFranchissable() des cases"""
-
+    print "calcul chemin: {} -> {}".format(origine, cible)
     nO = N(origine)
     nO.parent = None
     nO.coutG = 0
@@ -29,10 +29,9 @@ def chemin(plateau, origine, cible):
     position = nO
     echec = False
     it = 0
+    
     #on continue jusqu'a tomber sur la case cible, ou jusqu'a un echec
     while position.coord != cible and not echec:
-        it += 1
-##        print "##", it, position.coord
         
         #on etudie tous les voisins de la case en cours
         for coord in plateau.cases[position.coord].voisins:
@@ -61,11 +60,9 @@ def chemin(plateau, origine, cible):
                                 nTest.parent = noeud.parent
                                 nTest.cout = noeud.cout
                                 trouve = True
-##                                print " | teste", coord, "maj", noeud.coutG**2, noeud.coutH, noeud.cout
-                            
+                                
                     if not trouve:
                         filOuvert.append(noeud)
-##                        print " | teste", coord, "ajout", noeud.coutG**2, noeud.coutH, noeud.cout
 
         #on parcourt les noeuds de la liste ouverte
         #et on cherche le meilleur noeud (le cout le plus faible)
@@ -79,7 +76,6 @@ def chemin(plateau, origine, cible):
             else:
                 if noeud.cout < meilleur.cout:
                     meilleur = noeud
-##        print " >> retenu", meilleur.coord, meilleur.cout
                 
         if meilleur:
             filFerme.append(meilleur)
@@ -93,7 +89,6 @@ def chemin(plateau, origine, cible):
         while position.coord != origine:
             chemin.insert(0, position.coord)
             position = position.parent
-##            print "retour", position.coord
             
     return chemin                    
                     
@@ -107,9 +102,6 @@ class N():
         self.coutH = 0
         self.cout = 0
 
-##    def __repr__(self):
-##        return "{} ({}+{}= {}) |".format(self.coord, self.coutG, self.coutH, self.cout)
-
     def creer(self, parent, cible, kDep):
         self.parent = parent
         self.kDep = kDep

+ 17 - 6
lib/Actions.py

@@ -4,7 +4,7 @@ from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 import regles
 import AEtoile
-import time
+import time, threading
 
 class Action(object):
     """action effectuee par un combattant sur le plateau de jeu"""
@@ -93,10 +93,9 @@ class Deplacement(Action):
         self._chemin = []
         self._cout = 0
 
-        coordInit = self.coordActeur()
-
-        self._chemin = AEtoile.chemin(self.plateau, coordInit, self._coordCible)
-
+        a = threading.Thread(None, self.filPathFinding, None, (self._coordCible,), {}) 
+        a.start()
+        
         self.afficherCibles(True)
 
     def afficherCibles(self, actif):
@@ -109,6 +108,18 @@ class Deplacement(Action):
             cout += self.plateau.cases[coord].coutDep()
         print "{}  s'est deplacé et a utilisé {} points de mouvement".format(self.acteur().txtId(), cout)
 
+    def filPathFinding(self, coord):
+        """thread qui gere le petit delai d'attente que
+            l'on observe avant de calculer le chemin"""
+        time.sleep(0.2)
+        if self._coordCible == coord:
+            self._chemin = AEtoile.chemin(self.plateau, self.coordActeur(), self._coordCible)
+            self.afficherCibles(True)
+            
+        
+
+        
+
 
 class Attaque(Action):
     """attaque pre-parametree affectee a un pion, un personnage ou une creature"""
@@ -130,7 +141,7 @@ class Cac(Attaque):
 
     def desactiver(self):
         self.afficherCibles(False)
-        super(Deplacement, self).desactiver()
+        super(Cac, self).desactiver()
 
     def valider(self):
         if self.estValide() and self._pionCible:

+ 4 - 4
lib/Modes.py

@@ -129,7 +129,7 @@ class ModeBaseCp(ModeBase):
         self.type = "cp"
 
     def clicDroit(self, event):
-        self.plateau.activerMode(Modes.StandardCp)
+        self.plateau.activerMode(StandardCp)
 
 
 class ModeBasePi(ModeBase):
@@ -139,7 +139,7 @@ class ModeBasePi(ModeBase):
         self.type = "pi"
 
     def clicDroit(self, event):
-        self.plateau.activerMode(Modes.StandardPi)
+        self.plateau.activerMode(StandardPi)
 
 ### --------------------------------------- ####
 
@@ -456,12 +456,12 @@ class PionSelectionne(ModeBasePi):
         if self._action:
             self._action.valider()        
            
-    def clicDroit(self):
+    def clicDroit(self, event):
         if self._action:
             self._action.desactiver()
             self._action = None
         else:
-            super(PionSelectionne, self).clicDroit(self)
+            super(PionSelectionne, self).clicDroit(event)
 
 
 

+ 1 - 1
lib/Plateau.py

@@ -2067,7 +2067,7 @@ class Plateau(QGraphicsScene):
                 self.majModeCombat("aucun")
             else:    
                 self.majMode("standard")
-                self.activerMode(Modes.StandardCp)
+                self.modeActif.clicDroit(event)
             event.accept()
         #event.ignore()