Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. main.c :
  2. /*
  3. JEU DU PENDU
  4. réalisé par TOTOW
  5. programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom : REVISITÉ par TOTOW
  6. ---------------------------------------------------------------------------------
  7. main.c
  8. Rôle : programme principal du jeu. (fonction main)
  9. */
  10.  
  11. #include "pendu.h"
  12.  
  13. int main(int argc, char const *argv[])
  14. {
  15.     char lettre = 0; // stocke la valeur retournée par le scant donc la lettre proposée par l'utilisateur
  16.     char motSecret[100] = {0}; // mot à trouver
  17.     int *lettreTrouvee = NULL; // tableau de booléens. Chaque case correspond à une des lettres du mot à trouver. 0 = non trouvé et 1 = lettre trouvé
  18.     int coupRestant = 10; // compteur de coups restants
  19.     long i = 0; // variable pour parcourir les tableaux (comme d'habitude)
  20.     long tailleMot = 0;
  21.  
  22.     printf("Bienvenue dans mon jeu de pendu !!\n\n");
  23.  
  24.     if (!piocherMot(motSecret))
  25.         exit(0);
  26.  
  27.     tailleMot = strlen(motSecret);
  28.  
  29.     lettreTrouvee = malloc(tailleMot * sizeof(int)); // on alloue dynamiquement le tableau lettreTrouvée (dont on ne connait pas la longueur)
  30.     if (lettreTrouvee == NULL)
  31.         exit(0);
  32.  
  33.     for (i = 0 ; i < tailleMot ; i++)
  34.         lettreTrouvee[i] = 0;
  35.  
  36.  
  37.     while (coupRestant > 0 && !gagne(lettreTrouvee, tailleMot))
  38.     {
  39.         printf("\nIl vous reste %d coups pour trouver le mot !", coupRestant);
  40.         printf("\nArriverez vous a trouver le mot secret ? ");
  41.  
  42.         // on affiche le mot secret en masquant les lettres non trouvées.
  43.             for (i = 0; i < tailleMot; i++)
  44.             {
  45.                 if (lettreTrouvee[i]) // si on a trouve la lettre numéro i, on l'affiche
  46.                     printf("%c", motSecret[i]);
  47.  
  48.                 else
  49.                     printf("_ ");
  50.  
  51.             }
  52.  
  53.             printf("Proposez une lettre ! \n");
  54.             lettre = scant();
  55.  
  56.             // si c'était pas la bonne lettre :
  57.             if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
  58.             {
  59.                 coupRestant--;
  60.             }
  61.     }
  62.  
  63.     if (gagne(lettreTrouvee))
  64.         printf("\n\nGagne ! Le mot secret etait bien %s", motSecret);
  65.     else
  66.         printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
  67.  
  68.     return 0;
  69. }
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76. dico.c :
  77. /*
  78. JEU DU PENDU
  79. réalisé par TOTOW
  80. programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom
  81. ---------------------------------------------------------------------------------
  82. dico.c
  83. Rôle : s'occupe des fonctions pour gérer les mots à prendre au hasard
  84. */
  85.  
  86. #include "pendu.h"
  87.  
  88. int piocherMot(char *motPioche)
  89. {
  90.     FILE* dico = NULL; // Le pointeur qui contient le fichier dico.txt
  91.     int     nombreMots = 0;
  92.     int     numMotChoisi = 0;
  93.     int     i = 0;
  94.     int     caractereLu = 0;
  95.  
  96.     dico = fopen("dico.txt", "r"); // on ouvre dico.txt en lecture seule
  97.  
  98.     if (dico == NULL) // Si on n'a PAS réussi à ouvrir dico.txt
  99.     {
  100.         printf("\nImpossible de charger le dictionnaire de mots");
  101.         return 0; // On retourne 0 pour dire que ça n'a pas fonctionné (ce qui va fermer le programme)
  102.     }
  103.  
  104.     // On compte le nombre de mots dans le fichier (il suffit de compter les \n)
  105.     do
  106.     {
  107.         caractereLu = fgetc(dico);
  108.         if (caractereLu == '\n')
  109.             nombreMots++;
  110.  
  111.     } while(caractereLu != EOF);
  112.  
  113.     numMotChoisi = nombreAleatoire(nombreMots); // On pioche un mot au hasard
  114.  
  115.     // On relit le fichier depuis le début. On s'arrête quand on est au bon mot
  116.     rewind(dico); // remet le curseur au début du fichier
  117.     while (numMotChoisi > 0)
  118.     {
  119.         caractereLu = fgetc(dico);
  120.         if (caractereLu == '\n')
  121.             numMotChoisi--;
  122.     }
  123.  
  124.     fgets(motPioche, 100, dico); //on lit la ligne
  125.  
  126.     // On vire l'\n à la fin
  127.     motPioche[strlen(motPioche) - 1] = '\0';
  128.     fclose(dico);
  129.  
  130.     return 1;
  131. }
  132.  
  133. int nombreAleatoire(int nombreMax)
  134. {
  135.     srand(time(NULL));
  136.     return (rand() % nombreMax);
  137. }
  138.  
  139.  
  140.  
  141.  
  142. pendu.c :
  143. /*
  144. JEU DU PENDU
  145. réalisé par TOTOW
  146. programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom : REVISITÉ par TOTOW
  147. ---------------------------------------------------------------------------------
  148. pendu.c
  149. 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)
  150. */
  151.  
  152. #include "pendu.h"
  153.  
  154. char    scant()
  155. {
  156.     char    caractere = 0;
  157.  
  158.     caractere = getchar(); // lire le premier caractère
  159.     caractere = toupper(caractere); // mettre le caractère en majuscule
  160.  
  161.     //lire le caractère suivant jusque au moment où on arrive au \n
  162.     while (getchar() != '\n') ;
  163.  
  164.     return caractere;
  165. }
  166.  
  167. int     gagne(int lettreTrouvee[], long tailleMot)
  168. {
  169.     int i = 0;
  170.     int joueurGagne = 1;
  171.  
  172.     for (i = 0; i < 6; i++)
  173.     {
  174.         if (lettreTrouvee[i] == 0)
  175.             joueurGagne = 0;
  176.     }
  177.  
  178.     return joueurGagne;
  179. }
  180.  
  181. int     rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
  182. {
  183.     int i = 0;
  184.     int bonneLettre = 0;
  185.  
  186.     // on parcourt motSecret pour vérifier si la lettre proposée y est
  187.     for (i=  0; motSecret[i] != '\0'; i++)
  188.     {
  189.         if (lettre == motSecret[i])
  190.         {
  191.             bonneLettre = 1; // on dit que c'est une bonne lettre
  192.             lettreTrouvee[i] = 1; // On met à 1 la case du tableau de booléens correspondant à la lettre actuelle
  193.  
  194.  
  195.         }
  196.     }
  197.  
  198.     return bonneLettre;
  199. }
  200.  
  201.  
  202. pendu.h
  203. /*
  204. JEU DU PENDU
  205. réalisé par TOTOW
  206. programme venant du TP n°2 du livre "Apprenez a programmer en C" d'Open Classroom
  207. ---------------------------------------------------------------------------------
  208. pendu.h
  209. Rôle : prototypes des fonctions de tout les fichiers + les include
  210. */
  211.  
  212. #ifndef DEF_PENDU
  213. #define DEF_PENDU
  214.  
  215. #include <stdio.h>
  216. #include <stdlib.h>
  217. #include <ctype.h>
  218. #include <string.h>
  219. #include <time.h>
  220.  
  221. char    scant();
  222. int     piocherMot(char *motPioche);
  223. int     nombreAleatoire(int nombreMax);
  224. int     gagne(int lettreTrouvee[]);
  225. int     rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
  226.  
  227. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement