Exemplo n.º 1
0
 private void GoOnTree(MyCellClass TopCell, MyCellClass DonwCell)
 {
     m_usedCells[DonwCell.Position.X, DonwCell.Position.Y] = true;
     m_possibleWord[DonwCell.Level] = LetterOfCell(DonwCell);
     FindAcceptablesNeighbors(DonwCell);
     ShowCell(DonwCell);
     if (DonwCell.ListOfPossibleNeighbor.Count == 0)
     {
         m_usedCells[DonwCell.Position.X, DonwCell.Position.Y] = false;
         m_possibleWord[DonwCell.Level] = '*';
         int MaxIndex = TopCell.ListOfPossibleNeighbor.Count;
         // Vire la reference à la celulle courante de la liste de la cellule mère
         for (int NumCell = 0; NumCell < MaxIndex; NumCell++)
         {   // Vire de la liste des voisines possibles de la case de niveau supérieur la référence à la cellule en cours
             if (
                 TopCell.ListOfPossibleNeighbor[NumCell].Position.X == DonwCell.Position.X &&
                 TopCell.ListOfPossibleNeighbor[NumCell].Position.Y == DonwCell.Position.Y)
             {
                 TopCell.ListOfPossibleNeighbor.RemoveAt(NumCell);
                 NumCell = MaxIndex; //pour sortir
             }
         }
     }
     else
     {
         GoOnTree(DonwCell, DonwCell.ListOfPossibleNeighbor[0]);
         if (DonwCell.ListOfPossibleNeighbor.Count != 0)
         {
             m_usedCells[DonwCell.Position.X, DonwCell.Position.Y] = false;
             m_possibleWord[DonwCell.Level] = '|';
         }
     }
 }
Exemplo n.º 2
0
 private void ShowCell(MyCellClass Cell)
 {
     FindPossibleWord(Cell.Level);
     if (m_dictionary.IsWordValid(m_wordFind))
     {
         // Test += WordFind + "\r\n";
         AddWordInListExistingWords(m_wordFind);
     }
 }
Exemplo n.º 3
0
        private void FindAcceptablesNeighbors(MyCellClass WorkingCell)
        {
            // cette procedure trouve les cases voisines de celle passée en pramètre
            // Créer des instance de Case pour chacune
            //et les ajoute dans la liste des cases voisine de la case passée en pramètre
            // et le niveau de parcours du chemin?
            int XofCell   = WorkingCell.Position.X;
            int YofCell   = WorkingCell.Position.Y;
            int NextLevel = WorkingCell.Level + 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 (m_usedCells[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
                                MyCellClass NeighborsCell = new MyCellClass
                                {
                                    Position = new Point2D()
                                    {
                                        X = CoordonneeX,
                                        Y = CoordonneeY,
                                    },
                                    Level = NextLevel
                                };
                                WorkingCell.ListOfPossibleNeighbor.Add(NeighborsCell);
                            }
                        }
                        else
                        {
                            // on ne fait rien car au moins une des coordonnées est hors limites
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        private void BeginTree(int X, int Y)
        {
            InitialiseArrayOfUsedfCells();
            InitializePossibleWord();
            MyCellClass Root = new MyCellClass();

            Root.Position.X = X;
            Root.Position.Y = Y;
            Root.Level      = 0;
            m_usedCells[Root.Position.X, Root.Position.Y] = true;
            m_possibleWord[Root.Level] = LetterOfCell(Root);
            FindAcceptablesNeighbors(Root);
            ShowCell(Root);
            for (int round0 = 0; round0 < Root.ListOfPossibleNeighbor.Count; round0++)
            {
                GoOnTree(Root, Root.ListOfPossibleNeighbor[round0]);
            }
        }
Exemplo n.º 5
0
 private char LetterOfCell(MyCellClass OneCell)
 {
     return(m_grid[OneCell.Position.X, OneCell.Position.Y]);
 }