Le jeu de la vie en c++

Contenu du snippet

Ce source simule le jeu de la vie. Il a été édité et tester sous linux ( fedora core 2 ). L'utilisteur indique le nombre de ligne et le nombre de colonnes du quadrillage. Pour exécuter le programme une fois compilé, il suffit de taper
./nom_programme nb_lignes nb_colonnes
Les phases se déroulent succesivement. Veuillez m excuser je n ai pas programmé de fonction d arret du programme, pour le stopper faite simplemen controle + c

Source / Exemple :


#include <iostream>
#include <vector>
#include <cmath>
#include <unistd.h>
#include <sstream>
using namespace std;

void vect (vector<bool> v)
{
  for (int i=0;i<v.size();i++)
    {
      if (i == v.size()-1)
	{
          if (v[i]) cout << '*'<< endl; 
          else cout << ' ' << endl;
        }
      else 
      {
        if (v[i]) cout << "*";
        else cout << " ";
      }
    }
}

void affiche_vect(vector <vector <bool> > v)
{
  for (int i=0;i<v.size();i++)
    vect(v[i]);
}

int nbvie (unsigned int li, unsigned int co, vector <vector <bool> > &tab)
{
  int nb=0;
  int x=tab[0].size();
  int y=tab.size();
  for (int i=-1;i<=1;i++)
    for (int j=-1;j<=1;j++)
      if (tab[(li+i+y)%y][(co+j+x)%x]) ++nb;
	if (tab[li][co]) --nb;
  return (nb);
}

vector <vector <bool> > init (unsigned int li, unsigned int co)
{
  srand(time(NULL));
  vector <vector <bool> > tab (li, vector <bool> (co, false));
  for (int i=0;i<li;i++)
    for (int j=0;j<co;j++)
      if (rand()%2==1) tab[i][j]=true;
  return (tab);
}

bool evo (unsigned int li, unsigned int co, vector <vector <bool> > &tab)
{
  bool etat = tab[li][co];
  int vie = nbvie(li,co,tab);
  if (!etat) {
    if (vie == 3) 
      etat = true;
  }
  else {
    if (!(vie == 3 || vie == 2)) 
      etat=false;
  }
  return(etat);
}

vector<int> compte(vector <vector <bool> > tab)
{
  vector<int> stock;
  for(int i = 0; i < tab.size(); ++i)
    for(int j = 0; j < tab[0].size(); ++j) {
      bool a = evo(i, j, tab);
      if(tab[i][j] != a) {
	stock.push_back(i);
	stock.push_back(j);
      }
    }
   return stock;
}	

int main (int argc, char *argv[])
{
	system("clear");
	int li,co;
	istringstream iss(argv[1]);
	iss >> li;
	istringstream iss1(argv[2]);
	iss1 >> co;
	vector <vector <bool> > tab = init(li,co);
                system("clear");
	affiche_vect(tab);
	int n = 1;
	while (n)
	{
                                usleep(100);
		system("clear");  
		vector<int> coord_modif = compte(tab);
		for(int a = 0; a < coord_modif.size(); a+=2)
		  {
		  int i = coord_modif[a];
		  int j = coord_modif[a + 1];
		  tab[i][j] = ! tab[i][j];
		  }
		    
		affiche_vect(tab);
		cout << "phase " << n << endl;
		++n;
	}
	return (0);
}

Conclusion :


Voila si vous voyez des choses à améliorer ou si vous voulez des explications sur certains bout de code, vous pouvez me contacter

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (mage08)