コード例 #1
0
    void ExpandFrontierAStar(TileNode node)
    {
        if (node == null)
        {
            return;
        }

        for (int i = 0; i < node.neighbors.Length; i++)
        {
            if (node.neighbors[i] != null && !mazeGraph.exploredNodes.Contains(node.neighbors[i]))
            {
                float distanceToNeighbor  = mazeGraph.GetManhattanDistance(node, node.neighbors[i]);
                float newDistanceTraveled = distanceToNeighbor + node.distanceTraveled;

                if (float.IsPositiveInfinity(node.neighbors[i].distanceTraveled) || newDistanceTraveled < node.neighbors[i].distanceTraveled)
                {
                    node.neighbors[i].previousNode     = node;
                    node.neighbors[i].distanceTraveled = newDistanceTraveled;
                }

                if (!mazeGraph.frontierNodes.Contains(node.neighbors[i]))
                {
                    float hScore = mazeGraph.GetManhattanDistance(node.neighbors[i], mazeGraph.goalNode); //Distance to goal
                    float gScore = node.neighbors[i].distanceTraveled;                                    //Distance to start
                    float fScore = gScore + hScore;

                    node.neighbors[i].priority = fScore;
                    mazeGraph.frontierNodes.Enqueue(node.neighbors[i]);
                }
            }
        }
    }