Пример #1
0
 def dijkstra_on_map(state, source_x, source_y):
     unvisited_tiles = queue.PriorityQueue()
     if state.dijkstra_map_update:
         state.dijkstra_map = [[sys.maxint for col in range(len(state.game_map.game_map[0]))] for row in range(len(state.game_map.game_map))]
         state.dijkstra_map_update = False
     for row in state.game_map.game_map:
         for tile in row:
             if tile.x == source_x and tile.y == source_y:
                 state.dijkstra_map[source_x][source_y] = 0
                 unvisited_tiles.put((0, (tile.x, tile.y)))
             elif tile.blocked:
                 continue
             else:
                 unvisited_tiles.put((sys.maxint, (tile.x, tile.y)))
     while not unvisited_tiles.empty():
         closest_dist, closest_tile = unvisited_tiles.get()
         closest_neighbors = Util.get_adjacent_tiles(state, closest_tile[0], closest_tile[1])
         for neighbor in closest_neighbors:
             if not neighbor.blocked:
                 temp_dist = closest_dist + 1
                 if temp_dist < state.dijkstra_map[neighbor.x][neighbor.y]:
                     state.dijkstra_map[neighbor.x][neighbor.y] = temp_dist
                     unvisited_tiles.put((temp_dist, (neighbor.x, neighbor.y)))
                     neighbor.dist_from_player = temp_dist