private static int GetNewDirection(PositionInMatrix position, int currrentDir) { while (!CanGoInThisDirection(position, currrentDir)) { currrentDir = (currrentDir == 7) ? 0 : currrentDir + 1; } return currrentDir; }
private static bool CanGoInThisDirection(PositionInMatrix position, int currentDir) { int nextRow = position.CurrenRow + directionsRow[currentDir]; int nextCol = position.CurrentCol + directionsCol[currentDir]; var result = IsInsideMatrix(nextRow, nextCol) && matrix[nextRow, nextCol] == 0; return result; }
private static bool IsNextToEmptyCell(PositionInMatrix position) { int row; int col; for (int i = 0; i < directionsRow.Length; i++) { row = position.CurrenRow + directionsRow[i]; col = position.CurrentCol + directionsCol[i]; if (IsInsideMatrix(row, col) && matrix[row, col] == 0) { return true; } } return false; }
private static bool TryGetEmptyCell(PositionInMatrix position) { for (int row = 0; row < matrix.GetLength(0); row++) { for (int col = 0; col < matrix.GetLength(1); col++) { if (matrix[row, col] == 0) { position.CurrenRow = row; position.CurrentCol = col; return true; } } } position.CurrenRow = 0; position.CurrentCol = 0; return false; }