Ejemplo n.º 1
0
        //Todo dans le VaVivre
        /// <summary>
        /// Calcul si une cellule va vivre ou mourir
        /// </summary>
        /// <param name="tableau">Tableau avec les résultats actuels</param>
        /// <param name="coordX">Coordonées X de la cellule</param>
        /// <param name="coordY">Coordonées Y de la cellule</param>
        /// <returns></returns>
        private bool VaVivre(AutomateJeuVie[,] tableau, int coordX, int coordY)
        {
            //Détermine le nombre de voisins
            int nbVoisin = 0;
            for (int i = -1; i < 2; i++)
            {
                for (int j = -1; j < 2; j++)
                {
                    //Compte le nombre de voisin, excluant le "centre"

                    if (i == 0 && j == 0)
                    {     }
            //Todo: Pourquoi if(i!= 0 && j!=0) ne marche pas!!
                    else{
                        int X = coordX + i;
                        int Y = coordY + j;
                        #region exceptions
                        //Vérifie si la cellule est sur un extrémité du tableau
                        if (coordX == 0 || coordX == currentX-1 || coordY == 0 || coordY == currentY-1)
                        {

                            //Remplace le X & Y en fonction de sa situation
                            if (X == -1)
                                X = currentX-1;
                            if (X == currentX)
                                X = 0;
                            if (Y == -1)
                                Y = currentY-1;
                            if (Y == currentY)
                                Y = 0;

                        }
                        #endregion
                        //Fin exceptions

                        if (tableau[X,Y].Vivante)
                            nbVoisin++;
                    }//Fin Centre
                }
            }//Fin du compte

            //Vérifie l'état dans laquelle se trouve la cellule
            bool etat = tableau[coordX, coordY].Vivante;
            bool retour;
            //Calcul l'état final de la cellule si la cellule est vivante
            if (etat)
            {
                if (nbVoisin == 2 || nbVoisin == 3)
                    retour = true;
                else
                    retour = false;
            }

            //Calcul l'état final de la cellule si elle est morte
            else
            {
                if (nbVoisin == 3)
                    retour = true;
                else
                    retour = false;
            }

            return retour;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initialise les paramètres de bases du jeu et génère aléatoirement une grille
        /// </summary>
        private void buttonInitialise_Click(object sender, EventArgs e)
        {
            buttonPlayPause.Image = JeuVie.Properties.Resources.play;
            start = false;
            timerLoop.Stop();
            turn = 0;
            nbAlive = 0;
            currentX = maxX;
            currentY = maxY;
            premier = new AutomateJeuVie[currentX, currentY];
            actuel = new AutomateJeuVie[currentX, currentY];
            //i = X, J = Y - Génère un tableau de cellules
            Random random = new Random();
            int rnd;
            for (int i = 0; i < currentX; i++)
            {
                for (int j = 0; j < currentY; j++)
                {

                    rnd = random.Next(0, 100);

                    if (i == 0 && j == 0)
                    {
                        actuel[0, 0] = new AutomateJeuVie((int)numericUpDownPourcentage.Value);
                        if (actuel[0, 0].Vivante)
                            nbAlive++;

                        premier[0, 0] = new AutomateJeuVie((int)numericUpDownPourcentage.Value);
                    }
                    else
                    {
                        actuel[i, j] = new AutomateJeuVie(rnd, 0);
                        if (actuel[i, j].Vivante)
                            nbAlive++;
                        premier[i, j] = new AutomateJeuVie(rnd, 0);
                    }
                }

            }

            prochain = new AutomateJeuVie[currentX, currentY];
            //i = X, J = Y - Génère un tableau de cellules mortes qui sera mis à jour
            for (int i = 0; i < currentX; i++)
            {
                for (int j = 0; j < currentY; j++)
                {
                    prochain[i,j] = new AutomateJeuVie(false);
                }
            }
            //Rempli le tableau "prochain"
            prochain = UpdateNext(actuel, prochain);

            buttonInitialise.Text = "Réinitialiser";
            buttonFastForward.Enabled = true;
            buttonNext.Enabled = true;
            buttonPlayPause.Enabled = true;
            buttonPrevious.Enabled = true;
            buttonSlow.Enabled = true;
            Dessiner(actuel, prochain);

            textBoxNbAlive.Text = nbAlive.ToString();
            textBoxTurn.Text = turn.ToString();
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Met à jour le tableau suivant en fonction du tableau actuel
 /// </summary>
 /// <param name="tableau">Tableau de cellules à mettre à jour</param>
 private AutomateJeuVie[,] UpdateNext(AutomateJeuVie[,] actuel, AutomateJeuVie[,] suivant)
 {
     //Parcours le tableau en X,Y
     for (int i = 0; i < currentX; i++)
     {
         //Parcours le tableau en X,Y
         for (int j = 0; j < currentY; j++)
         {
             //Définit si la cellule va vivre ou mourir (Bool)
             suivant[i,j].Vivante = VaVivre(actuel, i, j);
         }
     }//Fin For
     return suivant;
 }
Ejemplo n.º 4
0
        private void modèle3ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            radioButtonModeBW.Checked = true;
            radioButtonModeColor.Checked = false;
            modeDemo = true;
            buttonPlayPause.Image = JeuVie.Properties.Resources.play;
            start = false;
            timerLoop.Stop();
            turn = 0;
            nbAlive = 0;
            premier = new AutomateJeuVie[currentX, currentY];
            actuel = new AutomateJeuVie[currentX, currentY];
            prochain = new AutomateJeuVie[currentX, currentY];
            //i = X, J = Y - Génère un tableau de cellules mortes qui sera mis à jour
            for (int i = 0; i < currentX; i++)
            {
                for (int j = 0; j < currentY; j++)
                {
                    prochain[i, j] = new AutomateJeuVie(false);
                    premier[i, j] = new AutomateJeuVie(false);
                    actuel[i, j] = new AutomateJeuVie(false);
                }
            }
            //Rempli le tableau "Actuel" du modèle 3

            for (int i = 6; i <= 13; i++)
            {
                actuel[i, 6].Vivante = true;
                premier[i, 6].Vivante = true;
            }

            //Rempli le tableau "prochain"
            prochain = UpdateNext(actuel, prochain);

            buttonInitialise.Text = "Réinitialiser";
            buttonFastForward.Enabled = true;
            buttonNext.Enabled = true;
            buttonPlayPause.Enabled = true;
            buttonPrevious.Enabled = true;
            buttonSlow.Enabled = true;
            Dessiner(actuel, prochain);

            textBoxNbAlive.Text = nbAlive.ToString();
            textBoxTurn.Text = turn.ToString();
        }
Ejemplo n.º 5
0
        private void modèle1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            radioButtonModeBW.Checked = true;
            radioButtonModeColor.Checked = false;
            modeDemo = true;
            buttonPlayPause.Image = JeuVie.Properties.Resources.play;
            start = false;
            timerLoop.Stop();
            turn = 0;
            nbAlive = 0;
            premier = new AutomateJeuVie[currentX, currentY];
            actuel = new AutomateJeuVie[currentX, currentY];
            prochain = new AutomateJeuVie[currentX, currentY];
            //i = X, J = Y - Génère un tableau de cellules mortes qui sera mis à jour
            for (int i = 0; i < currentX; i++)
            {
                for (int j = 0; j < currentY; j++)
                {
                    prochain[i,j] = new AutomateJeuVie(false);
                    premier[i, j] = new AutomateJeuVie(false);
                    actuel[i,j] = new AutomateJeuVie(false);
                }
            }
            //Rempli le tableau "Actuel" du modèle 1

            //Début carrés
            actuel[0, 5].Vivante = true;
            actuel[0, 6].Vivante = true;
            actuel[1, 5].Vivante = true;
            actuel[1, 6].Vivante = true;

            actuel[0, 11].Vivante = true;
            actuel[0, 10].Vivante = true;
            actuel[1, 11].Vivante = true;
            actuel[1, 10].Vivante = true;

            actuel[18, 5].Vivante = true;
            actuel[18, 6].Vivante = true;
            actuel[19, 5].Vivante = true;
            actuel[19, 6].Vivante = true;

            actuel[18, 11].Vivante = true;
            actuel[18, 10].Vivante = true;
            actuel[19, 11].Vivante = true;
            actuel[19, 10].Vivante = true;

            actuel[5, 0].Vivante = true;
            actuel[6, 0].Vivante = true;
            actuel[5, 1].Vivante = true;
            actuel[6, 1].Vivante = true;

            actuel[14, 0].Vivante = true;
            actuel[13, 0].Vivante = true;
            actuel[14, 1].Vivante = true;
            actuel[13, 1].Vivante = true;

            actuel[5, 16].Vivante = true;
            actuel[6, 16].Vivante = true;
            actuel[5, 15].Vivante = true;
            actuel[6, 15].Vivante = true;

            actuel[14, 16].Vivante = true;
            actuel[13, 16].Vivante = true;
            actuel[14, 15].Vivante = true;
            actuel[13, 15].Vivante = true;
            //Fin carrés

            //Début "Beignes"
            for (int i = 0; i < 3; i++)
            {
                actuel[5, 4 + i].Vivante = true;
                actuel[7, 4 + i].Vivante = true;
                actuel[12, 4 + i].Vivante = true;
                actuel[14, 4 + i].Vivante = true;

                actuel[5, 10 + i].Vivante = true;
                actuel[7, 10 + i].Vivante = true;
                actuel[12, 10 + i].Vivante = true;
                actuel[14, 10 + i].Vivante = true;
            }
            actuel[6, 4].Vivante = true;
            actuel[6, 6].Vivante = true;

            actuel[13, 4].Vivante = true;
            actuel[13, 6].Vivante = true;

            actuel[6, 10].Vivante = true;
            actuel[6, 12].Vivante = true;

            actuel[13, 10].Vivante = true;
            actuel[13, 12].Vivante = true;

            //Fin Beignes"

            //Rempli le tableau "prochain"
            prochain = UpdateNext(actuel, prochain);

            buttonInitialise.Text = "Réinitialiser";
            buttonFastForward.Enabled = true;
            buttonNext.Enabled = true;
            buttonPlayPause.Enabled = true;
            buttonPrevious.Enabled = true;
            buttonSlow.Enabled = true;
            Dessiner(actuel, prochain);

            textBoxNbAlive.Text = nbAlive.ToString();
            textBoxTurn.Text = turn.ToString();
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Dessine le tableau
        /// </summary>
        /// <param name="actuel">Tableau actuel afin de trouver les cellules vivantes</param>
        /// <param name="suivant">Tableau suivant afin de trouver quelles cellules vont vivre ou mourrir</param>
        private void Dessiner(AutomateJeuVie[,] actuel, AutomateJeuVie[,] suivant)
        {
            //Copie l'image de jeu de la vie
            Image img = this.pictureBoxJeu.Image;

            ////La retransforme en entier en gris
            //using (Graphics a = Graphics.FromImage(img))
            //{
            //    a.FillRectangle(new SolidBrush(Color.Gray), 0, 0, pictureBoxJeu.Width, pictureBoxJeu.Height);
            //}

            //Insère l'image dans le bitmap
            Bitmap bmp = new Bitmap(img);

            //Trouve le nombre de byte (2 bytes pour la "signature" truc machin pax "X")
            //int nbBytes = (currentX + 2) * currentY * 3;

            //byte[] pixels = new byte[nbBytes];

            Graphics dessin = Graphics.FromImage(img);
            SolidBrush brush = new SolidBrush(Color.Black);
            //LockBits(new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

            for (int i = 0; i < currentX; i++)
            {
                for (int j = 0; j < currentY; j++)
                {
                    //byte r = 0;
                    //byte g = 0;
                    //byte b = 0;
                    if (!modeDemo)
                    {
                        //Vivante
                        if (actuel[i, j].Vivante && suivant[i, j].Vivante)
                        {
                            //g = 255;
                            brush.Color = Color.LimeGreen;
                        }
                        //Mourrante
                        else if (actuel[i, j].Vivante && !suivant[i, j].Vivante)
                        {
                            //r = 255;
                            brush.Color = Color.Red;
                        }
                        //Naissante
                        else if (!actuel[i, j].Vivante && suivant[i, j].Vivante)
                        {
                            //b = 255;

                            brush.Color = Color.Blue;
                        }
                        //Morte
                        else if (!actuel[i, j].Vivante && !suivant[i, j].Vivante)
                        {
                            brush.Color = Color.Black;
                        }
                    }
                    else
                    {
                        if (actuel[i, j].Vivante)
                        {
                            //r = 255;
                            //g = 255;
                            //b = 255;
                            brush.Color = Color.White;
                        }
                        else
                        {
                            brush.Color = Color.Black;
                        }
                    }

                    //pixels[(i * 3) + (j * currentX+2) ] = (byte)r;
                    //pixels[(i * 3) + (j * currentX + 2)] = (byte)g;
                    //pixels[(i * 3) + (j * currentX + 2)] = (byte)b;

                    //Dessine en fonction de la grandeur de l'écran les carrés
                    dessin.FillRectangle(brush, (scrX / currentX + 1) * i, (scrY / currentY + 1) * j, (scrX / currentX) + 1, (scrY / currentY) + 1);
                }
            }
            this.pictureBoxJeu.Image = img;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Dessine le tableau
        /// </summary>
        /// <param name="actuel">Tableau actuel afin de trouver les cellules vivantes</param>
        /// <param name="suivant">Tableau suivant afin de trouver quelles cellules vont vivre ou mourrir</param>
        private void Dessiner(AutomateJeuVie[,] actuel, AutomateJeuVie[,] suivant)
        {
            Image img = this.pictureBoxJeu.Image;
            using (Graphics g = Graphics.FromImage(img))
            {
                g.FillRectangle(new SolidBrush(Color.Gray), 0, 0, pictureBoxJeu.Width, pictureBoxJeu.Height);
            }

            Graphics dessin = Graphics.FromImage(img);
            SolidBrush brush = new SolidBrush(Color.Black);

            for (int i = 0; i < 20; i++)
            {
                for (int j = 0; j < 20; j++)
                {
                    if (!modeDemo)
                    {
                        //Vivante
                        if (actuel[i, j].Vivante && suivant[i, j].Vivante)
                        {
                            brush.Color = Color.LimeGreen;
                        }
                        //Mourrante
                        else if (actuel[i, j].Vivante && !suivant[i, j].Vivante)
                        {
                            brush.Color = Color.Red;
                        }
                        //Naissante
                        else if (!actuel[i, j].Vivante && suivant[i, j].Vivante)
                        {
                            brush.Color = Color.Blue;
                        }
                        //Morte
                        else if (!actuel[i, j].Vivante && !suivant[i, j].Vivante)
                        {
                            brush.Color = Color.Black;
                        }
                    }
                    else
                    {
                        if (actuel[i, j].Vivante)
                            brush.Color = Color.White;
                        else
                            brush.Color = Color.Black;
                    }
                        dessin.FillEllipse(brush, 20*i, 20*j, 20, 20);

                }
            }
            this.pictureBoxJeu.Image = img;
        }