コード例 #1
0
        public static Tuple <RobotConstructionStatus, IRobotCleaner> GetRobot(RobotParametersDto parameters)
        {
            Orientations.InitializeOrientations();
            //Create a validator in order to do basic verifications
            IRobotCleanerValidator validator = new RobotCleanerValidator();
            var result = Tuple.Create <RobotConstructionStatus, IRobotCleaner>(RobotConstructionStatus.Error, null);

            //if the parameters given are not valid, it will return null with the enum value in Error.
            if (!validator.IsRobotValid(parameters) || !validator.IsMapValid(parameters))
            {
                return(result);
            }

            //Here the dependencies are created and injected in the robot object.
            var                currentPosition   = new CurrentPosition(GetAxis(parameters.Start["X"]), GetAxis(parameters.Start["Y"]));
            IMap               map               = new Map(parameters.Map, currentPosition);
            IReturnAlgorithm   returnAlgorithm   = new ReturnAlgorithm(new FirstStep());
            ICleaningAlgorithm cleaningAlgorithm = new CleaningAlgorithm(parameters.Commands);
            var                movingStrategies  = Orientations.GetMovingStrategies();

            result = Tuple.Create <RobotConstructionStatus, IRobotCleaner>(RobotConstructionStatus.Success,
                                                                           new Implementations.RobotCleaner(currentPosition.X,
                                                                                                            currentPosition.Y,
                                                                                                            Orientations.GetFacingPosition(parameters.Start["facing"]),
                                                                                                            parameters.Battery, map, returnAlgorithm, movingStrategies, cleaningAlgorithm));


            return(result);
        }
コード例 #2
0
        public bool IsRobotValid(RobotParametersDto robotParameters)
        {
            var axisValid        = false;
            var orientationValid = false;
            var batteryValid     = false;

            try
            {
                axisValid        = ValidateAxis(robotParameters.Start);
                orientationValid = ValidateOrientation(robotParameters.Start);
                batteryValid     = ValidateBatteryValue(robotParameters);
            }
            catch (Exception)
            {
                return(false);
            }

            return(axisValid && orientationValid && batteryValid);
        }
コード例 #3
0
 public bool IsMapValid(RobotParametersDto robotParameters)
 {
     return(robotParameters.Map.Length > 0);
 }
コード例 #4
0
 private bool ValidateBatteryValue(RobotParametersDto robotParameters)
 {
     return(robotParameters.Battery > 0);
 }