public RobotCommand DoStep(IList <Robot.Common.Robot> robots, int robotToMoveIndex, Map map) { Robot.Common.Robot movingRobot = robots[robotToMoveIndex]; if ((movingRobot.Energy > 500) && (robots.Count < map.Stations.Count)) { return(new CreateNewRobotCommand()); } Position stationPosition = DistanceHelper.FindNearestFreeStation(robots[robotToMoveIndex], map, robots); if (stationPosition == null) { return(null); } if (stationPosition == movingRobot.Position) { return(new CollectEnergyCommand()); } else { return(new MoveCommand() { NewPosition = stationPosition }); } }
public static Position FindNearestFreeStation(Robot.Common.Robot movingRobot, Map map, IList <Robot.Common.Robot> robots) { EnergyStation nearest = null; int minDistance = int.MaxValue; foreach (var station in map.Stations) { if (IsStationFree(station, movingRobot, robots)) { int d = DistanceHelper.FindDistance(station.Position, movingRobot.Position); if (d < minDistance) { minDistance = d; nearest = station; } } } return(nearest == null ? null : nearest.Position); }