Пример #1
0
        public static int WalkMatrixPath(Matrix matrix, int indexX, int indexY, int startStep)
        {
            IDirectionSet2D matrixDirectionSet = matrix.DirectionSet;
            Direction2D     direction2D        = new Direction2D(matrixDirectionSet);

            matrix[indexX, indexY] = startStep;
            var walkLenght = 1;

            while (matrix.IsChangeDirectionPossible(indexX, indexY))
            {
                int deltaX;
                int deltaY;
                direction2D.GetDelta(out deltaX, out deltaY);
                while (!matrix.IsValidEmptyCell(indexX + deltaX, indexY + deltaY))
                {
                    direction2D.Increase();
                    direction2D.GetDelta(out deltaX, out deltaY);
                }

                indexX += deltaX;
                indexY += deltaY;

                matrix[indexX, indexY] = startStep + walkLenght;
                walkLenght++;
            }

            return(walkLenght);
        }
Пример #2
0
        public bool IsChangeDirectionPossible(int indexX, int indexY)
        {
            Direction2D direction = new Direction2D(this.DirectionSet);

            for (int i = 0; i < 8; i++)
            {
                int deltaX;
                int deltaY;
                direction.GetDelta(out deltaX, out deltaY);

                if (this.IsValidEmptyCell(indexX + deltaX, indexY + deltaY))
                {
                    return(true);
                }

                direction.Increase();
            }

            return(false);
        }