Exemple #1
0
        /// <summary>
        /// Constructeur par copie
        ///
        /// Duplique complètement une grille de sudoku en évitant le partage mémoire.
        /// </summary>
        /// <param name="sudo">Grille de sudoku à copier</param>
        public Sudoku(Sudoku sudo)
        {
            Lignes   = new List <Ligne>();
            Colonnes = new List <Colonne>();
            Blocs    = new List <Bloc>();
            Grille   = new Cellule[9, 9];
            Groupes  = new List <Groupe>();

            foreach (Ligne copy in sudo.Lignes)
            {
                Ligne lgn = new Ligne(copy);
                lgn.Clear();
                Lignes.Add(lgn);
            }
            foreach (var copy in sudo.Colonnes)
            {
                Colonne col = new Colonne(copy);
                col.Clear();
                Colonnes.Add(col);
            }

            foreach (var copy in sudo.Blocs)
            {
                Bloc blo = new Bloc(copy);
                blo.Clear();
                Blocs.Add(blo);
            }

            Groupes.AddRange(Lignes);
            Groupes.AddRange(Colonnes);
            Groupes.AddRange(Blocs);

            foreach (Cellule cel in sudo.Grille)
            {
                Cellule cl = new Cellule(cel, Lignes.ElementAt(cel.Ligne.Numéro), Colonnes.ElementAt(cel.Colonne.Numéro), Blocs.ElementAt(GetNuméroBloc(cel.Ligne.Numéro, cel.Colonne.Numéro)));

                Grille[cel.Ligne.Numéro, cel.Colonne.Numéro] = cl;

                Lignes[cel.Ligne.Numéro].Add(cl);
                Colonnes[cel.Colonne.Numéro].Add(cl);

                Blocs[GetNuméroBloc(cel.Ligne.Numéro, cel.Colonne.Numéro)].Add(cl);
            }
        }
 public Bloc(Bloc blo) : base(blo)
 {
 }