private void button_Click(object sender, RoutedEventArgs e) { Sudoku s = new Sudoku(); int result; if (int.TryParse(tb00.Text, out result)) { s.SetNum(0, 0, result); } if (int.TryParse(tb01.Text, out result)) { s.SetNum(0, 1, result); } if (int.TryParse(tb02.Text, out result)) { s.SetNum(0, 2, result); } if (int.TryParse(tb03.Text, out result)) { s.SetNum(0, 3, result); } if (int.TryParse(tb04.Text, out result)) { s.SetNum(0, 4, result); } if (int.TryParse(tb05.Text, out result)) { s.SetNum(0, 5, result); } if (int.TryParse(tb06.Text, out result)) { s.SetNum(0, 6, result); } if (int.TryParse(tb07.Text, out result)) { s.SetNum(0, 7, result); } if (int.TryParse(tb08.Text, out result)) { s.SetNum(0, 8, result); } if (int.TryParse(tb10.Text, out result)) { s.SetNum(1, 0, result); } if (int.TryParse(tb11.Text, out result)) { s.SetNum(1, 1, result); } if (int.TryParse(tb12.Text, out result)) { s.SetNum(1, 2, result); } if (int.TryParse(tb13.Text, out result)) { s.SetNum(1, 3, result); } if (int.TryParse(tb14.Text, out result)) { s.SetNum(1, 4, result); } if (int.TryParse(tb15.Text, out result)) { s.SetNum(1, 5, result); } if (int.TryParse(tb16.Text, out result)) { s.SetNum(1, 6, result); } if (int.TryParse(tb17.Text, out result)) { s.SetNum(1, 7, result); } if (int.TryParse(tb18.Text, out result)) { s.SetNum(1, 8, result); } if (int.TryParse(tb20.Text, out result)) { s.SetNum(2, 0, result); } if (int.TryParse(tb21.Text, out result)) { s.SetNum(2, 1, result); } if (int.TryParse(tb22.Text, out result)) { s.SetNum(2, 2, result); } if (int.TryParse(tb23.Text, out result)) { s.SetNum(2, 3, result); } if (int.TryParse(tb24.Text, out result)) { s.SetNum(2, 4, result); } if (int.TryParse(tb25.Text, out result)) { s.SetNum(2, 5, result); } if (int.TryParse(tb26.Text, out result)) { s.SetNum(2, 6, result); } if (int.TryParse(tb27.Text, out result)) { s.SetNum(2, 7, result); } if (int.TryParse(tb28.Text, out result)) { s.SetNum(2, 8, result); } if (int.TryParse(tb30.Text, out result)) { s.SetNum(3, 0, result); } if (int.TryParse(tb31.Text, out result)) { s.SetNum(3, 1, result); } if (int.TryParse(tb32.Text, out result)) { s.SetNum(3, 2, result); } if (int.TryParse(tb33.Text, out result)) { s.SetNum(3, 3, result); } if (int.TryParse(tb34.Text, out result)) { s.SetNum(3, 4, result); } if (int.TryParse(tb35.Text, out result)) { s.SetNum(3, 5, result); } if (int.TryParse(tb36.Text, out result)) { s.SetNum(3, 6, result); } if (int.TryParse(tb37.Text, out result)) { s.SetNum(3, 7, result); } if (int.TryParse(tb38.Text, out result)) { s.SetNum(3, 8, result); } if (int.TryParse(tb40.Text, out result)) { s.SetNum(4, 0, result); } if (int.TryParse(tb41.Text, out result)) { s.SetNum(4, 1, result); } if (int.TryParse(tb42.Text, out result)) { s.SetNum(4, 2, result); } if (int.TryParse(tb43.Text, out result)) { s.SetNum(4, 3, result); } if (int.TryParse(tb44.Text, out result)) { s.SetNum(4, 4, result); } if (int.TryParse(tb45.Text, out result)) { s.SetNum(4, 5, result); } if (int.TryParse(tb46.Text, out result)) { s.SetNum(4, 6, result); } if (int.TryParse(tb47.Text, out result)) { s.SetNum(4, 7, result); } if (int.TryParse(tb48.Text, out result)) { s.SetNum(4, 8, result); } if (int.TryParse(tb50.Text, out result)) { s.SetNum(5, 0, result); } if (int.TryParse(tb51.Text, out result)) { s.SetNum(5, 1, result); } if (int.TryParse(tb52.Text, out result)) { s.SetNum(5, 2, result); } if (int.TryParse(tb53.Text, out result)) { s.SetNum(5, 3, result); } if (int.TryParse(tb54.Text, out result)) { s.SetNum(5, 4, result); } if (int.TryParse(tb55.Text, out result)) { s.SetNum(5, 5, result); } if (int.TryParse(tb56.Text, out result)) { s.SetNum(5, 6, result); } if (int.TryParse(tb57.Text, out result)) { s.SetNum(5, 7, result); } if (int.TryParse(tb58.Text, out result)) { s.SetNum(5, 8, result); } if (int.TryParse(tb60.Text, out result)) { s.SetNum(6, 0, result); } if (int.TryParse(tb61.Text, out result)) { s.SetNum(6, 1, result); } if (int.TryParse(tb62.Text, out result)) { s.SetNum(6, 2, result); } if (int.TryParse(tb63.Text, out result)) { s.SetNum(6, 3, result); } if (int.TryParse(tb64.Text, out result)) { s.SetNum(6, 4, result); } if (int.TryParse(tb65.Text, out result)) { s.SetNum(6, 5, result); } if (int.TryParse(tb66.Text, out result)) { s.SetNum(6, 6, result); } if (int.TryParse(tb67.Text, out result)) { s.SetNum(6, 7, result); } if (int.TryParse(tb68.Text, out result)) { s.SetNum(6, 8, result); } if (int.TryParse(tb70.Text, out result)) { s.SetNum(7, 0, result); } if (int.TryParse(tb71.Text, out result)) { s.SetNum(7, 1, result); } if (int.TryParse(tb72.Text, out result)) { s.SetNum(7, 2, result); } if (int.TryParse(tb73.Text, out result)) { s.SetNum(7, 3, result); } if (int.TryParse(tb74.Text, out result)) { s.SetNum(7, 4, result); } if (int.TryParse(tb75.Text, out result)) { s.SetNum(7, 5, result); } if (int.TryParse(tb76.Text, out result)) { s.SetNum(7, 6, result); } if (int.TryParse(tb77.Text, out result)) { s.SetNum(7, 7, result); } if (int.TryParse(tb78.Text, out result)) { s.SetNum(7, 8, result); } if (int.TryParse(tb80.Text, out result)) { s.SetNum(8, 0, result); } if (int.TryParse(tb81.Text, out result)) { s.SetNum(8, 1, result); } if (int.TryParse(tb82.Text, out result)) { s.SetNum(8, 2, result); } if (int.TryParse(tb83.Text, out result)) { s.SetNum(8, 3, result); } if (int.TryParse(tb84.Text, out result)) { s.SetNum(8, 4, result); } if (int.TryParse(tb85.Text, out result)) { s.SetNum(8, 5, result); } if (int.TryParse(tb86.Text, out result)) { s.SetNum(8, 6, result); } if (int.TryParse(tb87.Text, out result)) { s.SetNum(8, 7, result); } if (int.TryParse(tb88.Text, out result)) { s.SetNum(8, 8, result); } s.Solve(); if (s.GetNum(0, 0).HasValue) { tb00.Text = s.GetNum(0, 0).ToString(); } if (s.GetNum(0, 1).HasValue) { tb01.Text = s.GetNum(0, 1).ToString(); } if (s.GetNum(0, 2).HasValue) { tb02.Text = s.GetNum(0, 2).ToString(); } if (s.GetNum(0, 3).HasValue) { tb03.Text = s.GetNum(0, 3).ToString(); } if (s.GetNum(0, 4).HasValue) { tb04.Text = s.GetNum(0, 4).ToString(); } if (s.GetNum(0, 5).HasValue) { tb05.Text = s.GetNum(0, 5).ToString(); } if (s.GetNum(0, 6).HasValue) { tb06.Text = s.GetNum(0, 6).ToString(); } if (s.GetNum(0, 7).HasValue) { tb07.Text = s.GetNum(0, 7).ToString(); } if (s.GetNum(0, 8).HasValue) { tb08.Text = s.GetNum(0, 8).ToString(); } if (s.GetNum(1, 0).HasValue) { tb10.Text = s.GetNum(1, 0).ToString(); } if (s.GetNum(1, 1).HasValue) { tb11.Text = s.GetNum(1, 1).ToString(); } if (s.GetNum(1, 2).HasValue) { tb12.Text = s.GetNum(1, 2).ToString(); } if (s.GetNum(1, 3).HasValue) { tb13.Text = s.GetNum(1, 3).ToString(); } if (s.GetNum(1, 4).HasValue) { tb14.Text = s.GetNum(1, 4).ToString(); } if (s.GetNum(1, 5).HasValue) { tb15.Text = s.GetNum(1, 5).ToString(); } if (s.GetNum(1, 6).HasValue) { tb16.Text = s.GetNum(1, 6).ToString(); } if (s.GetNum(1, 7).HasValue) { tb17.Text = s.GetNum(1, 7).ToString(); } if (s.GetNum(1, 8).HasValue) { tb18.Text = s.GetNum(1, 8).ToString(); } if (s.GetNum(2, 0).HasValue) { tb20.Text = s.GetNum(2, 0).ToString(); } if (s.GetNum(2, 1).HasValue) { tb21.Text = s.GetNum(2, 1).ToString(); } if (s.GetNum(2, 2).HasValue) { tb22.Text = s.GetNum(2, 2).ToString(); } if (s.GetNum(2, 3).HasValue) { tb23.Text = s.GetNum(2, 3).ToString(); } if (s.GetNum(2, 4).HasValue) { tb24.Text = s.GetNum(2, 4).ToString(); } if (s.GetNum(2, 5).HasValue) { tb25.Text = s.GetNum(2, 5).ToString(); } if (s.GetNum(2, 6).HasValue) { tb26.Text = s.GetNum(2, 6).ToString(); } if (s.GetNum(2, 7).HasValue) { tb27.Text = s.GetNum(2, 7).ToString(); } if (s.GetNum(2, 8).HasValue) { tb28.Text = s.GetNum(2, 8).ToString(); } if (s.GetNum(3, 0).HasValue) { tb30.Text = s.GetNum(3, 0).ToString(); } if (s.GetNum(3, 1).HasValue) { tb31.Text = s.GetNum(3, 1).ToString(); } if (s.GetNum(3, 2).HasValue) { tb32.Text = s.GetNum(3, 2).ToString(); } if (s.GetNum(3, 3).HasValue) { tb33.Text = s.GetNum(3, 3).ToString(); } if (s.GetNum(3, 4).HasValue) { tb34.Text = s.GetNum(3, 4).ToString(); } if (s.GetNum(3, 5).HasValue) { tb35.Text = s.GetNum(3, 5).ToString(); } if (s.GetNum(3, 6).HasValue) { tb36.Text = s.GetNum(3, 6).ToString(); } if (s.GetNum(3, 7).HasValue) { tb37.Text = s.GetNum(3, 7).ToString(); } if (s.GetNum(3, 8).HasValue) { tb38.Text = s.GetNum(3, 8).ToString(); } if (s.GetNum(4, 0).HasValue) { tb40.Text = s.GetNum(4, 0).ToString(); } if (s.GetNum(4, 1).HasValue) { tb41.Text = s.GetNum(4, 1).ToString(); } if (s.GetNum(4, 2).HasValue) { tb42.Text = s.GetNum(4, 2).ToString(); } if (s.GetNum(4, 3).HasValue) { tb43.Text = s.GetNum(4, 3).ToString(); } if (s.GetNum(4, 4).HasValue) { tb44.Text = s.GetNum(4, 4).ToString(); } if (s.GetNum(4, 5).HasValue) { tb45.Text = s.GetNum(4, 5).ToString(); } if (s.GetNum(4, 6).HasValue) { tb46.Text = s.GetNum(4, 6).ToString(); } if (s.GetNum(4, 7).HasValue) { tb47.Text = s.GetNum(4, 7).ToString(); } if (s.GetNum(4, 8).HasValue) { tb48.Text = s.GetNum(4, 8).ToString(); } if (s.GetNum(5, 0).HasValue) { tb50.Text = s.GetNum(5, 0).ToString(); } if (s.GetNum(5, 1).HasValue) { tb51.Text = s.GetNum(5, 1).ToString(); } if (s.GetNum(5, 2).HasValue) { tb52.Text = s.GetNum(5, 2).ToString(); } if (s.GetNum(5, 3).HasValue) { tb53.Text = s.GetNum(5, 3).ToString(); } if (s.GetNum(5, 4).HasValue) { tb54.Text = s.GetNum(5, 4).ToString(); } if (s.GetNum(5, 5).HasValue) { tb55.Text = s.GetNum(5, 5).ToString(); } if (s.GetNum(5, 6).HasValue) { tb56.Text = s.GetNum(5, 6).ToString(); } if (s.GetNum(5, 7).HasValue) { tb57.Text = s.GetNum(5, 7).ToString(); } if (s.GetNum(5, 8).HasValue) { tb58.Text = s.GetNum(5, 8).ToString(); } if (s.GetNum(6, 0).HasValue) { tb60.Text = s.GetNum(6, 0).ToString(); } if (s.GetNum(6, 1).HasValue) { tb61.Text = s.GetNum(6, 1).ToString(); } if (s.GetNum(6, 2).HasValue) { tb62.Text = s.GetNum(6, 2).ToString(); } if (s.GetNum(6, 3).HasValue) { tb63.Text = s.GetNum(6, 3).ToString(); } if (s.GetNum(6, 4).HasValue) { tb64.Text = s.GetNum(6, 4).ToString(); } if (s.GetNum(6, 5).HasValue) { tb65.Text = s.GetNum(6, 5).ToString(); } if (s.GetNum(6, 6).HasValue) { tb66.Text = s.GetNum(6, 6).ToString(); } if (s.GetNum(6, 7).HasValue) { tb67.Text = s.GetNum(6, 7).ToString(); } if (s.GetNum(6, 8).HasValue) { tb68.Text = s.GetNum(6, 8).ToString(); } if (s.GetNum(7, 0).HasValue) { tb70.Text = s.GetNum(7, 0).ToString(); } if (s.GetNum(7, 1).HasValue) { tb71.Text = s.GetNum(7, 1).ToString(); } if (s.GetNum(7, 2).HasValue) { tb72.Text = s.GetNum(7, 2).ToString(); } if (s.GetNum(7, 3).HasValue) { tb73.Text = s.GetNum(7, 3).ToString(); } if (s.GetNum(7, 4).HasValue) { tb74.Text = s.GetNum(7, 4).ToString(); } if (s.GetNum(7, 5).HasValue) { tb75.Text = s.GetNum(7, 5).ToString(); } if (s.GetNum(7, 6).HasValue) { tb76.Text = s.GetNum(7, 6).ToString(); } if (s.GetNum(7, 7).HasValue) { tb77.Text = s.GetNum(7, 7).ToString(); } if (s.GetNum(7, 8).HasValue) { tb78.Text = s.GetNum(7, 8).ToString(); } if (s.GetNum(8, 0).HasValue) { tb80.Text = s.GetNum(8, 0).ToString(); } if (s.GetNum(8, 1).HasValue) { tb81.Text = s.GetNum(8, 1).ToString(); } if (s.GetNum(8, 2).HasValue) { tb82.Text = s.GetNum(8, 2).ToString(); } if (s.GetNum(8, 3).HasValue) { tb83.Text = s.GetNum(8, 3).ToString(); } if (s.GetNum(8, 4).HasValue) { tb84.Text = s.GetNum(8, 4).ToString(); } if (s.GetNum(8, 5).HasValue) { tb85.Text = s.GetNum(8, 5).ToString(); } if (s.GetNum(8, 6).HasValue) { tb86.Text = s.GetNum(8, 6).ToString(); } if (s.GetNum(8, 7).HasValue) { tb87.Text = s.GetNum(8, 7).ToString(); } if (s.GetNum(8, 8).HasValue) { tb88.Text = s.GetNum(8, 8).ToString(); } }
private void DemonstrationBut_Click(object sender, RoutedEventArgs e) { var openImage = new OpenFileDialog() { Filter = "Image|*.BMP;*.JPG;*.GIF;*.PNG|All files|*.*" }; openImage.ShowDialog(); if (openImage.FileName == "") { return; } try { Views.DemonstrationWindow demWin; var bmp = new Bitmap(openImage.FileName); var gameRecognizer = new GameFieldRecognizer(bmp); // stage 1 demWin = new Views.DemonstrationWindow() { Title = "Stage 1. Download Image" }; demWin.image.Source = bmp.ToImageSource(); demWin.ExplainBox.Text = "Photo which is needed to process and calculate"; demWin.ShowDialog(); // stage 2 var preparedImage = gameRecognizer.PrepareImage(); demWin = new Views.DemonstrationWindow() { Title = "Stage 2. Processing image" }; demWin.image.Source = preparedImage.Bitmap.ToImageSource(); demWin.ExplainBox.Text = "Photo after processing"; demWin.ShowDialog(); // stage 3 var gameContour = gameRecognizer.FindField(preparedImage); demWin = new Views.DemonstrationWindow() { Title = "Stage 3. Finding field" }; var img = gameRecognizer.Image.Clone(); img.DrawPolyline(gameContour.ToPoints().CorrectOrder(), true, new Emgu.CV.Structure.Bgr(Color.Green), img.Size.Width / 100); demWin.image.Source = img.ToBitmapSource(); demWin.ExplainBox.Text = "Found game field in green rectangle"; demWin.ShowDialog(); // stage 4 demWin = new Views.DemonstrationWindow() { Title = "Stage 4. Cutting field" }; var gameFieldImg = gameRecognizer.CutField(gameContour); demWin.image.Source = gameFieldImg.Bitmap.ToImageSource(); demWin.ExplainBox.Text = "Cut game field from original photo"; demWin.ShowDialog(); // stage 5 var sudoku = CellValueRecognizer.RecognizeDigits(gameFieldImg); demWin = new Views.DemonstrationWindow() { Title = "Stage 5. Recognizing digits" }; Sudoku.DrawDigits(gameFieldImg, sudoku); demWin.image.Source = gameFieldImg.Bitmap.ToImageSource(); demWin.ExplainBox.Text = "Recognized and then painted digits on the game field"; demWin.ShowDialog(); // stage 6 var solver = new SudokuSolver(sudoku); bool run = true; while (run) { run = solver.FindOnePossible(); if (run == false) { run = solver.FindOnlyHere(); } } demWin = new Views.DemonstrationWindow() { Title = "Stage 6. Solving sudoku" }; Sudoku.DrawDigits(gameFieldImg, solver.Matrix); demWin.image.Source = gameFieldImg.Bitmap.ToImageSource(); demWin.ExplainBox.Text = $"Solved unknown sudoku values using simple methods"; demWin.ShowDialog(); if (!solver.Matrix.IsSolved()) { // stage 7 solver.RecursiveMethod(); demWin = new Views.DemonstrationWindow() { Title = "Stage 7. Solving sudoku, part 2" }; Sudoku.DrawDigits(gameFieldImg, solver.Matrix); demWin.image.Source = gameFieldImg.Bitmap.ToImageSource(); demWin.ExplainBox.Text = $"Solved of the remaining unknown sudoku values using recursive method"; demWin.ShowDialog(); } } catch (System.Exception error) { MessageBox.Show($"Some error\nSource: {error.Source}\nMessage: {error.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }