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); }
public Matrix(int rang, IDirectionSet2D directionSet) { this.Grid = new int[rang, rang]; this.DirectionSet = directionSet; }
public Direction2D(IDirectionSet2D directionSet) { this.directionSet = directionSet; }
public Direction2D(IDirectionSet2D directionSet, int direction) : this(directionSet) { this.Number = direction; }