Bonsoir a tous.
J'ai un soucis avec le mode Multi du jeu le plus ou moins que j'ai code en langage C. Voici le probleme, des que le joueur rentre les infos qui lui sont demande a savoir le nombre de termes ou la longueur du mot secret et le mot secret, le jeu s’arrête brutalement !!! Voici le code du jeu en question :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#define SOLO 1
#define MULTI 2
typedef enum Bool Bool;
enum Bool
{
TRUE, FALSE
};
typedef struct NiveauJeu NiveauJeu;
struct NiveauJeu
{
char nomNiveau[100];
int min;
int nombreMot;
int coupMax;
};
NiveauJeu niveaux[] =
{
{"Facile", 0, 20, 15},
{"Moyen", 0, 20, 10},
{"Difficile", 0, 20, 7}
};
int demanderModeJeu()
{
int modeJeu;
printf("
");
printf("MODE DE JEU
");
printf("Bien vouloir choisir un mode de jeu !
");
printf("1. Mode Solo
2. Mode Multi
");
do
{
printf("Votre choix ? ");
scanf("%d", &modeJeu);
}while(modeJeu < 1 || modeJeu > 2);
return modeJeu;
}
NiveauJeu demanderNiveauJeu()
{
int choixNiveau;
printf("
");
printf("NIVEAU DE JEU
");
printf("Bien vouloir choisir un niveau de jeu !
");
printf("1. Facile
2. Moyen
3. Difficile
");
do
{
printf("Votre choix ? ");
scanf("%d", &choixNiveau);
}while(choixNiveau < 1 || choixNiveau > 3);
return niveaux[choixNiveau - 1];
}
int demanderNombre(int nbCoupsRestants)
{
int nombreSaisi;
printf("
");
printf("Attention, il vous reste seuleument %d coups
", nbCoupsRestants);
printf("Quel est le nombre ? ");
scanf("%d",&nombreSaisi);
return nombreSaisi;
}
int demanderMotSecret()
{
int tailleMot = 0, i = 0;
char *motSecret = NULL;
printf("Nombre de termes ? ");
scanf("%d", &tailleMot);
motSecret = malloc(tailleMot * sizeof(char));
if(motSecret == NULL)
{
exit(0);
}
printf("mot secret ? ");
for(i = 0; i < tailleMot; i++)
{
scanf("%s", &motSecret[i]);
}
return *motSecret;
}
int nombreAleatoire(int nombreMot)
{
srand(time(NULL));
return (rand() % nombreMot); //le nombre de mot contenu dans le dictionnaire.
}
void debutPartie()
{
printf("
");
printf("**************************************
");
printf("************LE JEU DU PENDU***********
");
printf("********Code par Jean Dechanel********
");
printf("**************************************
");
}
void viderBuffer()
{
int c = 0;
while(c != '
' && c != EOF)
{
c = getchar();
}
}
int lire(char* chaine, int longueurChaine)
{
char* positionEntree = NULL;
if(fgets(chaine, longueurChaine, stdin) != NULL)
{
positionEntree = strchr(chaine, '
');
if(positionEntree != NULL)
{
*positionEntree = ' ';
}return 1;
}else
{
viderBuffer();
return 0;
}
}
long lireLong()
{
char nombreTexte[100] = {0};
if(lire(nombreTexte, 100))
{
return strtol(nombreTexte, NULL, 10);
}else
{
viderBuffer();
return 0;
}
}
int tireMotAleatoire(char motSecret[])
{
int caractereLu = 0, nombreMot = 0, numMotSecret = 0;
FILE* dico = NULL;
int caracterelu = 0;
dico = fopen("/home/ubuntu/workspace/dico.txt", "r");
if(dico == NULL)
exit(0);
else
{
do
{
caracterelu = fgetc(dico);
if(caracterelu == '
')
nombreMot++;
}while(caracterelu != EOF);
numMotSecret = nombreAleatoire(nombreMot);
rewind(dico);
while(numMotSecret > 0)
{
caractereLu = fgetc(dico);
if(caractereLu == '
')
numMotSecret--;
}
fgets(motSecret, 100, dico);
motSecret[strlen(motSecret) - 1] = ' ';
fclose(dico);
}
return EXIT_FAILURE;
}
int afficherMotMasque(char motSecret[], int lettresTrouvees[], int taille)
{
int i;
for (i = 0 ; i < taille ; i++)
{
if (lettresTrouvees[i])
printf("%c", motSecret[i]);
else
printf("*");
}
return motSecret[i];
}
int compterMot(int nombreMot)
{
FILE* dico = NULL;
int caracterelu = 0;
dico = fopen("/home/ubuntu/workspace/dico.txt", "r");
if(dico == NULL)
exit(0);
else
{
do
{
caracterelu = fgetc(dico);
if(caracterelu == '
')
nombreMot++;
}while(caracterelu != EOF);
}
return nombreMot;
}
Bool rejouerPartie(long choice)
{
printf("Voulez-vous rejouer une autre Partie ?
");
printf("1. Oui
2. Non
");
do
{
printf("Votre choix ? ");
choice = lireLong();
}while(choice < 1 || choice > 2);
return choice == 1;
}
int gagnerJeu(int lettresTrouvees[], int tailleMot)
{
int remplir = 1;
int i = 0;
for(i = 0; i < tailleMot; i++)
{
if(lettresTrouvees[i] == 0)
remplir = 0;
}
return remplir == 1;
}
int lireCaractere()
{
char caractere = 0;
caractere = getchar();
caractere = toupper(caractere);
while(getchar() != '
');
return caractere;
}
int rechercherLettre(char lettreSaisie, char motSecret[], int lettresTrouvees[])
{
int i = 0;
int bonneLettre = 0;
for(i = 0; motSecret[i] != ' '; i++)
{
if(lettreSaisie == motSecret[i])
{
bonneLettre = 1;
lettresTrouvees[i] = 1;
}
}
return bonneLettre == 1;
}
void afficherLettre(int lettresTrouvees[], char motSecret[], int tailleMot)
{
int i = 0;
for(i = 0; i < tailleMot; i++)
{
if(lettresTrouvees[i])
printf("%c", motSecret[i]);
else
printf("*");
}
}
int main(int argc, char* argv[])
{
char motSecret[100] = "";
int i = 0, choice = 0, caractereLu = 0, numMotSecret = 0, tailleMot = 0, modeJeu = 0;
int nbCoupsRestants = 0;
char lettreSaisie = 0;
int* lettresTrouvees = NULL;
printf("
");
debutPartie();
do
{
modeJeu = demanderModeJeu();
printf("Bienvenu au mode %s !
", modeJeu == SOLO ? "Solo" : "Multi");
NiveauJeu niveauJeu = demanderNiveauJeu();
printf("Bienvenu au niveau %s !
", niveauJeu.nomNiveau);
nbCoupsRestants = niveauJeu.coupMax;
*motSecret = modeJeu == SOLO ? tireMotAleatoire(motSecret) : demanderMotSecret();
if(! tireMotAleatoire(motSecret))
exit(0);
tailleMot = strlen(motSecret);
lettresTrouvees = malloc(tailleMot * sizeof(int));
if(lettresTrouvees == NULL)
{
printf("Impossibe d'ouvrir le fichier dico.txt !
");
exit(0);
}
for(i = 0; i < tailleMot; i++)
lettresTrouvees[i] = 0;
do
{
printf("
Il vous reste %d coups a jouer ! ", nbCoupsRestants);
printf("
Quel est le mot secret ? ");
afficherLettre(lettresTrouvees, motSecret, tailleMot);
printf("
Proposez une lettre ");
lettreSaisie = lireCaractere();
if(!rechercherLettre(lettreSaisie, motSecret, lettresTrouvees))
{
nbCoupsRestants--;
printf("Cette lettre ne figure pas dans le mot secret
");
}
}while(nbCoupsRestants > 0 && !gagnerJeu(lettresTrouvees, tailleMot));
if(gagnerJeu(lettresTrouvees, tailleMot))
{
printf("
");
printf("GAGNE, le mot secret etait bien %s !!!
", motSecret);
printf("Partie terminee !
");
}else
{
printf("
");
printf("PERDU, le mot secret etait %s !!!
", motSecret);
printf("Partie terminee !
");
}
}while(rejouerPartie(choice));
printf("
");
printf("Partie terminee !!!
");
return 0;
}