コード例 #1
0
ファイル: AppHandler.cs プロジェクト: Mokeas/SudokuApp
 //handling correct calling of SudokuSolver and actually solving it if possible
 public void SolveSudoku()
 {
     if (sudoku.TrySolve())
     {
         sudoku.Solve();                    //Solve changes sudoku
         printer.PrintSudokuInGrid(sudoku); //printer shows sudoku to the user
     }
     else
     {
         ShowMessageBoxImpossibleSudoku(); // not possible to solve
     }
 }
コード例 #2
0
ファイル: SudokuGenerator.cs プロジェクト: Mokeas/SudokuApp
        public Sudoku GenerateNewSudoku(string difficulty)
        {
            int baseNumberToRemove = 0;

            //we change the number as we know the difficutly
            switch (difficulty)
            {
            case "easy": baseNumberToRemove = 10; break;

            case "medium": baseNumberToRemove = 20; break;

            case "hard": baseNumberToRemove = 30; break;
            }

            sudoku = new Sudoku();
            FillSudokuWithZeros();
            sudoku.Solve(); //actually fills up the whole Sudoku


            int numberToRemove = baseNumberToRemove + rnd.Next(7);
            int row            = 0;
            int column         = 0;
            int stored         = 0;

            while (numberToRemove != 0)
            {
                //getting random cell
                row    = rnd.Next(9);
                column = rnd.Next(9);
                // if the cell is not already empty
                if (!sudoku.Grid[row, column].IsEmpty())
                {
                    stored = sudoku.Grid[row, column].Num;
                    sudoku.Grid[row, column].Num = 0;
                    //if we can solve sudoku with stored number erased
                    if (!sudoku.TrySolve())
                    {
                        //we cant solve it now so put it back in
                        sudoku.Grid[row, column].Num = stored;
                        numberToRemove++;
                    }
                    //sudoku.Grid[row, column].Num = 0;
                    numberToRemove--;
                }
            }

            for (int i = 0; i < Globals.Size; i++)
            {
                for (int j = 0; j < Globals.Size; j++)
                {
                    if (sudoku.Grid[i, j].Num != 0)
                    {
                        sudoku.Grid[i, j].IsChangeable = false;
                    }
                }
            }
            return(sudoku);
        }