private void fillBoard(int row, int column, ref List <int>[,] triedNumbers) { List <int> possibleValuesInCell; do { if (Backtracking > 40000)//max times to run fillboard, jumps out of method { return; } _board.ClearNumber(row, column); possibleValuesInCell = new List <int>().GenerateAllPossibleValues(_board.GetBoardSize()); // list numbers depending on boardsize ((1-4),(1-6),(1-9),(1-12),(1-16)) RemoveInvalidValuesFromCell(ref possibleValuesInCell, row, column); // remove invalid numbers for the cell foreach (int triedNumber in triedNumbers[row, column]) //remove tried numbers in cell from possibleValuesInCell { possibleValuesInCell.Remove(triedNumber); } if (possibleValuesInCell.Count == 0) { triedNumbers[row, column].Clear(); int prevRow; int prevColumn; if (column == 0) { prevRow = row - 1; prevColumn = _board.GetBoardSize() - 1; } else { prevRow = row; prevColumn = column - 1; } fillBoard(prevRow, prevColumn, ref triedNumbers); } else { int randomIndex = RandomNumberGen(0, possibleValuesInCell.Count); // Choose random index int randomNumber = possibleValuesInCell.ElementAt <int>(randomIndex); // Get number in index _board.SetNumber(row, column, randomNumber, false); triedNumbers[row, column].Add(randomNumber); } Backtracking = Backtracking + 1; } while (possibleValuesInCell.Count == 0); }
public void ClearNumber(int row, int column) { if (_board != null) { _board.ClearNumber(row, column); } else { throw new GameNotStartedException(); } }