Example #1
0
        public Circuit(int matrixI, int matrixJ, int matrixSize, CircuitDirection direction)
        {
            _matrixI    = matrixI;
            _matrixJ    = matrixJ;
            _matrixSize = matrixSize;
            _direction  = direction;

            I = matrixI;
            J = matrixJ;
            FillCircuit();
        }
Example #2
0
        private CircuitDirection InvertDirection(CircuitDirection direction)
        {
            switch (direction)
            {
            case CircuitDirection.Clockwise:
                return(CircuitDirection.CounterClockwise);

            case CircuitDirection.CounterClockwise:
                return(CircuitDirection.CounterClockwise);

            default:
                throw new ArgumentOutOfRangeException(nameof(direction), direction, null);
            }
        }
Example #3
0
        private void MoveInDirection(CircuitDirection direction)
        {
            switch (direction)
            {
            case CircuitDirection.CounterClockwise:
                // 2
                if (0 < I && J == _matrixSize - 1)
                {
                    I--;
                    return;
                }

                // 3
                if (I == 0 && Math.Max(_matrixJ - _matrixI, 0) < J)
                {
                    J--;
                    return;
                }

                // 4
                if (J == 0 && I < Math.Max(_matrixI - _matrixJ, 0))
                {
                    I++;
                    return;
                }

                // 1
                if (_matrixJ <= J)
                {
                    I--;
                    J++;
                    return;
                }

                // 5
                I++;
                J++;
                break;

            case CircuitDirection.Clockwise:


                // 4
                if (J == 0 && 0 < I)
                {
                    I--;
                    return;
                }

                // 3
                if (I == 0 && J < Math.Min(_matrixI + _matrixJ, _matrixSize - 1))
                {
                    J++;
                    return;
                }

                // 2
                //if (J == _matrixSize - 1 && I < _matrixSize - 1 - Math.Max(_matrixSize - _matrixI, _matrixSize - _matrixJ))
                if (J == _matrixSize - 1 && I <= _matrixI - (_matrixSize - _matrixJ))
                {
                    I++;
                    return;
                }

                // 1
                if (I < _matrixI && _matrixJ < J)
                {
                    I++;
                    J--;
                    return;
                }

                // 5
                //if (0 < J && Math.Max(_matrixI - _matrixJ, 0) < I && J != _matrixSize - 1)
                if (0 < J && Math.Max(_matrixI - _matrixJ, 0) < I)
                {
                    I--;
                    J--;
                    //return;
                }
                break;
            }
        }