Advertisement
Guest User

Untitled

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