示例#1
0
 /// <summary>
 /// Prints the solution
 /// </summary>
 /// <param name="ASolution">The list that holds the solution</param>
 static public void PrintSolution(ArrayList ASolution)
 {
     for (int j = 0; j < 10; j++)
     {
         for (int i = 0; i < 10; i++)
         {
             bool solution = false;
             foreach (AStarNode2D n in ASolution)
             {
                 AStarNode2D tmp = new AStarNode2D(null, null, 0, i, j);
                 solution = n.IsSameState(tmp);
                 if (solution)
                 {
                     break;
                 }
             }
             if (solution)
             {
                 Console.Write("S ");
             }
             else
             if (MainClass.GetMap(i, j) == -1)
             {
                 Console.Write("X ");
             }
             else
             {
                 Console.Write(". ");
             }
         }
         Console.WriteLine("");
     }
 }
示例#2
0
 /// <summary>
 /// Prints the solution
 /// </summary>
 /// <param name="ASolution">The list that holds the solution</param>
 static public void PrintSolution(ArrayList ASolution)
 {
     for (int j = 0; j < 10; j++)
     {
         for (int i = 0; i < 10; i++)
         {
             bool solution = false;
             foreach (AStarNode2D n in ASolution)
             {
                 AStarNode2D tmp = new AStarNode2D(null, null, 0, i, j);
                 solution = n.IsSameState(tmp);
                 if (solution)
                     break;
             }
             if (solution)
                 Console.Write("S ");
             else
                 if (MainClass.GetMap(i, j) == -1)
                     Console.Write("X ");
                 else
                     Console.Write(". ");
         }
         Console.WriteLine("");
     }
 }
示例#3
0
 /// <summary>
 /// Adds a successor to a list if it is not impassible or the parent node
 /// </summary>
 /// <param name="ASuccessors">List of successors</param>
 /// <param name="AX">X-coordinate</param>
 /// <param name="AY">Y-coordinate</param>
 private void AddSuccessor(ArrayList ASuccessors, int AX, int AY)
 {
     int CurrentCost = StartPath.GetMap(AX, AY);
     if (CurrentCost == -1)
     {
         return;
     }
     AStarNode2D NewNode = new AStarNode2D(this, GoalNode, Cost + CurrentCost, AX, AY);
     if (NewNode.IsSameState(Parent))
     {
         return;
     }
     ASuccessors.Add(NewNode);
 }
示例#4
0
        static void Main(string[] args)
        {
            Console.WriteLine("Starting...");

            Games.Pathfinding.AStar astar = new Games.Pathfinding.AStar();

            AStarNode2D GoalNode  = new AStarNode2D(null, null, 0, 9, 9);
            AStarNode2D StartNode = new AStarNode2D(null, GoalNode, 0, 0, 0);

            StartNode.GoalNode = GoalNode;
            astar.FindPath(StartNode, GoalNode);

            PrintSolution(astar.Solution);
            Console.ReadLine();
        }
示例#5
0
        /// <summary>
        ///     Adds a successor to a list if it is not impassible or the parent node
        /// </summary>
        /// <param name="ASuccessors">List of successors</param>
        /// <param name="AX">X-coordinate</param>
        /// <param name="AY">Y-coordinate</param>
        private void AddSuccessor(ArrayList ASuccessors, int AX, int AY)
        {
            int CurrentCost = StartPath.GetMap(AX, AY);

            if (CurrentCost == -1)
            {
                return;
            }
            AStarNode2D NewNode = new AStarNode2D(this, GoalNode, Cost + CurrentCost, AX, AY);

            if (NewNode.IsSameState(Parent))
            {
                return;
            }
            ASuccessors.Add(NewNode);
        }
示例#6
0
        /// <summary>
        /// Prints the solution
        /// </summary>
        /// <param name="ASolution">The list that holds the solution</param>

        static public List <Coordonnee> PrintSolution(ArrayList ASolution)
        {
            List <Coordonnee> liste = new List <Coordonnee>();

            ConsoleManager.Show();
            Console.WriteLine(Map.GetLength(0));
            ConsoleManager.Show();

            for (int j = 0; j < Map.GetLength(0); j++)
            {
                for (int i = 0; i < Map.GetLength(1); i++)
                {
                    bool solution = false;
                    foreach (AStarNode2D n in ASolution)
                    {
                        AStarNode2D tmp = new AStarNode2D(Map, null, null, 0, i, j);
                        solution = n.IsSameState(tmp);
                        if (solution)
                        {
                            break;
                        }
                    }
                    if (solution)
                    {
                        ConsoleManager.Show();
                        Console.Write("o ");
                        Coordonnee c = new Coordonnee(i, j);
                        liste.Add(c);
                    } //montre le chemin


                    else
                    if (MainClass.GetMap(i, j) == -1)
                    {// si le noeud est occupé
                        ConsoleManager.Show();
                        Console.Write("X ");
                    }
                    else
                    {
                        ConsoleManager.Show();
                        Console.Write(". ");
                    }// le reste libre
                }
                Console.WriteLine("");
            }
            return(liste);
        }
示例#7
0
        public static List <string> Path(int startx, int starty, int endx, int endy, int endz, int csx, int csy)
        {
            // Here is where we come in from BotMe with our start and end points from the world
            AStar astar = new AStar();

            AStarNode2D GoalNode  = new AStarNode2D(null, null, 0, endx, endy);
            AStarNode2D StartNode = new AStarNode2D(null, GoalNode, 0, startx, starty)
            {
                GoalNode = GoalNode
            };

            // Prepare the final List that will become the waypoints for him to leaf through
            List <string> botPoint = new List <string>();


            // Go get the solution
            astar.FindPath(StartNode, GoalNode);

            // First check if the path was possible
            bool pathDone = astar.pathPossible;

            if (pathDone == false)
            {
                //Use botPoint List as a flag to break out of this. Return to Botme
                botPoint.Add("no_path");
                return(botPoint);
            }

            // Slope calculation data
            int slope     = 99;     // Use 99 here to mean the slope has never been calculated yet
            int lastSlope = 99;
            int X1        = startx; //startx
            int Y1        = starty; //starty
            int Z         = endz;
            //startz - we need this to make a vector but will override with current z in Botme enabling him to walk up hills

            int xtemp = 0;
            int ytemp = 0;


            // This gets the solution from Astar.cs and runs it through PrintInfo which has the xyz of each path node - our Node solution
            ArrayList Nodes = new ArrayList(astar.Solution);

            foreach (AStarNode nn in Nodes)
            {
                AStarNode2D n = (AStarNode2D)nn;
                // Return x and y from printinfo
                int[] XYreturn = new int[2];
                XYreturn = n.PrintNodeInfo();
                int X2 = XYreturn[0];
                int Y2 = XYreturn[1];

                // Here I calculate point only where the line changes direction
                // In this way the bot doesn't start and stop each step
                // Since it has been determined that the path is clear between these points this will work
                // You can see the trouble with moving objects here though - he will have to constantly check on the way to these points
                // To detect scene changes.
                slope = calcSlope(Y2, Y1, X2, X1);

                if (lastSlope != slope)
                {
                    // Build the list of waypoints only where changes of slope occur
                    xtemp = X1 + csx; //conerStone x and y from our map to get these into sim coordinates
                    ytemp = Y1 + csy;
                    string temp = xtemp.ToString() + "," + ytemp.ToString() + "," + Z.ToString();
                    botPoint.Add(temp);
                }
                X1        = X2;
                Y1        = Y2;
                lastSlope = slope;
            }
            // This adds the last point to the step
            xtemp = X1 + csx;
            ytemp = Y1 + csy;
            string temp2 = xtemp.ToString() + "," + ytemp.ToString() + "," + Z.ToString();

            botPoint.Add(temp2);
            // This removes the first point of the steps so they turn and go right to the first bend point(slope)
            botPoint.RemoveRange(0, 1);
            // Let em have it - return to Botme path with slopes only no start point but with end point always
            return(botPoint);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Starting...");

            Games.Pathfinding.AStar astar = new Games.Pathfinding.AStar();

            AStarNode2D GoalNode = new AStarNode2D(null, null, 0, 9, 9);
            AStarNode2D StartNode = new AStarNode2D(null, GoalNode, 0, 0, 0);
            StartNode.GoalNode = GoalNode;
            astar.FindPath(StartNode, GoalNode);

            PrintSolution(astar.Solution);
            Console.ReadLine();
        }
示例#9
0
        public static List<string> Path(int startx, int starty, int endx, int endy, int endz, int csx, int csy)
        {
            // Here is where we come in from BotMe with our start and end points from the world
            AStar astar = new AStar();

            AStarNode2D GoalNode = new AStarNode2D(null, null, 0, endx, endy);
            AStarNode2D StartNode = new AStarNode2D(null, GoalNode, 0, startx, starty) {GoalNode = GoalNode};

            // Prepare the final List that will become the waypoints for him to leaf through
            List<string> botPoint = new List<string>();

            // Go get the solution
            astar.FindPath(StartNode, GoalNode);

            // First check if the path was possible
            bool pathDone = astar.pathPossible;
            if (pathDone == false)
            {
                //Use botPoint List as a flag to break out of this. Return to Botme
                botPoint.Add("no_path");
                return botPoint;
            }

            // Slope calculation data
            int slope = 99; // Use 99 here to mean the slope has never been calculated yet
            int lastSlope = 99;
            int X1 = startx; //startx
            int Y1 = starty; //starty
            int Z = endz;
            //startz - we need this to make a vector but will override with current z in Botme enabling him to walk up hills

            int xtemp = 0;
            int ytemp = 0;

            // This gets the solution from Astar.cs and runs it through PrintInfo which has the xyz of each path node - our Node solution
            ArrayList Nodes = new ArrayList(astar.Solution);
            foreach (AStarNode nn in Nodes)
            {
                AStarNode2D n = (AStarNode2D) nn;
                // Return x and y from printinfo
                int[] XYreturn = new int[2];
                XYreturn = n.PrintNodeInfo();
                int X2 = XYreturn[0];
                int Y2 = XYreturn[1];

                // Here I calculate point only where the line changes direction
                // In this way the bot doesn't start and stop each step
                // Since it has been determined that the path is clear between these points this will work
                // You can see the trouble with moving objects here though - he will have to constantly check on the way to these points
                // To detect scene changes.
                slope = calcSlope(Y2, Y1, X2, X1);

                if (lastSlope != slope)
                {
                    // Build the list of waypoints only where changes of slope occur
                    xtemp = X1 + csx; //conerStone x and y from our map to get these into sim coordinates
                    ytemp = Y1 + csy;
                    string temp = xtemp.ToString() + "," + ytemp.ToString() + "," + Z.ToString();
                    botPoint.Add(temp);
                }
                X1 = X2;
                Y1 = Y2;
                lastSlope = slope;
            }
            // This adds the last point to the step
            xtemp = X1 + csx;
            ytemp = Y1 + csy;
            string temp2 = xtemp.ToString() + "," + ytemp.ToString() + "," + Z.ToString();
            botPoint.Add(temp2);
            // This removes the first point of the steps so they turn and go right to the first bend point(slope)
            botPoint.RemoveRange(0, 1);
            // Let em have it - return to Botme path with slopes only no start point but with end point always
            return botPoint;
        }