Exemplo n.º 1
0
      /// <summary>
      /// Méthode permettant de tester si une case d'une grille est nécessaire pour valider le principe d'unicité
      /// </summary>
      /// <param name="g"></param>
      /// <param name="position"></param>
      /// <returns></returns>
      private static bool TesterCase(Grille g, int position)
      {
          int compteurReussite = 0;
          int x = position / 9;
          int y = position % 9;

          for (int chiffre = 1; chiffre <= 9; chiffre++)
          {
              if (chiffre != g.GetCaseValue(x, y))
              {
                  Grille aTester = new Grille(g);
                  aTester.SetCaseValue(x, y, chiffre);
                  if (CaseValide(aTester, 0) && aTester.CheckSudoku())
                  {
                      compteurReussite += 1;
                      if (compteurReussite == 1)
                      {
                          return(false);
                      }
                  }
              }
          }
          if (compteurReussite == 0)
          {
              g.SetCaseValue(x, y, 0);
          }

          return(true);
      }
Exemplo n.º 2
0
      /// <summary>
      /// Méthode permettant de remplir la grille de sudoku
      /// </summary>
      /// <param name="grille">Grille</param>
      /// <param name="coordonnee">Coordonnée de la case</param>
      /// <returns>Grille rempli</returns>
      private static bool CaseValide(Grille grille, int coordonnee)
      {
          if (coordonnee == 9 * 9)
          {
              return(true);
          }

          int i = coordonnee / 9;
          int j = coordonnee % 9;

          if (grille.GetCaseValue(i, j) != 0)
          {
              return(CaseValide(grille, coordonnee + 1));
          }

          for (int chiffre = 1; chiffre <= 9; chiffre++)
          {
              if (AbsentSurLigne(chiffre, grille, i) && AbsentSurColonne(chiffre, grille, j) && AbsentSurBloc(chiffre, grille, i, j))
              {
                  grille.SetCaseValue(i, j, chiffre);

                  if (CaseValide(grille, coordonnee + 1))
                  {
                      return(true);
                  }
              }
          }
          grille.SetCaseValue(i, j, 0);

          return(false);
      }
Exemplo n.º 3
0
        private void helpClick(object sender, EventArgs e)
        {
            var x = MessageBox.Show("Une case du sudoku va être rempli. Voulez-vous utilisez l'aide ?",
                                    "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (x == DialogResult.No)
            {
            }
            else
            {
                if (isGrilleEgale(this.grille, this.grille.Solution))
                {
                }
                else
                {
                    bool trouve = true;
                    do
                    {
                        Random rnd   = new Random();
                        int    pos   = rnd.Next(1, 81);
                        int    value = grille.GetCaseValue(pos / 9, pos % 9);
                        if (value == 0)
                        {
                            grille.SetCaseValue(pos / 9, pos % 9, grille.Solution.GetCaseValue(pos / 9, pos % 9));
                            trouve = false;
                            this.tabLabel[pos].Text = grille.Solution.GetCaseValue(pos / 9, pos % 9).ToString();
                        }
                    } while (trouve);
                }
            }
        }
Exemplo n.º 4
0
 /// <summary>
 /// Méthode permettant de savoir si un chiffre un déjà présent sur une colonne donnée
 /// </summary>
 /// <param name="chiffre">Chiffre a vérifier</param>
 /// <param name="g">Grille sur laquelle se trouve la colonne</param>
 /// <param name="j">Colonne a vérifier</param>
 /// <returns></returns>
 private static bool AbsentSurColonne(int chiffre, Grille g, int j)
 {
     for (int i = 0; i < 9; i++)
     {
         if (g.GetCaseValue(i, j) == chiffre)
         {
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 5
0
 /// <summary>
 /// Méthode permettant de savoir si un chiffre est présent sur la ligne donnée
 /// </summary>
 /// <param name="chiffre">Chiffre a vérifier</param>
 /// <param name="g">Grille sur laquelle se trouve la ligne</param>
 /// <param name="i">Ligne a vérifier</param>
 /// <returns>True si absent, false sinon </returns>
 private static bool AbsentSurLigne(int chiffre, Grille g, int i)
 {
     for (int j = 0; j < 9; j++)
     {
         if (g.GetCaseValue(i, j) == chiffre)
         {
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 6
0
 public Grille(Grille g)
 {
     InitialiserGrille();
     for (int i = 0; i <= 8; i++)
     {
         for (int j = 0; j <= 8; j++)
         {
             SetCaseValue(i, j, g.GetCaseValue(i, j));
         }
     }
 }
Exemplo n.º 7
0
      /// <summary>
      /// Méthode permettant de check si un chiffre est présent dans un carré
      /// </summary>
      /// <param name="chiffre">Chiffre a vérifier</param>
      /// <param name="g">Grille sur laquelle se trouve le carré</param>
      /// <param name="i">position en x</param>
      /// <param name="j">position en y</param>
      /// <returns></returns>
      private static bool AbsentSurBloc(int chiffre, Grille g, int i, int j)
      {
          int _i = i - (i % 3), _j = j - (j % 3);

          for (i = _i; i < _i + 3; i++)
          {
              for (j = _j; j < _j + 3; j++)
              {
                  if (g.GetCaseValue(i, j) == chiffre)
                  {
                      return(false);
                  }
              }
          }
          return(true);
      }
Exemplo n.º 8
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);
      }