SHOW:
|
|
- or go back to the newest paste.
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 | - | int i = 0; // variable pour parcourir les tableaux (comme d'habitude) |
19 | + | long i = 0; // variable pour parcourir les tableaux (comme d'habitude) |
20 | - | int tailleMot = 0; |
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 | - | while (coupRestant > 0 && !gagne(lettreTrouvee)) |
33 | + | for (i = 0 ; i < tailleMot ; i++) |
34 | lettreTrouvee[i] = 0; | |
35 | ||
36 | ||
37 | while (coupRestant > 0 && !gagne(lettreTrouvee, tailleMot)) | |
38 | { | |
39 | - | for (i = 0; i < 6; i++) |
39 | + | |
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 | - | int gagne(int lettreTrouvee[]) |
164 | + | |
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 |