/// <summary> /// Difficulty: /// 0 - Easy /// 1 - Medium /// 2 - Hard /// 3 - Expert /// </summary> /// <param name="difficulty"></param> public void Generate(int difficulty) { bool maxBacktacking; do { maxBacktacking = false; Backtracking = 0; _board.Clear(); List <int>[,] triedNumbers = new List <int> [_board.GetBoardSize(), _board.GetBoardSize()]; for (int i = 0; i < _board.GetBoardSize(); i++) { for (int j = 0; j < _board.GetBoardSize(); j++) { if (Backtracking > 40000) { maxBacktacking = true; break; } triedNumbers[i, j] = new List <int>(); fillBoard(i, j, ref triedNumbers); } if (maxBacktacking) { break; } } Console.WriteLine("Backtracking iterations: {0}", Backtracking); } while (maxBacktacking); switch (_board.GetBoardSize()) //cells to clear depending on boardsize { case 4: remove(4, 6, 8, 10, difficulty); break; case 6: remove(12, 18, 24, 30, difficulty); break; case 9: remove(13, 30, 47, 64, difficulty); break; case 12: remove(40, 60, 80, 100, difficulty); break; case 16: remove(50, 75, 100, 150, difficulty); break; } _board.ConvertExistingNumbersToPredefined(); //set remaining numbers as predefined }
// Locks the current numbers and makes them predefined public void LockNumbers() { if (_board != null) { if (Validator.ValidateBoard(_board)) { _board.ConvertExistingNumbersToPredefined(); } else { throw new InvalidBoardException(); } } else { throw new GameNotStartedException(); } }