示例#1
0
        /// <summary>
        /// Method to split place operation and assign values to Robot model
        /// </summary>
        /// <param name="operation"></param>
        /// <returns></returns>
        private Common.Robot SplitOperationParameters(string operation)
        {
            var operationParameters = operation.Split(' ', ',');

            if (operationParameters.Length != 4)
            {
                throw new CommandException($"Error command:{operation}");
            }
            var isValidXCoordinate = int.TryParse(operationParameters[1], out var x);
            var isValidYCoordinate = int.TryParse(operationParameters[2], out var y);

            if (!isValidXCoordinate || !isValidYCoordinate)
            {
                throw new CommandException($"Error command:{operation}");
            }
            var direction         = operationParameters[3];
            var tempRobotPosition = new Common.Robot
            {
                Coordinate = new Position <int>
                {
                    X = x,
                    Y = y
                },
                Direction = Enum.Parse <FacingDirection>(direction, true)
            };

            return(tempRobotPosition);
        }
示例#2
0
 public ToyOperations(ILogger <ToyOperations> logger, IRobotCommands robotCommands, IOptions <ToyRobotSettings> settings)
 {
     _logger        = logger;
     _robotCommands = robotCommands;
     _settings      = settings.Value;
     _board         = _settings.Board;
     Robot          = new Common.Robot
     {
         Coordinate = new Position <int>()
     };
 }
示例#3
0
        public void Place(string operation)
        {
            _logger.LogDebug($"Place operation:{operation}");
            var robotPosition = SplitOperationParameters(operation);

            if (!robotPosition.IsPlacementValid(_board))
            {
                return;
            }
            Robot       = robotPosition;
            IsToyPlaced = true;
        }
示例#4
0
        /// <summary>
        /// Method to execute move command
        /// </summary>
        /// <param name="robot"></param>
        /// <param name="board"></param>
        public void ExecuteMoveCommand(Common.Robot robot, TableTop board)
        {
            var tempRobot = new Common.Robot()
            {
                Coordinate = new Position <int>
                {
                    X = robot.Coordinate.X,
                    Y = robot.Coordinate.Y
                },
                Direction = robot.Direction
            };

            switch (tempRobot.Direction)
            {
            case FacingDirection.North:
                tempRobot.Coordinate.Y += 1;
                break;

            case FacingDirection.East:
                tempRobot.Coordinate.X += 1;
                break;

            case FacingDirection.South:
                tempRobot.Coordinate.Y -= 1;
                break;

            case FacingDirection.West:
                tempRobot.Coordinate.X -= 1;
                break;

            default:
                return;
            }

            if (!tempRobot.IsPlacementValid(board))
            {
                return;
            }
            robot.Coordinate.X = tempRobot.Coordinate.X;
            robot.Coordinate.Y = tempRobot.Coordinate.Y;
            robot.Direction    = tempRobot.Direction;
        }
示例#5
0
        /// <summary>
        /// Method to turn the robot right by 90 degrees
        /// </summary>
        /// <param name="robot"></param>
        public void ExecuteTurnRightCommand(Common.Robot robot)
        {
            switch (robot.Direction)
            {
            case FacingDirection.North:
                robot.Direction = FacingDirection.East;
                break;

            case FacingDirection.East:
                robot.Direction = FacingDirection.South;
                break;

            case FacingDirection.South:
                robot.Direction = FacingDirection.West;
                break;

            case FacingDirection.West:
                robot.Direction = FacingDirection.North;
                break;

            default:
                return;
            }
        }
示例#6
0
        /// <summary>
        /// Method to print the position and direction the robot is facing
        /// </summary>
        /// <param name="robot"></param>
        /// <returns></returns>
        public string ExecuteReportCommand(Common.Robot robot)
        {
            var report = $"{robot.Coordinate.X},{robot.Coordinate.Y},{robot.Direction.ToString()?.ToUpper()}";

            return(report);
        }