Ejemplo n.º 1
0
        public void InitGrid(int Dim, bool NewSudokuSolverService = true)
        {
            if (GlobalVar.Stato == AppStatus.Starting || GlobalVar.Stato == AppStatus.Waiting)
            {
                AppStatus old = GlobalVar.Stato;
                GlobalVar.Stato = AppStatus.ModifyingGrid;
                if (NewSudokuSolverService)
                {
                    sss = new SudokuSolverService(Dim);
                    sss.FinishSudoku += Sss_FinishSudoku;
                    sss.NeedTextBoxMatriceResize += Sss_NeedTextBoxMatriceResize;
                }

                try
                {
                    SudokuSolverTextBoxManager tm = sudokuPanel1.Genera(Dim);
                    ResizeForm();

                    tm.SetAllCellAs(NumberType.InsertByUser);
                    int i = tm.SetTextBoxIndexs();

                    sss.TextBoxManager = tm;
                    i++;
                    button1.TabIndex = i;
                    i++;
                    comboBox1.TabIndex = i;
                    comboBox1.Items.Clear();
                    comboBox1.SelectedIndex = comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviNormaleAsync(); }, "Normale"));
                    comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviRicorsioneAsync(); }, "Ricorsione"));
                    comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviRicorsioneAsync(false); }, "Ricorsione no step"));
                    comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviCombinatoAsync(); }, "Combinato"));
                    comboBox1.Items.Add(new ObjTypeRisolutore(() => { sss.RisolviCombinatoAsync(false); }, "Combinato no step"));
                    i++;
                    button2.TabIndex = i;
                    i++;
                    button3.TabIndex = i;
                    i++;
                    button4.TabIndex = i;

                    timer1.Interval = 1000;
                    Tempo = new TimeSpanPlus();
                }
                catch (SudokuSolverException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                catch (SudokuPanelException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

                GlobalVar.Stato = old;
            }
        }
Ejemplo n.º 2
0
        bool funzione_ricorsiva(SudokuSolverService m, bool ShowStep = true)
        {
            Tuple <int, int> v = m.PosizioneMigliore();

            if (v.Item1 == -1)
            {
                if (!ShowStep)
                {
                    m.MatriceToTextBox();
                }
                return(true);
            }
            int x = v.Item1;
            int y = v.Item2;

            for (int i = 1; i <= mngMat.Dim; i++)
            {
                if (m.puo_starci(x, y, i))
                {
                    m.SetNumber(x, y, i, NumberType.InsertByProgram);
                    if (ShowStep)
                    {
                        SetTextBoxNumber(x, y, i, NumberType.InsertByProgram);
                    }
                    SudokuSolverService sss = m.clone();
                    if (funzione_ricorsiva(sss, ShowStep))
                    {
                        return(true);
                    }
                }
            }
            m.SetNumber(x, y, 0, NumberType.InsertByProgram);
            if (ShowStep)
            {
                SetTextBoxNumber(x, y, 0, NumberType.InsertByProgram);
            }
            return(false);
        }
Ejemplo n.º 3
0
 public SudokuSolverService(SudokuSolverService sss)
 {
     mngMat = sss.mngMat.Clone();
     mngTxb = sss.mngTxb;
 }
Ejemplo n.º 4
0
        bool funzione_ricorsiva(SudokuSolverService m,bool ShowStep=true)
        {
            Tuple<int,int> v = m.PosizioneMigliore();
            if (v.Item1 == -1)
            {
                if(!ShowStep)
                    m.MatriceToTextBox();
                return true;
            }
            int x = v.Item1;
            int y = v.Item2;

            for (int i = 1; i <= mngMat.Dim; i++)
                if (m.puo_starci(x, y, i))
                {
                    m.SetNumber(x, y, i, NumberType.InsertByProgram);
                    if (ShowStep)
                        SetTextBoxNumber(x, y, i, NumberType.InsertByProgram);
                    SudokuSolverService sss = m.clone();
                    if (funzione_ricorsiva(sss, ShowStep))
                        return true;
                }
            m.SetNumber(x, y, 0, NumberType.InsertByProgram);
            if (ShowStep)
                SetTextBoxNumber(x, y,0, NumberType.InsertByProgram);
            return false;
        }
Ejemplo n.º 5
0
 public SudokuSolverService(SudokuSolverService sss)
 {
     mngMat = sss.mngMat.Clone();
     mngTxb = sss.mngTxb;
 }