J'ai codé mon premier légèrement-algorithme complexe, une mise en œuvre de l' Une Étoile Pathfinding de l'algorithme. J'ai suivi certains Python.org des conseils sur la mise en œuvre des schémas d'un dictionnaire contient tous les nœuds chaque nœud est lié aussi. Maintenant, puisque c'est pour un jeu, chaque nœud est vraiment juste une tuile dans une grille de nœuds, donc comment je fais l'heuristique et ma référence à eux.
Grâce à timeit je sais que je peux exécuter cette fonction avec succès un peu plus d'une centaine de fois par seconde. C'est compréhensible ce qui me rend un peu mal à l'aise, c'est sans aucun autre jeu trucs " en cours, comme le graphisme ou le calcul de la logique de jeu. Alors, j'aimerais voir si vous pouvez augmenter la vitesse de mon algorithme, je suis complètement familier avec Cython, ou de ses parents, je ne peux pas le code d'une ligne de C.
Sans plus de la randonnée, voici mon Une Star de la fonction.
def aStar(self, graph, current, end):
openList = []
closedList = []
path = []
def retracePath(c):
path.insert(0,c)
if c.parent == None:
return
retracePath(c.parent)
openList.append(current)
while len(openList) is not 0:
current = min(openList, key=lambda inst:inst.H)
if current == end:
return retracePath(current)
openList.remove(current)
closedList.append(current)
for tile in graph[current]:
if tile not in closedList:
tile.H = (abs(end.x-tile.x)+abs(end.y-tile.y))*10
if tile not in openList:
openList.append(tile)
tile.parent = current
return path