Bonjour a tous !
J'aurai besoin de courageux programmeur tel que vous pour résoudre un problème dans mon programme du pendu que je n'arrive pas a régler moi-même . Alors mon programme est fini : on peut jouer, faire une nouvelle partie et il y a les modes 1 et 2 joueurs. Mon problème est au niveau du mode 2 joueurs. Le joueur 1 entre un mot, l'ordi le met en majuscule et le met dans motSecret (le mot a deviner). c'est quand le joueur 2 doit deviner le mot secret qu'il y a un problème : quand il entre une première lettre, qu'elle soit dans le mot ou pas, le programme fait comme si elle n'y était pas. Par contre si, imaginons, que la première lettre que l'on propose est dans le mot, le programme fait comme si elle ni était pas (je sais c'est ce que je viens de dire mais c'est la suite qui est intéréssante ), et si on la repropose comme deuxième lettre, cette fois si le programme "accepte qu'elle soit dans le mot" (le compteur de coups ne diminue pas et la lettre s'affiche dans le mot remplacer par "-------"...).
Il y a également un problème dans le mode un joueur, lors d'une nouvelle partie, il y a le même problème expliqué ci-dessus...
Voila mon problème.
Sinon, j'aimerais que vous, les programmeurs expérimenté(ou pas ), me disent ce que vous pensez de ma façon de programmer (bonne, mauvaise, ce qui faut améliorer... )
Merci a tous ceux qui s'intérèsseront a moi et qui m'aideront
Sachez quand meme que j'ai eu du mal alors je me suis aider un peu par le site ou j'apprend le C.
Bon alors deja voici mon header :
Ensuite un fichier source contenant certaines fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char lireCaractere (); long nombreAleatoire(long nombreMax); char *piocherMot(); char *choisirMot();
Ensuite le fichier source qui utilise le dictionnaire (j'ai eu du mal alors je me suis aidé) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <ctype.h> #include <string.h> char lireCaractere () { long caractere = 0; caractere = getchar(); caractere = toupper(caractere); while (getchar() != '\n'); return caractere; } char *choisirMot() // le joueur 1 choisi un mot que le joueur 2 devra deviner { char motChoisi[100]; char *motDefinitif = NULL; long i = 0; printf("Joueur 1, entre un mot que le joueur 2\n"); printf("devra deviner : "); scanf("%s", motChoisi); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); /* pour que le joueur 2 ne voit pas le mot du joueur 1 */ for(i = 0 ; i < strlen(motChoisi) ; i++) { motChoisi[i] = toupper(motChoisi[i]); } motDefinitif = malloc((strlen(motChoisi) + 1) * sizeof(char)); strcpy(motDefinitif, motChoisi); return motDefinitif; }
Et enfin, le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include "header.h" char *piocherMot() { FILE *dico = NULL; long nombreDeMots = 0, numMotChoisi = 0; int caractereLu = 0; char motPioche[100]; char *motRetourne = NULL; dico = fopen("dico.txt","r"); if(dico == NULL) { printf("Impossible d'ouvrir le fichier"); } do { caractereLu = fgetc(dico); if(caractereLu == '\n') { nombreDeMots++; } } while (caractereLu != EOF); numMotChoisi = nombreAleatoire(nombreDeMots); rewind(dico); do { caractereLu = fgetc(dico); if(caractereLu == '\n') { numMotChoisi--; } } while(numMotChoisi > 0); fgets(motPioche, 100, dico); motPioche[strlen(motPioche) - 1] = '\0'; motRetourne = malloc((strlen(motPioche) + 1) * sizeof(char)); strcpy(motRetourne, motPioche); fclose(dico); return motRetourne; } long nombreAleatoire(long nombreMax) { srand(time(NULL)); return (rand() % nombreMax + 1); }
Merci a tous les courageux qui sont arriver jusque la !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include "header.h" int main(int argc, char *argv[]) { long nouvellePartie = 0; do { char *motSecret; // mot à deviner long nombreDeCoups = 10, nombreDeLettres = 0, nombreDeLettresDevinees = 0; long lettreEntree = 0, lettreAbsente = 0, partieFinie = 0, nombreDeJoueurs = 0, i = 0, j = 0; printf(" Le pendu\n\n\n\n"); // titre printf("Devinez le mot secret en 10 coups maximum.\n\n"); do { printf("Mode 1 joueur ou 2 joueurs ?\n"); printf("1 : 1 joueur\n2 : 2 joueurs\nReponse : "); scanf("%ld", &nombreDeJoueurs); printf("\n\n"); } while(nombreDeJoueurs != 1 && nombreDeJoueurs != 2); if(nombreDeJoueurs == 1) { motSecret = piocherMot(); if(motSecret == NULL) { exit(0); } } else { motSecret = choisirMot(); } nombreDeLettres = strlen(motSecret); // nombre de lettre du mot secret char *motDevine = NULL; // allocation dynamique du tableau motDevine motDevine = malloc((nombreDeLettres + 1)* sizeof(char)); if(motDevine == NULL) // si il y a une erreur { exit(0); } for(i = 0 ; i < nombreDeLettres + 1 ; i++) // initialise motDevine a "-------" { motDevine[i] = '-'; if( i == nombreDeLettres ) { motDevine[i] = '\0'; } } do // Partie principale du jeu { printf("Tu as %ld coups\n", nombreDeCoups); printf("Mot Secret : %s\n", motDevine); printf("Entre une lettre : "); lettreEntree = lireCaractere(); for( j = 0 ; j < nombreDeLettres ; j++) // verifie si la lettre entrée est dans le mot ou pas { if( lettreEntree == motSecret[j] ) { if( lettreEntree == motDevine[j]) { nombreDeLettresDevinees--; } motDevine[j] = motSecret[j]; nombreDeLettresDevinees++; } else { lettreAbsente++; } } if( lettreAbsente == nombreDeLettres ) { nombreDeCoups--; } lettreAbsente = 0; printf("\n"); if (nombreDeLettresDevinees == nombreDeLettres) { partieFinie = 1; } else if ( nombreDeCoups <= 0) { partieFinie = 1; } } while (partieFinie != 1); if (nombreDeCoups <= 0) // perdu { printf("\nDesole tu as perdu (nombre de coups trop eleve).\n"); printf("Le mot secret etait : %s\n\n", motSecret); } else // gagné { printf("\n\n Mot secret : %s\n\n", motSecret); printf("Bravo tu as trouve le mot secret !\n\n"); } free(motSecret); free(motDevine); printf("Une nouvelle partie ? \n"); printf("1 : oui\n2 : non\nReponse : "); scanf("%ld", &nouvellePartie); printf("\n\n"); } while(nouvellePartie == 1); system("PAUSE"); return 0; }
Partager