Jeu du pendu

Fermé
Lk80 Messages postés 2 Date d'inscription jeudi 17 avril 2014 Statut Membre Dernière intervention 18 avril 2014 - 17 avril 2014 à 16:31
Lk80 Messages postés 2 Date d'inscription jeudi 17 avril 2014 Statut Membre Dernière intervention 18 avril 2014 - 18 avril 2014 à 14:13
bonjour, j'ai programmé ce jeu de pendu en partant du principe, que le premier joueur entre un mot secret dont les lettres à l'ecran sont remplacés par des étoiles, puis le second joueur commence à rechercher le mot avec à la clé 10 tentatives. mon problème est que une fois qu'il a trouvé le mot secret, le pendu ne s'arrête pas, le jeu demande encore d'entrez une lettre. merci pour votre coup de main.
voici ma syntaxe:


#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define n 100
int main()
{
int i,Nbtentatives,nblettres,trouve,c=0;
char Ms[n],lettre;
printf("entrez le mot secret: \n\n");
printf("===================>: ");
/*saisie du mot secret*/
i=0;
do
{
Ms[i] = getch();
if(Ms[i]!=13)
printf("* ");
i++;
}
while(Ms[i-1]!=13);
Ms[i]='\0';
nblettres=strlen(Ms); /*calcul du nombre de lettres contenues dans le mot secret*/
char Mt[nblettres]; /*nouveau tableau qui va contenir les lettres durant les differentes saisie du 2nd joueur*/

system("cls");
printf("...............................................................................\n\n");
printf("\t\t...Bienvenue dans le Jeu du Pendu...\n");
printf("...............................................................................\n");
printf("\n\tle mot secret est ==>: ");
for(i=0;i<nblettres-1;i=i+1)
printf("* ",Mt[i]);
printf("\n..............................................................................\n");
printf("\n\n");
printf("entrez une voyelle ou une consonne de votre choix\n\n\t\t====>: ");
scanf(" %c",&lettre);
Nbtentatives=10;
i=0;
do
{
while(i<nblettres)
{
Mt[i]='*';
i=i+1;
}
Mt[i]='\0';

trouve=0;
i=0;
while(i<nblettres)
{
if(Ms[i]==lettre)
{
Mt[i]=lettre;
trouve=1;
}
i=i+1;
}
if(trouve==0)
{
printf("==>votre saisie est incorrecte !!!");
Nbtentatives--;
}
else
{
printf("saisie correcte");
}

printf("\n");
printf("le mot secret est:\t");
for(i=0;i<nblettres-1;i=i+1)
printf("%c ",Mt[i]);

printf("\nil vous reste %d tentatives",Nbtentatives);
printf("\n");

if(strcmp(Mt,Ms)==0)
{
c=1;
printf("vous avez gagne");
break;
}
else
{
printf("entrez une nouvelle lettre ====>: ");
scanf(" %c",&lettre);
}

system("cls");
printf("\t\t.....Bienvenue dans le Jeu de Pendu....\n\n");
printf("...............................................................................\n");
printf("\n");
}
while(Nbtentatives>=1 && c==0);
if(c==0)
{
printf("vous etes penduuuuuuuuuuuuu");
}
else
{
printf("bravo");
}

getch();
}
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
18 avril 2014 à 00:44
#include<conio.h>
Non standard. A enlever si possible.

#define n 100
Conventionnellement, on met des majuscules. Donc plutôt #define N 100

int main()
Le bon prototype est : int main(void)

Ms[i] = getch();
Mets plutôt _getch(), getch() étant obsolète. Pour info, c'est non standard. Tu peux utiliser une bibliothèque (ncurses) pour gérer ce point de manière plus portable.

system("cls");
Pas terrible la fonction system() en C. C'est non performant et en plus non portable (pour ce qui est de l'instruction entre parenthèse). En plus, pas besoin d'effacer l'écran si tu as utiliser_getch(). Enfin, c'est une affaire de goût (pour l'effacement).

while(Ms[i-1]!=13);
Il faut aussi s'assurer que i ne sera pas plus grand que la taille du tableau. Sinon ça plantera.

for(i=0;i<nblettres-1;i=i+1)
C'est i<nbLettres (pas de -1).

char Mt[nblettres];
Ok, mais cela marche pour des raisons que tu ignores. Je te conseille plutôt d'utiliser l'allocation dynamique avec malloc() ou alors de faire un buffer statique par exemple : char Mt[N];

scanf(" %c",&lettre);
Pourquoi mettre un espace devant %c ? Sinon attention avec cette fonction. Il faut purger le buffer clavier pour éviter tout problème.

Je n'ai pas lu le reste. Mais corrige déjà ça et reposte ton programme en le mettant entre des balises "code" (bouton situé à droite du bouton "souligné" et choisis "C" dans la liste déroulante).

Cdlt,
0
Lk80 Messages postés 2 Date d'inscription jeudi 17 avril 2014 Statut Membre Dernière intervention 18 avril 2014
18 avril 2014 à 14:13
merci fiddy pour tes remarques...,je vais reprogrammer en fonction de cela et voir ce que cela va donner
0