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); }
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"); }