我编写了我的第一个稍微复杂的算法,A Star Pathfinding算法的实现。我遵循了一些关于实现图形的Python.org 建议,因此字典包含每个节点也链接的所有节点。现在,由于这一切都是为了游戏,每个节点实际上只是节点网格中的一个图块,因此我是如何制定启发式方法和偶尔引用它们的。
多亏了 timeit,我知道我可以每秒成功运行这个函数一百多次。可以理解的是,这让我有点不安,因为没有任何其他“游戏内容”,比如图形或计算游戏逻辑。所以我很想看看你们中的任何人是否可以加快我的算法,我完全不熟悉 Cython 或它的亲戚,我不能编写一行 C。
废话不多说,这是我的 A Star 函数。
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