Ejemplo n.º 1
0
        /// <summary>
        /// cette procedure trouve les cases voisines de celle passée en paramètre.
        /// Créer des instances de Case pour chacune
        /// et les ajoute dans la liste des cases voisines de la case passée en paramètre
        /// et le niveau de parcours du chemin est incrémenté pour ces cellules voisines.
        /// </summary>
        private void AddAcceptablesNeighbors(OneCell workingCell)
        {
            int xofCell   = workingCell.X;
            int yofCell   = workingCell.Y;
            int nextLevel = workingCell.Deep + 1;

            for (
                int dx = -1; dx < 2; dx++)
            {
                for (int dy = -1; dy < 2; dy++)
                {
                    int coordonneeX = xofCell + dx;
                    int coordonneeY = yofCell + dy;
                    if ((coordonneeX == xofCell) && (coordonneeY == yofCell))
                    {
                        // On ne fait rien car les coordonnées sont celles de la case d'appel
                    }
                    else
                    {
                        if (coordonneeX >= 0 && coordonneeX < 4 && coordonneeY >= 0 && coordonneeY < 4)
                        {
                            // on traite car les coordonnées sont acceptables
                            if (this.arrayOfUsedCells[coordonneeX, coordonneeY])
                            {
                                // La  case est déjà utilisée : on ne fait rien
                            }
                            else
                            {
                                // La case est libre donc utilisable donc
                                // on crée une Case de coordonnées courantes
                                // qu'on ajoute à la liste des cases voisines de la case courante si le chemin n'est pas sans issu.
                                if (this.IsNotSteril(this.Chaine(nextLevel)))
                                {
                                    OneCell neighborsCell = new OneCell
                                    {
                                        X    = coordonneeX,
                                        Y    = coordonneeY,
                                        Deep = nextLevel,
                                    };
                                    workingCell.ListOfPossiblesCellNeighbors.Add(neighborsCell);
                                }
                            }
                        }
                        else
                        {
                            // on ne fait rien car au moins une des coordonnées est hors limites
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        // AllWays est appelée par BeginTree pour continuer la recherche des mots possibles
        // dans la grille à partir de la case  passée en paramètre
        private void AllWays(OneCell lowCell)
        {
            this.cptCombinaisons++;
            this.arrayOfUsedCells[lowCell.X, lowCell.Y] = true;
            this.PossibleWord[lowCell.Deep]             = this.LetterOfCell(lowCell);
            this.TestMot(lowCell.Deep);
            this.AddAcceptablesNeighbors(lowCell);
            while (lowCell.ListOfPossiblesCellNeighbors.Count != 0)
            {
                this.AllWays(lowCell.ListOfPossiblesCellNeighbors[0]);
                lowCell.ListOfPossiblesCellNeighbors.RemoveAt(0);
            }

            this.arrayOfUsedCells[lowCell.X, lowCell.Y] = false;
            this.PossibleWord[lowCell.Deep]             = '+';
        }
Ejemplo n.º 3
0
        // BegiTree commande la recherche des mots possibles dans la grille à partir de la case aux coordonnées passées en paramètre
        private void BeginTree(int x, int y)
        {
            this.InitialiseArrayOfUsedfCells();
            this.InitializePossibleWord();
            OneCell root = new OneCell
            {
                X    = x,
                Y    = y,
                Deep = 0,
            };

            this.arrayOfUsedCells[root.X, root.Y] = true;
            this.PossibleWord[root.Deep]          = this.LetterOfCell(root);
            this.TestMot(root.Deep);
            this.AddAcceptablesNeighbors(root);
            while (root.ListOfPossiblesCellNeighbors.Count != 0)
            {
                this.AllWays(root.ListOfPossiblesCellNeighbors[0]);
                root.ListOfPossiblesCellNeighbors.RemoveAt(0);
            }

            // replace  True  by false in used cells array.
            this.arrayOfUsedCells[root.X, root.Y] = false;
        }
Ejemplo n.º 4
0
 private char LetterOfCell(OneCell oneCell)
 {
     return(DonneesLettres.TableauDeLettres[oneCell.X, oneCell.Y]);
 }