示例#1
0
        public SurfacePosition Move(SurfacePosition position, SurfaceDirection direction)
        {
            if (IsLost(position, direction))
            {
                throw new RobotLostException();
            }

            var newPosition = new SurfacePosition(position.Row, position.Column);

            switch (direction)
            {
            case SurfaceDirection.Up:
                newPosition.Row++;
                break;

            case SurfaceDirection.Left:
                newPosition.Column--;
                break;

            case SurfaceDirection.Down:
                newPosition.Row--;
                break;

            case SurfaceDirection.Right:
                newPosition.Column++;
                break;

            default:
                throw new ArgumentException(nameof(direction), "Direction is not supported: " + direction);
            }

            return(newPosition);
        }
示例#2
0
 public bool IsValidPosition(SurfacePosition position)
 {
     return(position.Row >= 0 &&
            position.Column >= 0 &&
            position.Row < _rowsCount &&
            position.Column < _columnsCount);
 }
示例#3
0
        private bool IsLost(SurfacePosition position, SurfaceDirection direction)
        {
            if (position.Column == 0 && direction == SurfaceDirection.Left)
            {
                _leftColumnRobotScents[position.Row] = true;
                return(true);
            }
            else if (position.Column == _columnsCount - 1 && direction == SurfaceDirection.Right)
            {
                _rightColumnRobotScents[position.Row] = true;
                return(true);
            }
            else if (position.Row == 0 && direction == SurfaceDirection.Down)
            {
                _bottomRowRobotScents[position.Column] = true;
                return(true);
            }
            else if (position.Row == _rowsCount - 1 && direction == SurfaceDirection.Up)
            {
                _upperRowRobotScents[position.Column] = true;
                return(true);
            }

            return(false);
        }
示例#4
0
        public bool IsDeadScentMovement(SurfacePosition position, SurfaceDirection direction)
        {
            if (position.Column == 0 && direction == SurfaceDirection.Left)
            {
                return(_leftColumnRobotScents[position.Row]);
            }
            else if (position.Column == _columnsCount - 1 && direction == SurfaceDirection.Right)
            {
                return(_rightColumnRobotScents[position.Row]);
            }
            else if (position.Row == 0 && direction == SurfaceDirection.Down)
            {
                return(_bottomRowRobotScents[position.Column]);
            }
            else if (position.Row == _rowsCount - 1 && direction == SurfaceDirection.Up)
            {
                return(_upperRowRobotScents[position.Column]);
            }

            return(false);
        }