/// <summary> /// Move forward /// </summary> /// <param name="direction">New direction</param> /// <param name="x">x to modify if needed</param> /// <param name="y">y to modify if needed</param> private void Move(EnumUtilities.Direction direction, ref long x, ref long y) { long res = 0; switch (direction) { case EnumUtilities.Direction.E: res = x + Constants.PAD_X; if (res <= _maximum_x) { x += Constants.PAD_X; } break; case EnumUtilities.Direction.O: res = x - Constants.PAD_X; if (res >= 0) { x -= Constants.PAD_X; } break; case EnumUtilities.Direction.N: res = y + Constants.PAD_Y; if (res <= _maximum_y) { y += Constants.PAD_Y; } break; case EnumUtilities.Direction.S: res = y - Constants.PAD_Y; if (res >= 0) { y -= Constants.PAD_Y; } break; } }
/// <summary> /// Change the direction of the rover /// </summary> /// <param name="move">Move</param> /// <param name="direction">New direction to take in account</param> /// <param name="finalNewDirection">Final new direction</param> private void ChangeDirection(EnumUtilities.Direction move, EnumUtilities.Direction direction, ref EnumUtilities.Direction finalNewDirection) { var newDirection = direction; switch (direction) { case EnumUtilities.Direction.N: newDirection = move == EnumUtilities.Direction.L ? EnumUtilities.Direction.O : EnumUtilities.Direction.E; break; case EnumUtilities.Direction.E: newDirection = move == EnumUtilities.Direction.L ? EnumUtilities.Direction.N : EnumUtilities.Direction.S; break; case EnumUtilities.Direction.O: newDirection = move == EnumUtilities.Direction.L ? EnumUtilities.Direction.S : EnumUtilities.Direction.N; break; case EnumUtilities.Direction.S: newDirection = move == EnumUtilities.Direction.L ? EnumUtilities.Direction.E : EnumUtilities.Direction.O; break; } finalNewDirection = newDirection; }
public string GetDirectionString(EnumUtilities.Direction direction) { return(DirectionStr); }
/// <summary> /// Start the rover /// </summary> /// <param name="max_size_x">The rover can not go further than max_size_x in x axe</param> /// <param name="map_size_y">The rover can not go further than max_size_y in y axe</param> /// <param name="position">Initial position</param> /// <param name="movement">New movements</param> /// <returns>True if rover is started, false otherwise</returns> public bool StartRover(int max_size_x, int map_size_y, string position, string movement) { var byteUtilities = _container.Resolve <IByteUtilities>(); if (byteUtilities == null) { return(false); } if (max_size_x < 1 || map_size_y < 1) { return(false); } if (string.IsNullOrEmpty(position) || string.IsNullOrEmpty(movement)) { return(false); } var enumUtilities = _container.Resolve <IEnumUtilities>(); if (enumUtilities == null) { return(false); } var list = position.Split(' '); if (list.Length == 0 || list.Length != 3) { return(false); } _maximum_x = max_size_x; _maximum_y = map_size_y; if (int.TryParse(list[0], out int x)) { _initial_position_x = x; } if (int.TryParse(list[1], out int y)) { _initial_position_y = y; } try { // ToCharArray can throw exception _initial_direction = enumUtilities.GetDirection(list[2].ToCharArray()[0]); if (_initial_direction == EnumUtilities.Direction.WRONG) { ReleaseMemory(); return(false); } } catch (Exception e) { var exception = e; ReleaseMemory(); return(false); } var charsToTrim = new char[] { ' ', '\t' }; _movements = movement.Trim(charsToTrim).ToCharArray(); if (!IsRoverReadyToDrive()) { ReleaseMemory(); return(false); } return(true); }
/// <summary> /// Set the final attributes /// </summary> /// <param name="x">New x position</param> /// <param name="y">New y position</param> /// <param name="direction">New direction</param> private void SetFinalAttributes(long x, long y, EnumUtilities.Direction direction) { _final_position_x = x; _final_position_y = y; _final_direction = direction; }
/// <summary> /// Set the initial attributes /// </summary> /// <param name="x">New x position</param> /// <param name="y">New y position</param> /// <param name="direction">New direction</param> private void SetInitialAttributes(int x, int y, EnumUtilities.Direction direction) { _initial_position_x = x; _initial_position_y = y; _initial_direction = direction; }