Exemple #1
0
        private void SolveSudoku(object sender, RoutedEventArgs e)
        {
            var sudokuSolver    = new SudokuDifficulty();
            var sudokuValidator = new SudokuSolver();
            var sudokuToSolve   = new SudokuCell[9, 9];

            var counter = 0;

            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    var textBox = this.FindName("TextBox" + counter) as TextBox;
                    sudokuToSolve[row, col] = new SudokuCell(row, col);
                    if (textBox.Text != string.Empty)
                    {
                        sudokuToSolve[row, col].Value = int.Parse(textBox.Text);
                    }
                    counter++;
                }
            }

            if (lastSudokuDifficulty == 0)
            {
                MessageBox.Show("You must first generate a sudoku!");
                return;
            }

            if (!sudokuValidator.CheckIfSudokuIsValid(sudokuToSolve))
            {
                MessageBox.Show("This sudoku is not valid! Please check for errors!", "Warning");
                return;
            }

            try
            {
                sudokuToSolve = sudokuSolver.SolveSudoku(sudokuToSolve);
            }
            catch (ArgumentException)
            {
                MessageBox.Show("This sudoku is not valid! Please check for errors!", "Warning");
                return;
            }

            counter = 0;

            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    var textBox = this.FindName("TextBox" + counter) as TextBox;
                    textBox.Text      = string.Empty;
                    textBox.Text      = sudokuToSolve[row, col].Value.ToString();
                    textBox.IsEnabled = false;
                    counter++;
                }
            }
            stopWatch.Stop();
        }
Exemple #2
0
        private void CheckIfDigit(object sender, TextCompositionEventArgs e)
        {
            try
            {
                if (!char.IsDigit(e.Text, e.Text.Length - 1))
                {
                    e.Handled = true;
                    return;
                }
                else
                {
                    (sender as TextBox).Text = e.Text;
                }


                var sudokuToSolve   = new SudokuCell[9, 9];
                var sudokuValidator = new SudokuSolver();

                var counter      = 0;
                var numbersCount = 0;
                for (int row = 0; row < 9; row++)
                {
                    for (int col = 0; col < 9; col++)
                    {
                        var textBox = this.FindName("TextBox" + counter) as TextBox;
                        sudokuToSolve[row, col] = new SudokuCell(row, col);
                        if (textBox.Text != string.Empty)
                        {
                            sudokuToSolve[row, col].Value = int.Parse(textBox.Text);
                            numbersCount++;
                        }
                        counter++;
                    }
                }

                if (numbersCount == 81)
                {
                    if (!sudokuValidator.CheckIfSudokuIsValid(sudokuToSolve))
                    {
                        MessageBox.Show("This sudoku is not valid! Please check for errors!", "Warning");
                        return;
                    }
                    MessageBox.Show("Congratulations! You solved this sudoku for: " + GetTime() + "!");
                }
            }
            catch (Exception)
            {
            }
        }
Exemple #3
0
        private void CheckIfSudokuIsValid(object sender, RoutedEventArgs e)
        {
            var sudokuSolver    = new SudokuDifficulty();
            var sudokuValidator = new SudokuSolver();
            var sudokuToSolve   = new SudokuCell[9, 9];

            var counter = 0;

            for (int row = 0; row < 9; row++)
            {
                for (int col = 0; col < 9; col++)
                {
                    var textBox = this.FindName("TextBox" + counter) as TextBox;
                    sudokuToSolve[row, col] = new SudokuCell(row, col);
                    if (textBox.Text != string.Empty)
                    {
                        sudokuToSolve[row, col].Value = int.Parse(textBox.Text);
                    }
                    counter++;
                }
            }

            if (lastSudokuDifficulty == 0)
            {
                MessageBox.Show("You must first generate a sudoku!");
                return;
            }

            if (!sudokuValidator.CheckIfSudokuIsValid(sudokuToSolve))
            {
                var inputCells = new bool[9, 9];
                var sudoku     = new SudokuCell[9, 9];

                counter = 0;
                for (int row = 0; row < 9; row++)
                {
                    for (int col = 0; col < 9; col++)
                    {
                        var element = this.FindName("TextBox" + counter) as TextBox;
                        int number;
                        var isParsed = int.TryParse(element.Text, out number);
                        sudoku[row, col] = new SudokuCell(row, col);
                        if (isParsed && element.IsReadOnly == false)
                        {
                            sudoku[row, col].Value = number;
                        }
                        else
                        {
                            sudoku[row, col].Value = number;
                            inputCells[row, col]   = true;
                        }
                        counter++;
                    }
                }

                var listWithCellsWithError = sudokuSolver.GetAllCellsWithError(sudoku, inputCells);

                ColorTheCellsWithError(listWithCellsWithError);

                MessageBox.Show("You have some errors!");
                return;
            }

            try
            {
                sudokuToSolve = sudokuSolver.SolveSudoku(sudokuToSolve);
            }
            catch (ArgumentException)
            {
                var inputCells = new bool[9, 9];
                var sudoku     = new SudokuCell[9, 9];

                counter = 0;
                for (int row = 0; row < 9; row++)
                {
                    for (int col = 0; col < 9; col++)
                    {
                        var element = this.FindName("TextBox" + counter) as TextBox;
                        int number;
                        var isParsed = int.TryParse(element.Text, out number);
                        sudoku[row, col] = new SudokuCell(row, col);
                        if (isParsed && element.IsReadOnly == false)
                        {
                            sudoku[row, col].Value = number;
                        }
                        else
                        {
                            sudoku[row, col].Value = number;
                            inputCells[row, col]   = true;
                        }
                        counter++;
                    }
                }

                var listWithCellsWithError = sudokuSolver.GetAllCellsWithError(sudoku, inputCells, false);

                ColorTheCellsWithError(listWithCellsWithError);
                MessageBox.Show("You have some errors!");
                return;
            }

            MessageBox.Show("You are doing great!");
        }