01net    Web


Actuellement en ligne : 180 Utilisateurs dont 7 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> Probleme programme C jeu de la vie
Auteur
Message
 
<     1       >
gaet67
  
   
      ?   @     Posté le 13/05/2007 19:03:22  
Voter pour ce message
Bonjour je dois programmer le jeu de la vie, je dois le remettre mercredi et ca fais une semaine que je cherche a trouver pourquoi il ne fonctionne pas ... peut-etre que quelqu'un pourrait m'aider !
Merci d'avance !
J'ai ecrit le programme avec Dev-C++
Quand je compile j'ai comme message :
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status

Et voila le programme :

#include <stdio.h>
#include <time.h>
#include <stdlib.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;i<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];
}
else if((i=0)&&(j=29))
{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j];
}
else if((i=29)&&(j=0))
{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1];
}
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];
}
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];
}
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];
}
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];
}
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 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 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()
{
int a,fin;
printf(" -=> Bienvenu dans le jeu de la vie <=-");
printf("\n\n\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)
{
srand(time(NULL));
jouer();
}
else
{
fin=1;
}
}
}
while (fin=!1);
return 0;
}
}
herakles1
  
   
      ?   @     Posté le 14/05/2007 20:39:12  
Voter pour ce message
Juste quelques erreurs qui me sautent aux yeux, mais je peux aussi me tromper...
#include <stdio.h>
#include <time.h>
#include <stdlib.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;i<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) /* c'est "==", non ? */
{
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)) /* c'est "==", non ? */

{
nb=t1[j+1]+t1[i+1][j+1]+t1[i+1][j]; /* t1 est sous la forme x[y][z] */
}
else if((i=0)&&(j=29)) /* Est-ce qu'ici aussi, pour ce test, ce ne sont pas "==" ? */
{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j];
}
else if((i=29)&&(j=0)) /* c'est "==", non ? */

{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1];
}
else if((i=0)&&(j!=0)&&(j!=29)) /* c'est "==", non ? */

{
nb=t1[j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+1][j+1]+t1[j+1];
}
else if((j=0)&&(i!=0)&&(i!=29)) /* c'est "==", non ? */

{
nb=t1[i-1][j]+t1[i-1][j+1]+t1[j+1]+t1[i+1][j+1]+t1[i+1][j];
}
else if((i=29)&&(j!=0)&&(j!=29)) /* c'est "==", non ? */

{
nb=t1[j-1]+t1[i-1][j-1]+t1[i-1][j]+t1[i-1][j+1]+t1[j+1];
}
else if((j=29)&&(i!=0)&&(i!=29)) /* c'est "==", non ? */

{
nb=t1[i-1][j]+t1[i-1][j-1]+t1[j-1]+t1[i+1][j-1]+t1[i+1][j];
}
else if((i!=0)&&(i!=29)&&(j!=0)&&(j!=29)) /* c'est "==", non ? */

{
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)) /* c'est "==", non ? */

{
t2[j]=1;
}
else if((t1[j]=1)&&((nb=2)||(nb=3))) /* c'est "==", non ? */

{
t2[j]=1;
}
else if((t1[j]=1)&&((nb=1)||(nb=0)||(nb>3))) /* c'est "==", non ? */

{
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 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 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) /* c'est "==", non ? */

{
printf("X");
}
else
{
printf(" ");
}
}
}
do
{
nombre_voisin(t1,t2);
if(t1=t2)/* c'est "==", non ? */

{
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()
{
int a,fin;
printf(" -=> Bienvenu dans le jeu de la vie <=-");
printf("\n\n\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)
{
srand(time(NULL));
jouer();
}
else
{
fin=1;
}
}
}
while (fin=!1);
return 0;
}
}

-->Message édité par herakles1 le 14/05/2007 20:41:22<--
Minus-et-Cortex
  
   
      ?   @     Posté le 14/05/2007 23:07:12  
Voter pour ce message
Salut!

Outre effectivement, qu'en C, les tests se font à l'aide de l'opérateur == (ou !=) et pas =, le problème du [Linker error] undefined reference to `WinMain@16' vient du fait qu'il n'y a pas de fonction main définie dans le module. En effet, dans la fonction affichage, il manque une } pour fermer le deuxième for. Donc tout ce qui suit est considéré comme faisant partie de cette fonction, donc le int main() aussi. Par conséquent, il faut ajouter une } tout à la fin de la fonction affichage, et également enlever celle qui se trouve tout à la fin de la fonction main() (qui se termine par deux } ). Il faut également dans testfin, ajouter ce qui est en gras dans int cpt,i,j;, ainsi que dans jouer(), int end,i,j;. Je crois que je n'ai rien oublié. Dans ce cas, tu ne devrais plus avoir le problème de liaison, et tu devrais obtenir un binaire.

@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> Probleme programme C jeu de la vie

Aller à :

Page générée en : 0.081s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Antivirus
La protection familiale de référence contre les virus, les logiciels espions et le vos d'informations.
Jeux
Nouveauté :
Serez-vous capable de vous occuper de tous ces adorables bébés ?