Aide sur un programme en C
Tunners
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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.
Si quelqu'un l'ayant déjà fait, ou qui maitrise bien le C veuille bien m'aider ce serait très sympas.
Je ne posterais pas mon programme par peur d'être un peu long, donc si quelqu'un peut m'aider qu'il m'envois un MP ou au pire je le posterai ici.
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.
Si quelqu'un l'ayant déjà fait, ou qui maitrise bien le C veuille bien m'aider ce serait très sympas.
Je ne posterais pas mon programme par peur d'être un peu long, donc si quelqu'un peut m'aider qu'il m'envois un MP ou au pire je le posterai ici.
Merci d'avance.
A voir également:
- Aide sur un programme en C
- Mettre en veille un programme - Guide
- Programme demarrage windows - Guide
- Desinstaller un programme sur windows - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
5 réponses
Ok merci pour ta réponse.
Le voilà :
Soyez indulgents c'est mon premier programme donc si c'est pas très joli, mal fait etc, n'en tenez pas vraiment compte.
Merci.
Le voilà :
#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;i<30;j++) { t1[i][j]=0; t2[i][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[i][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[i][j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+29][j]+t1[i+29][j+1]+t1[i][j+29]+t1[i+1][j+29]+t1[i+29][j+29]; } else if((i==0) && (j==29)) { nb=t1[i][j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+29][j+29]+t1[i+29][j-1]+t1[i][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[i][j+1]+t1[i-29][j]+t1[i-29][j+1]+t1[i][j+29]+t1[i-1][j+29]+t1[i-29][j+29]; } else if((i==29) && (j==29)) { nb=t1[i][j-1]+t1[i-1][j]+t1[i-1][j-1]+t1[i][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[i][j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i+1][j+1]+t1[i][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[i][j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i-1][j+29]+t1[i][j+29]+t1[i+1][j+29]; } else if((i==29) && (j!=0) && (j!=29)) { nb=t1[i][j-1]+t1[i-1][j-1]+t1[i-1][j]+t1[i-1][j+1]+t1[i][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[i][j-1]+t1[i+1][j-1]+t1[i+1][j]+t1[i-1][j-29]+t1[i][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[i][j+1]+t1[i+1][j+1]+t1[i+1][j]+t1[i+1][j-1]+t1[i][j-1]+t1[i-1][j-1]; } if((t1[i][j]==0) && (nb==3)) { t2[i][j]=1; } else if((t1[i][j]==1) && ((nb==2) || (nb==3))) { t2[i][j]=1; } else if((t1[i][j]==1) && ((nb==1) || (nb==0) || (nb>3))) { t2[i][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[i][j]; t1[i][j]=t2[i][j]; t2[i][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[i][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[i][j]=tirage(); if (t1[i][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); }
Soyez indulgents c'est mon premier programme donc si c'est pas très joli, mal fait etc, n'en tenez pas vraiment compte.
Merci.
Peut-tu éditer ton code et le mettre entre les balises <code > et </code > (sans les espaces avant les >) tout en l'indentant car là on n'y voit pas très clair :)
Voilà c'est fait, désolé j'ai pas trop l'habitude de ce genre de choses.
Merci de m'accorder de ton temps.
Merci de m'accorder de ton temps.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
J'ai regardé vite fait.
Tout d'abord, je te conseille de ne pas mettre t1 et t2 en variable globale. Définis les plutôt dans la fonction jouer, surtout que tu les passes en arguments dans les fonctions.
Donc, je pense que l'erreur vient tout simplement de ta fonction mise_a_zero. Dans la deuxième boucle for, tu fais for(j=0;i<30;j++); qui sera une condition infinie lors de la première itération de i (i=0).
Je pense que ça devrait mieux marcher après ça. Sinon attention à l'utilisation des fonctions non standard comme initscr().
Cdlt
J'ai regardé vite fait.
Tout d'abord, je te conseille de ne pas mettre t1 et t2 en variable globale. Définis les plutôt dans la fonction jouer, surtout que tu les passes en arguments dans les fonctions.
Donc, je pense que l'erreur vient tout simplement de ta fonction mise_a_zero. Dans la deuxième boucle for, tu fais for(j=0;i<30;j++); qui sera une condition infinie lors de la première itération de i (i=0).
Je pense que ça devrait mieux marcher après ça. Sinon attention à l'utilisation des fonctions non standard comme initscr().
Cdlt