/// <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); }
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>() }; }
public void Place(string operation) { _logger.LogDebug($"Place operation:{operation}"); var robotPosition = SplitOperationParameters(operation); if (!robotPosition.IsPlacementValid(_board)) { return; } Robot = robotPosition; IsToyPlaced = true; }
/// <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; }
/// <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; } }
/// <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); }