Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- main.c :
- /*
- JEU DU PENDU
- réalisé par TOTOW
- programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom
- ---------------------------------------------------------------------------------
- main.c
- Rôle : programme principal du jeu. (fonction main)
- */
- #include "pendu.h"
- int main(int argc, char const *argv[])
- {
- char lettre = 0; // stocke la valeur retournée par le scant donc la lettre proposée par l'utilisateur
- char motSecret[100] = {0}; // mot à trouver
- int *lettreTrouvee = NULL; // tableau de booléens. Chaque case correspond à une des lettres du mot à trouver. 0 = non trouvé et 1 = lettre trouvé
- int coupRestant = 10; // compteur de coups restants
- int i = 0; // variable pour parcourir les tableaux (comme d'habitude)
- int tailleMot = 0;
- printf("Bienvenue dans mon jeu de pendu !!\n\n");
- if (!piocherMot(motSecret))
- exit(0);
- tailleMot = strlen(motSecret);
- lettreTrouvee = malloc(tailleMot * sizeof(int)); // on alloue dynamiquement le tableau lettreTrouvée (dont on ne connait pas la longueur)
- if (lettreTrouvee == NULL)
- exit(0);
- while (coupRestant > 0 && !gagne(lettreTrouvee))
- {
- printf("\nIl vous reste %d coups pour trouver le mot !", coupRestant);
- printf("\nArriverez vous a trouver le mot secret ? ");
- // on affiche le mot secret en masquant les lettres non trouvées.
- for (i = 0; i < 6; i++)
- {
- if (lettreTrouvee[i]) // si on a trouve la lettre numéro i, on l'affiche
- printf("%c", motSecret[i]);
- else
- printf("_ ");
- }
- printf("Proposez une lettre ! \n");
- lettre = scant();
- // si c'était pas la bonne lettre :
- if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
- {
- coupRestant--;
- }
- }
- if (gagne(lettreTrouvee))
- printf("\n\nGagne ! Le mot secret etait bien %s", motSecret);
- else
- printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
- return 0;
- }
- dico.c :
- /*
- JEU DU PENDU
- réalisé par TOTOW
- programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom
- ---------------------------------------------------------------------------------
- dico.c
- Rôle : s'occupe des fonctions pour gérer les mots à prendre au hasard
- */
- #include "pendu.h"
- int piocherMot(char *motPioche)
- {
- FILE* dico = NULL; // Le pointeur qui contient le fichier dico.txt
- int nombreMots = 0;
- int numMotChoisi = 0;
- int i = 0;
- int caractereLu = 0;
- dico = fopen("dico.txt", "r"); // on ouvre dico.txt en lecture seule
- if (dico == NULL) // Si on n'a PAS réussi à ouvrir dico.txt
- {
- printf("\nImpossible de charger le dictionnaire de mots");
- return 0; // On retourne 0 pour dire que ça n'a pas fonctionné (ce qui va fermer le programme)
- }
- // On compte le nombre de mots dans le fichier (il suffit de compter les \n)
- do
- {
- caractereLu = fgetc(dico);
- if (caractereLu == '\n')
- nombreMots++;
- } while(caractereLu != EOF);
- numMotChoisi = nombreAleatoire(nombreMots); // On pioche un mot au hasard
- // On relit le fichier depuis le début. On s'arrête quand on est au bon mot
- rewind(dico); // remet le curseur au début du fichier
- while (numMotChoisi > 0)
- {
- caractereLu = fgetc(dico);
- if (caractereLu == '\n')
- numMotChoisi--;
- }
- fgets(motPioche, 100, dico); //on lit la ligne
- // On vire l'\n à la fin
- motPioche[strlen(motPioche) - 1] = '\0';
- fclose(dico);
- return 1;
- }
- int nombreAleatoire(int nombreMax)
- {
- srand(time(NULL));
- return (rand() % nombreMax);
- }
- pendu.c :
- /*
- JEU DU PENDU
- réalisé par TOTOW
- programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom
- ---------------------------------------------------------------------------------
- pendu.c
- Rôle : fonctions principales du programme (servant de fonction globale on pourrait dire même si ce terme n'existe pas par contre ce rôle est beaucoup trop long donc je vais m'arrêter)
- */
- #include "pendu.h"
- char scant()
- {
- char caractere = 0;
- caractere = getchar(); // lire le premier caractère
- caractere = toupper(caractere); // mettre le caractère en majuscule
- //lire le caractère suivant jusque au moment où on arrive au \n
- while (getchar() != '\n') ;
- return caractere;
- }
- int gagne(int lettreTrouvee[])
- {
- int i = 0;
- int joueurGagne = 1;
- for (i = 0; i < 6; i++)
- {
- if (lettreTrouvee[i] == 0)
- joueurGagne = 0;
- }
- return joueurGagne;
- }
- int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
- {
- int i = 0;
- int bonneLettre = 0;
- // on parcourt motSecret pour vérifier si la lettre proposée y est
- for (i= 0; motSecret[i] != '\0'; i++)
- {
- if (lettre == motSecret[i])
- {
- bonneLettre = 1; // on dit que c'est une bonne lettre
- lettreTrouvee[i] = 1; // On met à 1 la case du tableau de booléens correspondant à la lettre actuelle
- }
- }
- return bonneLettre;
- }
- pendu.h
- /*
- JEU DU PENDU
- réalisé par TOTOW
- programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom
- ---------------------------------------------------------------------------------
- pendu.h
- Rôle : prototypes des fonctions de tout les fichiers + les include
- */
- #ifndef DEF_PENDU
- #define DEF_PENDU
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <string.h>
- #include <time.h>
- char scant();
- int piocherMot(char *motPioche);
- int nombreAleatoire(int nombreMax);
- int gagne(int lettreTrouvee[]);
- int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement