Пример #1
0
void init_grille_from_file (char * filename, grille* g){
	FILE * pfile = NULL;
	pfile = fopen(filename, "r");
	assert (pfile != NULL);
	
    int i,j,n,l,c,vivantes=0,non_viables=0;
	
	fscanf(pfile, "%d", & l);
	fscanf(pfile, "%d", & c);
	
	alloue_grille(l,c,g);
	
	fscanf(pfile, "%d", & vivantes);
	for (n=0; n< vivantes; ++n){
		fscanf(pfile, "%d", & i);
		fscanf(pfile, "%d", & j);
		set_vivante(i,j,*g);
	}
	
    fscanf(pfile, "%d", & non_viables);
    for (n=0; n< non_viables; ++n){
        fscanf(pfile, "%d", & i);
        fscanf(pfile, "%d", & j);
        set_non_viable(i,j,*g);
    }

	fclose (pfile);
	return;
}
Пример #2
0
/**
@brief Loads the content of an element of type "grille" from a compatible text file,
plus loads the gamer position
@param <grille * g> <an element of type "grille" to load the file content in>
@param <char filename[]> <file name>
@return <void>
*/
grille * creer_grille(char filename[], joueur * j)
{
    FILE* fichier = NULL;
    fichier = fopen(filename, "r");
    if (fichier != NULL)
    {
        int n, m;
        fscanf(fichier,"%d %d", &n, &m);
        fgetc(fichier);
        grille * g = alloue_grille(n, m);

        fscanf(fichier, "%d %d", &j -> x, &j -> y);
        fgetc(fichier);

        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                fscanf(fichier,"%d",&g -> content[i][j]);
            }
            fgetc(fichier);
        }
        fclose(fichier);
        return g;
    }
    else {
        printf("Impossible d'ouvrir le fichier grille.txt");
        exit (1);
    }
}
Пример #3
0
grille charger_grille(grille L, char* nom,char* mode){
	int i=0,v=0;
	grille charge=alloue_grille(L->N,L->M);
	FILE* fichier = NULL;
	char chaine[TAILLE_MAX] = "";

fichier = fopen(nom, mode);

	if (fichier != NULL)
  {
 		 while (fgets(chaine, TAILLE_MAX, fichier) != NULL )
     {

			 if(v==L->N)
				 break;

     	 for(i=0;i<L->M;i++)
       charge->matrice[v][i]=chaine[i];
			 
				v++;
	   }

  	 fclose(fichier);
  }
	else
		exit(1);

return charge;
}
Пример #4
0
/** 
 * \brief initialisation et début du jeu (mode graphique)
 * \param argc nombre d'arguments shell
 * \param argv tableau des arguments shell
 */
int main (int argc, char *argv[]){
	
	// argument test
	if (argc != 2 ){
		printf("usage : main <fichier grille>\n");
		return 1;
	}
	
	// X11 display
	Display *dpy;
	Window rootwin;
	Window win;
	int scr;
	
	// init the display
	if(!(dpy=XOpenDisplay(NULL))) {
		fprintf(stderr, "ERROR: Could not open display\n");
		exit(1);
	}

	scr=DefaultScreen(dpy);
	rootwin=RootWindow(dpy, scr);

	win=XCreateSimpleWindow(dpy, rootwin, 1, 1, SIZEX, SIZEY+70, 0, 
			BlackPixel(dpy, scr), BlackPixel(dpy, scr));

	XStoreName(dpy, win, "jeu de la vie");
	XSelectInput(dpy, win, ExposureMask|ButtonPressMask|KeyPressMask);
	XMapWindow(dpy, win);
	
	// create cairo surface
	cairo_surface_t *cs; 
	cs=cairo_xlib_surface_create(dpy, win, DefaultVisual(dpy, 0), SIZEX, SIZEY+70);
	
	// init program data
	grille g, gc;
	init_grille_from_file(argv[1],&g);
	alloue_grille (g.nbl, g.nbc, &gc);
	
	// run the event loop
	debut_jeu(&g, &gc, dpy, cs);
	
	// free program data
	libere_grille(&g);
	libere_grille(&gc);

	cairo_surface_destroy(cs); // destroy cairo surface
	XCloseDisplay(dpy); // close the display
	return 0;
}
Пример #5
0
grille charger_image( char* nom_du_fichier,char* mode,int seuil) {
    int i=0,v=0;
    char R=0,V=0,B=0;
    FILE* fichier = NULL;
    int ValMax=0;
    char modeImage[2];
    int sizeImageH=0, sizeImageV=0;
    char chaine[TAILLE_MAX] = "";
    grille charge;

    fichier = fopen(nom_du_fichier, mode);

    if (fichier != NULL)
    {

        fgets(modeImage,TAILLE_MAX,fichier);                    //1er ligne le mode
        fgets(chaine,TAILLE_MAX,fichier);                       //2eme ligne meta donnee de creation de l'image -> On passe simplement a la ligne suivante
        fscanf(fichier,"%d %d", &sizeImageH,&sizeImageV);       //3eme ligne recuperation de la taille de l'image
        fscanf(fichier,"%d", &ValMax);                          //4eme valeurs max des composantes

        if (sizeImageH>15)                                      // tronque l'image si elle est plus grande que 15 colonneS
            sizeImageH=15;

        if (sizeImageV>15)                                      // tronque l'image si elle est plus grande que 15 lignes
            sizeImageV=15;
        charge=alloue_grille(sizeImageH,sizeImageV);     // creer un logigraphe a la taille de l'image

//if (modeImage=="P3"){

        for(i=0; i<sizeImageV; i++) {
            for(v=0; v<sizeImageH; v++) {
                fscanf(fichier,"%c", &R);
                fscanf(fichier,"%c", &V);
                fscanf(fichier,"%c", &B);

                if((R*0.299+V*0.587+B*0.114)<=seuil)
                    charge->matrice[i][v]='+';
                else
                    charge->matrice[i][v]='.';

            }
        }
//}

        fclose(fichier);
    }
    return charge;
}
Пример #6
0
int main (int argc, char ** argv) {
	
	if (argc != 2 )
	{
		printf("usage : main <fichier grille>");
		return 1;
	}

	grille g, gc;
	init_grille_from_file(argv[1],&g);
	alloue_grille (g.nbl, g.nbc, &gc);
	affiche_grille(g);
	
	debut_jeu(&g, &gc);

	libere_grille(&g);
	libere_grille(&gc);
	return 0;
}
Пример #7
0
grille compter_ligne(grille l){
	grille valeur=alloue_grille(l->N,l->M);
	int i=0,v=0;
	int x=0;


	for(i=0;i<l->N;i++)
		for(v=0;v<l->M;v++)
	  	valeur->matrice[i][v]=0;

	for(i=0;i<l->N;i++){
		x=0;
		for(v=0;v<l->M;v++){
	  	if (l->matrice[i][v]=='+')
	  	  valeur->matrice[i][x]+=1;
	  	else if ((valeur->matrice[i][x]!=0) && (l->matrice[i][v]=='.'))
	    	x++;							
		}
	}
return valeur;
}
Пример #8
0
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, &gtest);
                alloue_grille (g->nbl, g->nbc, &gmorte);
                copie_grille(*g,gtest);
                do {
                    periode++;
                    failsafe++;
                    evolue(&gtest,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(&gtest);
                libere_grille(&gmorte);
                break;
            }
			default : 
            { // touche non traitée
				printf("\n\e[1A");
				break;
			}
        }
		c = getchar(); 
	}
	return;	
}