Tunners
Nouveau membre
Bonjour,
Alors voilà j'ai à faire le fameux Jeu de la Vie en C et je dois le rendre vendredi.
Non je ne viens pas vous demander de faire mes devoirs mais juste un peu d'aide je pense avoir presque finit mais mon programme ne marche pas (ya encore quelques soucis et questions que je me pose dessus).
Si quelqu'un l'ayant déjà fait, ou qui maitrise bien le C veuille bien m'aider ce serait très sympas.
Voici le programme :
[cpp]
#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <unistd.h>
int t1[30][30],t2[30][30];
int tirage()
{
return rand()%2;
}
void mise_a_zero(int t1[30][30],int t2[30][30])
{
int i,j;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
t1[j]=0;
t2[j]=0;
}
}
}
void affichage(int t1[30][30])
{
int i,j;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if (t1[j]==1)
{
printf("X");
}
else
{
printf(" ");
}
}
}
}
void nombre_voisin(int t1[30][30],int t2[30][30])
{
int i,j,nb;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if((i==0) && (j==0))
{
nb=t1[j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+29][j]+t1[i+29][j+1]+t1[j+29]+t1[i+1][j+29]+t1[i+29][j+29];
}
else if((i==0) && (j==29))
{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+29][j+29]+t1[i+29][j-1]+t1[j-29]+t1[i+1][j-29]+t1[i+29][j-29];
}
else if((i==29) && (j==0))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i-29][j]+t1[i-29][j+1]+t1[j+29]+t1[i-1][j+29]+t1[i-29][j+29];
}
else if((i==29) && (j==29))
{
nb=t1[j-1]+t1[i-1][j]+t1[i-1][j-1]+t1[j-29]+t1[i-1][j-29]+t1[i-29][j]+t1[i-29][j-1]+t1[i-29][j-29];
}
else if((i==0) && (j!=0) && (j!=29))
{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+1][j+1]+t1[j+1]+t1[i+29][j-1]+t1[i+29][j]+t1[i+29][j+1];
}
else if((j==0) && (i!=0) && (i!=29))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i-1][j+29]+t1[j+29]+t1[i+1][j+29];
}
else if((i==29) && (j!=0) && (j!=29))
{
nb=t1[j-1]+t1[i-1][j-1]+t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i-29][j-1]+t1[i-29][j]+t1[i-29][j+1];
}
else if((j==29) && (i!=0) && (i!=29))
{
nb=t1[i-1][j]+t1[i-1][j-1]+t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i-1][j-29]+t1[j-29]+t1[i+1][j-29];
}
else if((i!=0) && (i!=29) && (j!=0) && (j!=29))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+1][j-1]+t1[j-1]+t1[i-1][j-1];
}
if((t1[j]==0) && (nb==3))
{
t2[j]=1;
}
else if((t1[j]==1) && ((nb==2) || (nb==3)))
{
t2[j]=1;
}
else if((t1[j]==1) && ((nb==1) || (nb==0) || (nb>3)))
{
t2[j]=0;
}
}
}
}
void echange(int t1[30][30],int t2[30][30])
{
int i,j,tmp;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
tmp=t1[j];
t1[j]=t2[j];
t2[j]=tmp;
}
}
}
void tempo(int n)
{
int i,x;
x=0;
for(i=0;i<n;i++)
{
x=1+i;
}
}
int testfin(int t1[30][30])
{
int i, j, cpt;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if(t1[j]==0)
{
cpt++;
}
else
{
cpt=cpt;
}
}
}
return cpt;
}
void jouer()
{
int i, j, end;
end=0;
mise_a_zero(t1,t2);
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
t1[j]=tirage();
if (t1[j]==1)
{
printf("X");
}
else
{
printf(" ");
}
}
}
do
{
nombre_voisin(t1,t2);
if(t1==t2)
{
printf("\nL'evolution de l'etat des cases est terminee ...\n");
end=1;
}
else
{
if((testfin(t1)==0)||(testfin(t1)==900))
{
printf("L'evolution de l'etat des cases est terminee ...\n");
end=1;
}
else
{
end=0;
}
}
affichage(t1);
echange(t1,t2);
tempo(100);
}
while(end!=1);
}
int main(void)
{
int a,fin;
printf(" -=> Bienvenu dans le jeu de la vie <=-");
printf("\n\n\n\n");
do
{
fin=0;
printf(" Que voulez-vous faire?\n\n");
printf(" 1 - Afficher les regles du jeu\n");
printf(" 2 - Jouer\n");
printf(" 3 - Quitter\n");
printf(" Entrez le numero qui precede ce que vous souhaitez faire : ");
scanf("%i",&a);
printf("\n");
if(a==1)
{
printf("Tout d'abord il faut preciser que le jeu de la vie n'est pas vraiment un jeu au sens ludique,\n");
printf("puisqu'il ne necessite aucun joueur. En fait il s'agit d'un automate cellulaire, un modele \n");
printf("ou chaque etat conduit mecaniquement a l'etat suivant a partir des regles pre-etablies.\n\n");
printf("Le jeu se deroule sur une grille a deux dimensions dont les cases peuvent prendre deux \n");
printf("etats distincts : 'vivantes' ou 'mortes'.\n");
printf("Les regles sont : \n");
printf("-> une cellule morte possedant exactement trois voisines vivantes devient elle aussi vivante.\n");
printf("-> une cellule vivante possedant deux ou trois voisines vivante reste vivante.\n");
printf("-> dans les autres cas la cellule meurt ou reste a l'etat morte.\n\n");
}
else
{
if(a==2)
{
initscr();
noecho();
move(0,0);
refresh();
srand(time(NULL));
jouer();
endwin();
}
else
{
fin=1;
}
}
}
while (fin=!1);
return (0);
}
[/cpp]
Soyez indulgents c'est mon premier "vrai" programme donc si c'est pas très joli, mal fait etc, n'en tenez pas vraiment compte.
Merci d'avance
Alors voilà j'ai à faire le fameux Jeu de la Vie en C et je dois le rendre vendredi.
Non je ne viens pas vous demander de faire mes devoirs mais juste un peu d'aide je pense avoir presque finit mais mon programme ne marche pas (ya encore quelques soucis et questions que je me pose dessus).
Si quelqu'un l'ayant déjà fait, ou qui maitrise bien le C veuille bien m'aider ce serait très sympas.
Voici le programme :
[cpp]
#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <unistd.h>
int t1[30][30],t2[30][30];
int tirage()
{
return rand()%2;
}
void mise_a_zero(int t1[30][30],int t2[30][30])
{
int i,j;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
t1[j]=0;
t2[j]=0;
}
}
}
void affichage(int t1[30][30])
{
int i,j;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if (t1[j]==1)
{
printf("X");
}
else
{
printf(" ");
}
}
}
}
void nombre_voisin(int t1[30][30],int t2[30][30])
{
int i,j,nb;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if((i==0) && (j==0))
{
nb=t1[j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+29][j]+t1[i+29][j+1]+t1[j+29]+t1[i+1][j+29]+t1[i+29][j+29];
}
else if((i==0) && (j==29))
{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+29][j+29]+t1[i+29][j-1]+t1[j-29]+t1[i+1][j-29]+t1[i+29][j-29];
}
else if((i==29) && (j==0))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i-29][j]+t1[i-29][j+1]+t1[j+29]+t1[i-1][j+29]+t1[i-29][j+29];
}
else if((i==29) && (j==29))
{
nb=t1[j-1]+t1[i-1][j]+t1[i-1][j-1]+t1[j-29]+t1[i-1][j-29]+t1[i-29][j]+t1[i-29][j-1]+t1[i-29][j-29];
}
else if((i==0) && (j!=0) && (j!=29))
{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+1][j+1]+t1[j+1]+t1[i+29][j-1]+t1[i+29][j]+t1[i+29][j+1];
}
else if((j==0) && (i!=0) && (i!=29))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i-1][j+29]+t1[j+29]+t1[i+1][j+29];
}
else if((i==29) && (j!=0) && (j!=29))
{
nb=t1[j-1]+t1[i-1][j-1]+t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i-29][j-1]+t1[i-29][j]+t1[i-29][j+1];
}
else if((j==29) && (i!=0) && (i!=29))
{
nb=t1[i-1][j]+t1[i-1][j-1]+t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i-1][j-29]+t1[j-29]+t1[i+1][j-29];
}
else if((i!=0) && (i!=29) && (j!=0) && (j!=29))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+1][j-1]+t1[j-1]+t1[i-1][j-1];
}
if((t1[j]==0) && (nb==3))
{
t2[j]=1;
}
else if((t1[j]==1) && ((nb==2) || (nb==3)))
{
t2[j]=1;
}
else if((t1[j]==1) && ((nb==1) || (nb==0) || (nb>3)))
{
t2[j]=0;
}
}
}
}
void echange(int t1[30][30],int t2[30][30])
{
int i,j,tmp;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
tmp=t1[j];
t1[j]=t2[j];
t2[j]=tmp;
}
}
}
void tempo(int n)
{
int i,x;
x=0;
for(i=0;i<n;i++)
{
x=1+i;
}
}
int testfin(int t1[30][30])
{
int i, j, cpt;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if(t1[j]==0)
{
cpt++;
}
else
{
cpt=cpt;
}
}
}
return cpt;
}
void jouer()
{
int i, j, end;
end=0;
mise_a_zero(t1,t2);
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
t1[j]=tirage();
if (t1[j]==1)
{
printf("X");
}
else
{
printf(" ");
}
}
}
do
{
nombre_voisin(t1,t2);
if(t1==t2)
{
printf("\nL'evolution de l'etat des cases est terminee ...\n");
end=1;
}
else
{
if((testfin(t1)==0)||(testfin(t1)==900))
{
printf("L'evolution de l'etat des cases est terminee ...\n");
end=1;
}
else
{
end=0;
}
}
affichage(t1);
echange(t1,t2);
tempo(100);
}
while(end!=1);
}
int main(void)
{
int a,fin;
printf(" -=> Bienvenu dans le jeu de la vie <=-");
printf("\n\n\n\n");
do
{
fin=0;
printf(" Que voulez-vous faire?\n\n");
printf(" 1 - Afficher les regles du jeu\n");
printf(" 2 - Jouer\n");
printf(" 3 - Quitter\n");
printf(" Entrez le numero qui precede ce que vous souhaitez faire : ");
scanf("%i",&a);
printf("\n");
if(a==1)
{
printf("Tout d'abord il faut preciser que le jeu de la vie n'est pas vraiment un jeu au sens ludique,\n");
printf("puisqu'il ne necessite aucun joueur. En fait il s'agit d'un automate cellulaire, un modele \n");
printf("ou chaque etat conduit mecaniquement a l'etat suivant a partir des regles pre-etablies.\n\n");
printf("Le jeu se deroule sur une grille a deux dimensions dont les cases peuvent prendre deux \n");
printf("etats distincts : 'vivantes' ou 'mortes'.\n");
printf("Les regles sont : \n");
printf("-> une cellule morte possedant exactement trois voisines vivantes devient elle aussi vivante.\n");
printf("-> une cellule vivante possedant deux ou trois voisines vivante reste vivante.\n");
printf("-> dans les autres cas la cellule meurt ou reste a l'etat morte.\n\n");
}
else
{
if(a==2)
{
initscr();
noecho();
move(0,0);
refresh();
srand(time(NULL));
jouer();
endwin();
}
else
{
fin=1;
}
}
}
while (fin=!1);
return (0);
}
[/cpp]
Soyez indulgents c'est mon premier "vrai" programme donc si c'est pas très joli, mal fait etc, n'en tenez pas vraiment compte.
Merci d'avance