예제 #1
0
 public void Changement(object sender, EventArgs e)
 {
     if ((Control)sender != this)
     {
         TextBox tb = ((TextBox)sender);
         tb.LostFocus -= new EventHandler(Changement);
         TableLayoutPanelCellPosition pos = this.Grid.GetCellPosition(tb);
         grille.SetCaseValue(pos.Row, pos.Column, Int16.Parse(tb.Text));
         if (grille.CheckSudoku())
         {
             string            message = "Voulez-vous relancer une partie ?";
             string            caption = "Vous avez terminé !";
             MessageBoxButtons buttons = MessageBoxButtons.YesNo;
             DialogResult      result;
             result = MessageBox.Show(message, caption, buttons);
             if (result == DialogResult.No)
             {
                 this.Close();
             }
             else
             {
                 grille = GenerateurGrille.GenererGrilleAléatoire(10);
                 this.initialisationLabel(grille);
             }
         }
     }
 }
예제 #2
0
 private void Vérifier_Click(object sender, EventArgs e)
 {
     if ((Control)sender != this)
     {
         if (grille.CheckSudoku())
         {
             string            message = "Voulez-vous relancer une partie ?";
             string            caption = "Vous avez terminé !";
             MessageBoxButtons buttons = MessageBoxButtons.YesNo;
             DialogResult      result;
             result = MessageBox.Show(message, caption, buttons);
             if (result == DialogResult.No)
             {
                 this.Close();
             }
             else
             {
                 grille = GenerateurGrille.ViderGrilleUnique(50);
                 this.initialisationLabel(grille);
             }
         }
         else
         {
             var mess   = "Le sudoku n'est pas juste ! Corrigez-le";
             var capt   = "Dommage !";
             var mb     = MessageBoxButtons.OK;
             var result = MessageBox.Show(mess, capt, mb);
         }
     }
 }
예제 #3
0
      /// <summary>
      /// Méthode permettant de générer une grille valide
      /// On génère 3 carré aléatoire en diagonal.
      /// On génère ensuite les autres grâce a un algorithme backward.
      /// </summary>
      /// <returns> Retourne une grille valide</returns>
      private static Grille Generation()
      {
          Grille grille = new Grille();

          GenerateurGrille.AddMiddleAnd2CornerSquare(grille);
          CaseValide(grille, 0);
          return(grille);
      }
예제 #4
0
      /// <summary>
      /// Méthode permettant de vider la grille tout en respectant le principe d'unicité
      /// </summary>
      /// <returns>Une grille valide ayant une seule solution</returns>
      public static Grille ViderGrilleUnique(int nbEssais)
      {
          Grille grille = GenerateurGrille.Generation();

          grille.Solution = new Grille(grille);
          for (int i = 1; i < nbEssais; i++)
          {
              Random rnd = new Random();
              Thread.Sleep(10);
              int nb = rnd.Next(1, 81);
              TesterCase(grille, nb);
          }
          return(grille);
      }
예제 #5
0
      /// <summary>
      /// Permet l'ajout d'un carré aléatoire
      /// <param name="g">Grille g sur laquelle on ajoute le carré</param>
      /// <param name="pos">position du carré</param>
      private static void AddNormalSquarre(Grille g, int pos)
      {
          int        ligne   = (pos / 3) * 3;
          int        colonne = (pos % 3) * 3;
          List <int> l       = new List <int>();

          l = GenerateurGrille.GénérerLigneValide();
          for (int i = ligne; i < ligne + 3; i++)
          {
              for (int j = colonne; j < colonne + 3; j++)
              {
                  g.SetCaseValue(i, j, l.First());
                  l.Remove(l.First());
              }
          }
      }
예제 #6
0
      /// <summary>
      /// Permet de générer la grille et de mettre des cases vides
      /// </summary>
      /// <param name="nbCases">Nombre de cases à afficher</param>
      /// <returns>Une grille avec des 0 sur les cases à deviner</returns>
      public static Grille GenererGrilleAléatoire(int nbCases)
      {
          Grille grille = GenerateurGrille.Generation();

          for (int i = 1; i <= 81 - nbCases; i++)
          {
              int x;
              int y;
              do
              {
                  Random rnd = new Random();
                  x = rnd.Next(9);
                  y = rnd.Next(9);
              } while (grille.GetCaseValue(x, y) == 0);
              grille.SetCaseValue(x, y, 0);
              grille.GetCase(x, y).IsChecked = true;
          }
          return(grille);
      }
예제 #7
0
        public Sudoku()
        {
            InitializeComponent();
            Console.Write("Intialisation");
            grille   = GenerateurGrille.ViderGrilleUnique(50);
            tabLabel = new List <Label>();

            for (int i = 0; i < 81; i++)
            {
                Label l = new Label();
                l.Height    = 50;
                l.Width     = 100;
                l.TextAlign = ContentAlignment.MiddleCenter;
                l.Font      = new Font("Arial", 20);

                l.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                l.Click      += new EventHandler(changeValueLabel);
                tabLabel.Add(l);
                this.Grid.Controls.Add(l, i % 9, i / 9);
            }
            initialisationLabel(grille);
            this.Invalidate();
        }
예제 #8
0
 /// <summary>
 /// Permet d'ajouter 3 carré de 3*3 aléatoires
 /// </summary>
 /// <param name="g">Grille</param>
 private static void AddMiddleAnd2CornerSquare(Grille g)
 {
     GenerateurGrille.AddNormalSquarre(g, 0);
     GenerateurGrille.AddNormalSquarre(g, 4);
     GenerateurGrille.AddNormalSquarre(g, 8);
 }