Le jeu de la vie en c++

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 469 fois - Téléchargée 35 fois

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

Ajouter un commentaire Commentaires
Messages postés
30
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
2 avril 2008

usleep(100),hum... il me semble que c'est pr instaurer une pause de 100 millisecondes ds le progr,mais je crois avec risque de me tromper que ça fonctionne avec des systemes 32 bits.Moi j'ai souvent utilisé les fonctions _Sleep ou encore delay,mais tt depend des compilateurs par exple _Sleep ne marche pas sous linux(redhat)... Essayes donc de changer usleep par l'une des fctions ci dessus et vois si ça va... @++
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
C'est qoui la fonction usleep(100); ?

Je n'arrive pas a compiler justement a cause d'elle
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Salut,
pour rendre la chose plus rigolote,
je me demande si tu pourrais écrire ça
en utilisant le moins possible de 'if' et de 'for' ?

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)