私は最初の少し複雑なアルゴリズム、AStarPathfindingアルゴリズムの実装をコーディングしました。グラフの実装に関するPython.orgのアドバイスに従って、各ノードがリンクされているすべてのノードが辞書に含まれるようにしました。さて、これはすべてゲームのためのものなので、各ノードは実際にはノードのグリッド内の単なるタイルです。したがって、ヒューリスティックとそれらへの時折の参照をどのように作成しているか。
timeitのおかげで、この関数を1秒間に100回強実行できることがわかりました。当然のことながら、これは私を少し不安にさせます。これは、グラフィックスやゲームロジックの計算など、他の「ゲーム関連」が行われていないことです。ですから、誰かが私のアルゴリズムを高速化できるかどうかを確認したいと思います。私はCythonに完全に慣れていないか、それと同類であり、Cの行をコーディングできません。
これ以上とりとめのない、これが私のAStar関数です。
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