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); } } } }
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); } } }
/// <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); }
/// <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); }
/// <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()); } } }
/// <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); }
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(); }
/// <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); }