Problème réalisation d'un pendu
Bonjour a tous :D !
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 :mouarf: . 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 :P ), 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 :mouarf: ), 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 :
Code:
1 2 3 4
| char lireCaractere ();
long nombreAleatoire(long nombreMax);
char *piocherMot();
char *choisirMot(); |
Ensuite un fichier source contenant certaines fonctions :
Code:
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;
} |
Ensuite le fichier source qui utilise le dictionnaire (j'ai eu du mal alors je me suis aidé) :
Code:
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);
} |
Et enfin, le main :
Code:
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;
} |
Merci a tous les courageux qui sont arriver jusque la :king: !