Я закодировал свой первый слегка сложный алгоритм, реализацию алгоритма Star Pathfinding. Я последовал за советом Python.org по внедрению графов, поэтому словарь содержит все узлы, каждый из которых связан с node. Теперь, поскольку это все для игры, каждый node на самом деле является просто черепицей в сетке узлов, поэтому я разрабатываю эвристику и мою случайную ссылку на них.
Благодаря 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