Exemplo n.º 1
0
        static void Main3()
        {
            var walls = GetWalls(new string[] {
                "..X...X..",
                "......X..",
                ".XX...XX.",
                "..X......",
                "..X...X..",
            });
            var astar = new AStar.AStar(walls);

            astar.SetStart(new Int2(0, 4));
            astar.SetGoal(new Int2(7, 0));

            Stopwatch sw   = Stopwatch.StartNew();
            bool      isOk = astar.StepAll();

            sw.Stop();
            Console.WriteLine($"AStar Take MS: {sw.ElapsedMilliseconds}");

            foreach (var path in astar.GetPaths())
            {
                Console.WriteLine(path.Position);
            }
            Console.WriteLine(isOk);
            Console.WriteLine("Hello World!");
        }
Exemplo n.º 2
0
        public Move(IPlayer player, LegacyMap map, Point target)
        {
            Node goal   = new Node(null, target, null, map.tileTypeMap[target.X, target.Y]);
            Node start  = new Node(goal, player.Position, null, map.tileTypeMap[player.Position.X, player.Position.Y]);
            var  a      = new AStar.AStar(start, goal);
            var  status = a.Run();

            // debug show path
            Console.WriteLine("Current Goal : " + goal.Point.X + ", " + goal.Point.Y);
            Console.WriteLine("Goal node type : " + goal.tileContent.ToString());
            if (status != AStar.State.GoalFound)
            {
                path = null;
                Console.WriteLine("Cannot find path");
            }
            else
            {
                var nodes = a.GetPath();
                int size  = 0;
                foreach (var _ in nodes)
                {
                    ++size;
                }
                path = new Point[size - 1];

                int idx = 0;
                foreach (var n in nodes)
                {
                    if (idx != 0)
                    {
                        Node node = (Node)n;
                        path[idx - 1] = node.Point;
                    }
                    idx++;
                }
            }
        }