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 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); }