コード例 #1
0
        public Grille(int taille, int pourcentage, string libelle, int age, int energie)  // même chose que le 2eme constructeur mais avec des paramètres supplémentaires
        {
            this.taille      = taille;
            this.pourcentage = pourcentage;
            this.libelle     = libelle;
            Random aleatoire = new Random();

            board = new Cellule[taille, taille];
            for (int i = 0; i < board.GetLength(0); i++)
            {
                for (int j = 0; j < board.GetLength(1); j++)
                {
                    this.board[i, j].Age     = age;
                    this.board[i, j].Energie = energie;

                    int nombreAleatoire = aleatoire.Next(100);

                    if (nombreAleatoire < pourcentage)
                    {
                        board[i, j] = new Cellule(true, i, j);
                    }
                    else
                    {
                        board[i, j] = new Cellule(false, i, j);
                    }
                }
            }
        }
コード例 #2
0
        //déclaraton des méthodes

        public void Clone(Cellule mycell) // copie les attributs de la cellule entrée en paramètre dans la cellule sur laquelle on applique la fonction. exemple : cell.Clone(mycell)
        {
            this.alive          = mycell.Alive;
            this.linePosition   = mycell.LinePosition;
            this.columnPosition = mycell.ColumnPosition;
            this.age            = mycell.Age;
            this.energie        = mycell.Energie;
        }
コード例 #3
0
 public Cellule VoisinEst(Cellule maCase)
 {
     if (maCase.ColumnPosition + 1 > board.GetLength(1) - 1)
     {
         return(board[maCase.LinePosition, maCase.ColumnPosition + 1 - board.GetLength(1)]);
     }
     else
     {
         return(board[maCase.LinePosition, maCase.ColumnPosition + 1]);
     }
 }
コード例 #4
0
 public Cellule VoisinOuest(Cellule maCase)
 {
     if (maCase.ColumnPosition - 1 < 0)
     {
         return(board[maCase.LinePosition, maCase.ColumnPosition - 1 + board.GetLength(1)]);
     }
     else
     {
         return(board[maCase.LinePosition, maCase.ColumnPosition - 1]);
     }
 }
コード例 #5
0
 public Cellule VoisinNord(Cellule maCase)
 {
     if (maCase.LinePosition - 1 < 0)
     {
         return(board[maCase.LinePosition - 1 + board.GetLength(0), maCase.ColumnPosition]);                             // test si le voisin nord est hors de la matrice, et le place de manière a obtenir une grille torique
     }
     else
     {
         return(board[maCase.LinePosition - 1, maCase.ColumnPosition]); //sinon retourne la case nord
     }
 }
コード例 #6
0
        public Cellule VoisinSud(Cellule maCase)
        {
            if (maCase.LinePosition + 1 > board.GetLength(0) - 1)
            {
                return(board[maCase.LinePosition + 1 - board.GetLength(0), maCase.ColumnPosition]);
            }

            else
            {
                return(board[maCase.LinePosition + 1, maCase.ColumnPosition]);
            }
        }
コード例 #7
0
        //déclaration des constructeurs

        public Grille(int taille)
        {
            this.taille = taille;
            board       = new Cellule[taille, taille];
            for (int i = 0; i < taille; i++)
            {
                for (int j = 0; j < taille; j++)
                {
                    board[i, j] = new Cellule(false, i, j); // Initialisation d'une grille vide, on n'utilisera pas ce constructeur sauf pour instancier la matrice Clone sur laquelle on effectuera les opérations
                }
            }
        }
コード例 #8
0
        public Cellule JeuNiveau1(Cellule maCase, int cellulesVoisines)
        {
            Cellule newCell = new Cellule(true, 0, 0); // cellule définie par défaut sur laquelle on va effectuer les opérations.

            newCell.Clone(maCase);
            if (VoisinNord(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinNordEst(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinNordOuest(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinSud(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinSudEst(maCase).Alive == true)
            {
                cellulesVoisines += 1;                                          // test de tous les voisins et incrémentation du compteur pour chaque voisin vivant
            }
            if (VoisinSudOuest(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinEst(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinOuest(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }

            if (maCase.Alive == true && (cellulesVoisines == 2 | cellulesVoisines == 3))
            {
                newCell.Alive = true;                                                                         //survie
            }
            if (cellulesVoisines > 3 | cellulesVoisines < 2)
            {
                newCell.Alive = false;                                              // Mort par surpopulation ou solitude
            }
            if (maCase.Alive == false && cellulesVoisines == 3)
            {
                newCell.Alive = true;                                                //naissance
            }
            return(newCell);
        }
コード例 #9
0
 public Grille(string file)
 {
     string[] lines;
     try
     {
         lines = File.ReadAllLines(file); // lecture du fichier et stockage dans un tableau de string
         int lineNumber = 0;
         int charNumber = 0;
         foreach (string line in lines)
         {
             lineNumber++;
             charNumber = line.Length; // calcul et stockage du nombre de caractères par ligne
         }
         if (lineNumber == charNumber)
         {
             this.taille = lineNumber;
         }
         else
         {
             Console.WriteLine("la matrice contenue dans file.txt n'est pas carrée");
         }
         board = new Cellule[taille, taille]; // initialisation d'une matrice de cellules adaptée aux dimensions de la matrice contenue dans le fichier
         for (int i = 0; i < taille; i++)
         {
             for (int j = 0; j < taille; j++)
             {
                 if (lines[i][j] == '0')
                 {
                     board[i, j] = new Cellule(false, i, j);                         //traduction de la matrice de caractères du fichier en matrice de cellules.
                 }
                 if (lines[i][j] == '1')
                 {
                     board[i, j] = new Cellule(true, i, j);
                 }
             }
         }
     }
     catch (FileNotFoundException)
     {
         Console.WriteLine("An error has occured : file not readable"); // au cas où pour prevenir d'un potentiel crash
         Console.ReadLine();
     }
 }
コード例 #10
0
 public Cellule VoisinSudOuest(Cellule maCase)
 {
     if (maCase.LinePosition + 1 > board.GetLength(0) - 1 && maCase.ColumnPosition - 1 < 0)
     {
         return(board[maCase.LinePosition + 1 - board.GetLength(0), maCase.ColumnPosition - 1 + board.GetLength(1)]);
     }
     if (maCase.ColumnPosition - 1 < 0)
     {
         return(board[maCase.LinePosition, maCase.ColumnPosition - 1 + board.GetLength(1)]);
     }
     if (maCase.LinePosition + 1 > board.GetLength(0) - 1)
     {
         return(board[maCase.LinePosition + 1 - board.GetLength(0), maCase.ColumnPosition]);
     }
     else
     {
         return(board[maCase.LinePosition + 1, maCase.ColumnPosition - 1]);
     }
 }
コード例 #11
0
 public Cellule VoisinNordEst(Cellule maCase)
 {
     if (maCase.LinePosition - 1 < 0 && maCase.ColumnPosition + 1 > board.GetLength(1) - 1)
     {
         return(board[maCase.LinePosition - 1 + board.GetLength(0), maCase.ColumnPosition + 1 - board.GetLength(1)]);                                                                                   // test toricité deux directions à la fois : Nord et Est
     }
     if (maCase.LinePosition - 1 < 0)
     {
         return(board[maCase.LinePosition - 1 + board.GetLength(0), maCase.ColumnPosition]);                             // test toricité Nord
     }
     if (maCase.ColumnPosition + 1 > board.GetLength(1) - 1)
     {
         return(board[maCase.LinePosition, maCase.ColumnPosition + 1 - board.GetLength(1)]);                                                    // test toricité Est
     }
     else
     {
         return(board[maCase.LinePosition - 1, maCase.ColumnPosition + 1]);
     }
 }
コード例 #12
0
        public Grille(int taille, int pourcentage)
        {
            this.taille      = taille;
            this.pourcentage = pourcentage;
            Random aleatoire = new Random();

            board = new Cellule[taille, taille];
            for (int i = 0; i < board.GetLength(0); i++)
            {
                for (int j = 0; j < board.GetLength(1); j++)
                {
                    int nombreAleatoire = aleatoire.Next(100);
                    if (nombreAleatoire < pourcentage)
                    {
                        board[i, j] = new Cellule(true, i, j);
                    }
                    else
                    {
                        board[i, j] = new Cellule(false, i, j);
                    }
                }
            }
        }
コード例 #13
0
        public Cellule JeuNiveau2(Cellule maCase, int cellulesVoisines)
        {
            Cellule newCell = new Cellule(true, 0, 0, 0, 0);

            newCell.Clone(maCase);
            if (VoisinNord(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinNordEst(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinNordOuest(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinSud(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinSudEst(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinSudOuest(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinEst(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }
            if (VoisinOuest(maCase).Alive == true)
            {
                cellulesVoisines += 1;
            }

            if (maCase.Alive == true && (cellulesVoisines == 2 | cellulesVoisines == 3))
            {
                newCell.Alive = true;
            }
            if (cellulesVoisines > 3 | cellulesVoisines < 2)
            {
                newCell.Alive = false;
            }
            if (maCase.Alive == false && cellulesVoisines == 3)
            {
                newCell.Alive   = true;
                newCell.Age     = 0;
                newCell.Energie = ENERGIE_INITIALE;
            }
            if (newCell.Alive == true) // vieillissement et accumulation d'énergie des cellules vivantes
            {
                newCell.Age++;
                newCell.Energie += ENERGIE;
            }
            else // valeurs par défaut des cellules mortes
            {
                newCell.Age     = 0;
                newCell.Energie = 0;
            }
            if (maCase.Age == AGE_MORT)
            {
                newCell.Alive = false;                                                                                                                                                                                                                                                                                                 // mort de vieillesse
            }
            if (maCase.Age < AGE_MORT && maCase.Energie >= ENERGIE_REPRODUCTION)                                                                                                                                                                                                                                                       // conditions de reproduction
            {
                if (VoisinEst(maCase).Alive == false || VoisinNord(maCase).Alive == false || VoisinNordEst(maCase).Alive == false || VoisinNordOuest(maCase).Alive == false || VoisinOuest(maCase).Alive == false || VoisinSud(maCase).Alive == false || VoisinSudEst(maCase).Alive == false || VoisinSudOuest(maCase).Alive == false) // test si il y a au moins une cellule voisine qui n'est pas vivante pour que la reproduction puisse avoir lieu
                {
                    if (VoisinSudOuest(maCase).Alive == false)                                                                                                                                                                                                                                                                         // Test une par une si les cellules voisines sont mortes pour que la reproduction puisse avoir lieu
                    {
                        VoisinSudOuest(newCell).Alive   = true;                                                                                                                                                                                                                                                                        // naissance d'une cellule voisine
                        VoisinSudOuest(newCell).Age     = 0;
                        VoisinSudOuest(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinOuest(maCase).Alive == false)
                    {
                        VoisinOuest(newCell).Alive   = true;
                        VoisinOuest(newCell).Age     = 0;
                        VoisinOuest(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinSud(maCase).Alive == false)
                    {
                        VoisinSud(newCell).Alive   = true;
                        VoisinSud(newCell).Age     = 0;
                        VoisinSud(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinNordEst(maCase).Alive == false)
                    {
                        VoisinNordEst(newCell).Alive   = true;
                        VoisinNordEst(newCell).Age     = 0;
                        VoisinNordEst(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinNord(maCase).Alive == false)
                    {
                        VoisinNord(newCell).Alive   = true;
                        VoisinNord(newCell).Age     = 0;
                        VoisinNord(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinEst(maCase).Alive == false)
                    {
                        VoisinEst(newCell).Alive   = true;
                        VoisinEst(newCell).Age     = 0;
                        VoisinEst(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinNordOuest(maCase).Alive == false)
                    {
                        VoisinNordOuest(newCell).Alive   = true;
                        VoisinNordOuest(newCell).Age     = 0;
                        VoisinNordOuest(newCell).Energie = ENERGIE_INITIALE;
                    }
                    if (VoisinSudEst(maCase).Alive == false)
                    {
                        VoisinSudEst(newCell).Alive   = true;
                        VoisinSudEst(newCell).Age     = 0;
                        VoisinSudEst(newCell).Energie = ENERGIE_INITIALE;
                    }
                    newCell.Energie -= ENERGIE_REPRODUCTION; // perte d'énergie après reproduction
                }
            }
            return(newCell);
        }