Ejemplo n.º 1
0
        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
                });
            }
        }
Ejemplo n.º 2
0
        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);
        }