示例#1
0
        public static AICommand GetStrategy(IMap map, Unit unit)
        {
            var command = new AICommand();

            command.Command = AICommand.Move;
            command.Unit    = unit.Id;


            if (unit.CarryingResource)
            {
                command.Dir = MoveToBase(map, unit);
            }
            else if (map.HasResources)
            {
                command.Dir = GetDirectionToGem(map, unit);
                if (command.Dir == "None")
                {
                    command.Command = AICommand.Gather;
                    command.Dir     = AICommand.SerializeDirection(map.DirectionToAdjacentResource(unit.Location));
                }

                if (command.Dir == "no path")
                {
                    command.Dir = Explore(map, unit);
                }
            }
            else
            {
                command.Dir = Explore(map, unit);
            }


            return(command);
        }
示例#2
0
        public static string Explore(IMap map, Unit unit)
        {
            PathFinder finder = new PathFinder(map);

            if (!navDirection.ContainsKey(unit.Id))
            {
                navDirection.Add(unit.Id, AICommand.SerializeDirection(MapDirections.RandomDirection()));
            }

            var results = finder.FindPath(unit.Location, GetPointFromDir(unit.Location, navDirection[unit.Id]));

            if (results == null)
            {
                var rnd = new Random();
                if (navDirection[unit.Id] == "N" || navDirection[unit.Id] == "S")
                {
                    if (rnd.Next(0, 2) == 0)
                    {
                        navDirection[unit.Id] = "E";
                    }
                    else
                    {
                        navDirection[unit.Id] = "W";
                    }
                }
                else if (navDirection[unit.Id] == "E" || navDirection[unit.Id] == "W")
                {
                    if (rnd.Next(0, 2) == 0)
                    {
                        navDirection[unit.Id] = "N";
                    }
                    else
                    {
                        navDirection[unit.Id] = "S";
                    }
                }
            }
            else
            {
                return(Globals.directionToAdjactentPoint(unit.Location, results[0]));
            }

            return("None");
        }