示例#1
0
        /// <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;
            }
        }
示例#2
0
        /// <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;
        }
示例#3
0
 public string GetDirectionString(EnumUtilities.Direction direction)
 {
     return(DirectionStr);
 }
示例#4
0
        /// <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);
        }
示例#5
0
 /// <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;
 }
示例#6
0
 /// <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;
 }