View difference between Paste ID: 38PJ1dx9 and yMKXwqX2
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