/* Jeu du Pendu dico.c ------ Ces fonctions piochent au hasard un mot dans un fichier dictionnaire pour le jeu du Pendu */ #include #include #include #include #include "dico.h" int piocherMot(char *motPioche) { FILE* dico = NULL; // Le pointeur de fichier qui va contenir notre fichier long nombreMots = 0, numMotChoisi = 0, i = 0; int caractereLu = 0; dico = fopen("dico.txt", "r"); // On ouvre le dictionnaire en lecture seule // On vérifie si on a réussi à ouvrir le dictionnaire if (dico == NULL) // Si on n'a PAS réussi à ouvrir le fichier { printf("\n Impossible de charger le dictionnaire de mots"); return 0; // On retourne 0 pour indiquer que la fonction a échoué // À la lecture du return, la fonction s'arrête immédiatement. } // On compte le nombre de mots dans le fichier (il suffit de compter les // entrées \n do { caractereLu = fgetc(dico); if (caractereLu == '\n') nombreMots++; } while(caractereLu != EOF); printf("\n Nombre de mots %d",nombreMots); numMotChoisi = nombreAleatoire(nombreMots); // On pioche un mot au hasard // On recommence à lire le fichier depuis le début. On s'arrête lorsqu'on est arrivé au bon mot rewind(dico); while (numMotChoisi > 0) { caractereLu = fgetc(dico); if (caractereLu == '\n') numMotChoisi--; } /* Le curseur du fichier est positionné au bon endroit. On n'a plus qu'à faire un fgets qui lira la ligne */ fgets(motPioche, 100, dico); // On vire le \n à la fin motPioche[strlen(motPioche) - 1] = '\0'; fclose(dico); return 1; // Tout s'est bien passé, on retourne 1 } int nombreAleatoire(int nombreMax) { srand(time(NULL)); return (rand() % nombreMax); } void recup_stat(stat_joueur *stat)//on envoi a la fonction des pointeur pour modifie les variable si deja jouer { FILE* stat_doc = NULL; char joueur_enregistre [20]= {0}; stat_doc = fopen("stat_doc.txt","r"); // on ouvre le fichier stat pour lire if(stat_doc == NULL) { printf(" nous n'avons pas reussi a ouvrire le fichier"); return 0; } do //on teste si le joueur a deja jouer { fscanf(stat_doc,"%s",joueur_enregistre);//on récupère le nom des joueurs deja enregistre ligne par ligne (strcmp(joueur_enregistre,stat->joueur1));// on teste } while(joueur_enregistre != EOF && (strcmp(joueur_enregistre,stat->joueur1)));//la boucle tour tant qu'une des deux condition ne sont pas remplie if(strcmp(joueur_enregistre,stat->joueur1))// si oui on recupere c'est stat { fscanf(stat_doc,"%d %d %d",stat->victoires,stat->defaites,stat->parties); } fclose(stat_doc); } void enregistre_stat(stat_joueur stat) { FILE* stat_doc = NULL; char joueur_enregistre [20]= {0}; stat_doc = fopen("stat_doc.txt","r+"); // on ouvre le fichier stat pour lire et ecrire if(stat_doc == NULL) { printf(" nous n'avons pas reussi a ouvrire le fichier"); return 0; } do //on teste si le joueur a deja jouer { fscanf(stat_doc,"%s",joueur_enregistre);//on récupère le nom des joueurs deja enregistre ligne par ligne (strcmp(joueur_enregistre,stat.joueur1));// on teste } while(joueur_enregistre != EOF && (strcmp(joueur_enregistre,stat.joueur1)));//la boucle tour tant qu'une des deux condition ne sont pas remplie if(strcmp(joueur_enregistre,stat.joueur1))// si oui on recupere c'est stat { fprintf(stat_doc,"%s %d %d %d",stat.joueur1,stat.victoires,stat.defaites,stat.parties); } else { fprintf(stat_doc,"%s %d %d %d",stat.joueur1,stat.victoires,stat.defaites,stat.parties); } }