void debut_jeu(grille *g, grille *gc){ char c = getchar(); while (c != 'q') // touche 'q' pour quitter { switch (c) { case '\n' : { // touche "entree" pour évoluer evolue(g,gc); temps++; efface_grille(*g); affiche_grille(*g); break; } case 'c' : { // touche "c" pour activer / desactiver le voisinage cyclique if (compte_voisins_vivants == compte_voisins_cyclique){ compte_voisins_vivants = compte_voisins_non_cyclique; printf("voisinage non cyclique \n"); } else { compte_voisins_vivants = compte_voisins_cyclique; printf("voisinage cyclique \n"); } while(getchar() != '\n'); printf("\n\e[%dA",3); break; } case 'v' : { // touche "v" pour activer/desactiver le viellissement des cellules if (set_continue_vie == set_ne_viellit_pas){ set_continue_vie = set_viellit; printf("viellissement ON \n"); } else { set_continue_vie = set_ne_viellit_pas; printf("viellissement OFF \n"); } while(getchar() != '\n'); printf("\n\e[%dA",3); break; } case 'o' : { // teste si la colonie est oscillante periode = oscillante(*g); if (periode==0) printf("Colonie non-oscillante \n"); else printf("Colonie oscillante (période : %d)\n",periode); while(getchar() != '\n'); printf("\n\e[%dA",3); break; } default : { // touche non traitée printf("\n\e[1A"); break; } } c = getchar(); } return; }
void debut_jeu(grille *g, grille *gc){ char c = getchar(); while (c != 'q') // touche 'q' pour quitter { printf("\e[J"); switch (c) { case '\n' : { // touche "entree" pour évoluer evolue(g,gc); efface_grille(*g); affiche_grille(*g); break; } case 'c' : // touche pour changer de mode cyclique/non-cyclique { cyclique=abs(cyclique-1); compte_voisins_vivants=(cyclique==0) ? compte_cyclique : compte_non_cyclique; printf("\n\e[1A"); break; } case 'v' : // touche pour activer/désactiver le veillissement { viellissement=abs(viellissement-1); if (!viellissement) { //effacer les âges d'avant int i,j; for (i=0; i<g->nbl; i++) for (j=0;j<g->nbc; j++) if (est_vivante(i,j,*g)) set_vivante(i,j,*g); else set_morte(i,j,*g); } printf("\n\e[1A"); break; } case 'o' : // touche pour tester si la colonie est oscillante { int periode=0, failsafe=0; grille gtest,gmorte; //g doit rester inchangée alloue_grille (g->nbl, g->nbc, >est); alloue_grille (g->nbl, g->nbc, &gmorte); copie_grille(*g,gtest); do { periode++; failsafe++; evolue(>est,gc); } while (!( compare_grilles(gtest,*g) || compare_grilles(gtest,gmorte) ) && failsafe < MAX_TEST ); //soit on retombe sur la même configuration (-> oscillant) //soit toutes les cellules seront mortes à un moment (-> pas oscillant) if (compare_grilles(gtest,gmorte) || failsafe==MAX_TEST) printf("Pas oscillant."); else printf("Oscillant. Période: %d ",periode); libere_grille(>est); libere_grille(&gmorte); break; } default : { // touche non traitée printf("\n\e[1A"); break; } } c = getchar(); } return; }