private RobotPosition EstimateInstructionMovement(RobotPosition currentPosition) { RobotPosition estimatedPosition = currentPosition.Clone(); switch (currentPosition.RobotOrientation) { case Enums.OrientationTypes.N: estimatedPosition.PositionCoordinates.Y_Coordinate++; break; case Enums.OrientationTypes.S: estimatedPosition.PositionCoordinates.Y_Coordinate--; break; case Enums.OrientationTypes.E: estimatedPosition.PositionCoordinates.X_Coordinate++; break; case Enums.OrientationTypes.W: estimatedPosition.PositionCoordinates.X_Coordinate--; break; } return(estimatedPosition); }
public RobotPosition Clone() { RobotPosition robotPosition = (RobotPosition)this.MemberwiseClone(); robotPosition.PositionCoordinates = robotPosition.PositionCoordinates.Clone(); return(robotPosition); }
/// <summary> /// Checks if movement resulting position is inside of grid limits /// </summary> /// <param name="estimatedPosition"></param> /// <param name="grid"></param> /// <returns></returns> private bool CheckValidPosition(RobotPosition estimatedPosition, Grid grid) { bool validMovement = false; if (estimatedPosition.PositionCoordinates.X_Coordinate <= grid.GridLimit.X_Coordinate && estimatedPosition.PositionCoordinates.X_Coordinate >= grid.GridOrigen.X_Coordinate && estimatedPosition.PositionCoordinates.Y_Coordinate <= grid.GridLimit.Y_Coordinate && estimatedPosition.PositionCoordinates.Y_Coordinate >= grid.GridOrigen.Y_Coordinate) { validMovement = true; } return(validMovement); }
/// <summary> /// Performs a forward movement if it´s feasible /// </summary> /// <param name="robot"></param> /// <param name="grid"></param> /// <returns></returns> public bool TryPerformInstructionMovement(Robot robot, Grid grid) { bool feasibleInstructionMovement = false; RobotPosition estimatedPosition = EstimateInstructionMovement(robot.LastValidPosition); if (CheckValidPosition(estimatedPosition, grid)) { robot.LastValidPosition = estimatedPosition; feasibleInstructionMovement = true; } return(feasibleInstructionMovement); }
public Robot() { LastValidPosition = new RobotPosition(); InstructionsSet = new List <IInstruction>(); }