Posez votre question Signaler

Jeu du pendu en language C

dimitriov 4Messages postés vendredi 27 août 2010Date d'inscription 28 août 2010Dernière intervention - Dernière réponse le 29 août 2010 à 05:23
Bonjour,
j'ai programmer le jeu du "pendu" sous console en C, cepandant ca ne marche pas comme prevu meme si le code me semble logique
Voici mon code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char lireCaractere();



int main()
{

char motSecret[] = "ROUGE" ;
int nbrCoups = 10;
char lettre = ' ';
char *pointeur = NULL;
char chaineSecrete[] = "*****";
int i;



  printf("********PENDU******** \n \n \n \n");

  printf("il vous reste %d coups \n",nbrCoups);
printf("quel est le mot secret %s \n",chaineSecrete);
printf("entrez une lettre \n \n");


while((nbrCoups != 0) && (strcmp(chaineSecrete,motSecret)!= 0 ) )

{


lettre = lireCaractere();

pointeur = strchr(motSecret,lettre);


if(pointeur == NULL)
{

   nbrCoups -- ;
   printf("il vous reste %d coups \n",nbrCoups);
   printf("quel est le mot secret %s \n",chaineSecrete);
   printf("entrez une lettre \n");

}

else
{

for(i=0 ; i<strlen(motSecret) ; i++)
{


    if(lettre == motSecret[i])
     {
       chaineSecrete[i] = lettre;
     }


} //fin for




} // fin else


} // fin de la boucle

if( strcmp(chaineSecrete,motSecret)== 0 )
{
    printf(" vous avez gagne le mot etait bien %s \n",motSecret);
}

else if (nbrCoups == 0)
{
 printf(" vous avez perdu \n ");
}



    return 0;
}




char lireCaractere()
{
    char caractere = 0;

    caractere = getchar();
    caractere = toupper(caractere);


    while (getchar() != '\n') ;

    return caractere;

}


Merci de bien m'indiquer ou se trouve l'erreur
Lire la suite 
Réponse
+1
moins plus
pour halner : au lieu du scanf j'ai utilisé la fonction lireCaractere c est mieu pour les caractere.

pour sweedi: au contraire votre correction m'aidera beaucoup

pour ralpha: pas besoin de te répondre j tignore
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
C'est quoi qui se passe mal quand tu lances le programme ? Au lieu de donner un gros pâté de code que je n'ai même pas envie de lire, utilise un debugger pas à pas, pour trouver la fonction incriminé, et là tu pourras la poster ;)
Ajouter un commentaire
Annonces
 
moins plus
Réponse
+0
moins plus
Si t'arrive pas a programmer télécharge des source sa ira plus vite....
de toute façon si on le corrige pour toi sa ne t'apprendra rien !
Ajouter un commentaire
Réponse
+0
moins plus
c marrant t'as pas un seul scanf dans ton truc
Sweedi 53Messages postés jeudi 26 août 2010Date d'inscription 22 octobre 2010Dernière intervention - 27 août 2010 à 17:23
lol c'est vrai .... Dimitriov va revoir tes bases....
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Ton code a l air assez correcte je te test sa tout a l heure et je te dirai se qui ne vas pas
Ajouter un commentaire
Réponse
+0
moins plus
merci dwyane346
Ajouter un commentaire
Réponse
+0
moins plus
/*
** j ai modifier un peu ton code j ai laisse des commentaire
** test moi sa et di moi si sa fai se que tu veux
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

char lireCaractere();
int rempliChaineCarEntre(char l, char chaineCarEntre[]);


int main()
{

char motSecret[] = "ROUGE" ;
int nbrCoups = 10;
char lettre = ' ';
char *pointeur = NULL;
char chaineSecrete[] = "*****";
/*
** une chaine de caractaire ou je vais stocker les lettres deja entrer
*/
char chaineCarEntre[nbrCoups + strlen(motSecret)];
/*
** je te conseil de faire un malloc a l avenir
** genre char *chaineCarEntre;
** chainecarEntre = malloc(8 + strlen(motSecret) * sizeof(char*));
** 10 + strlen(motSecret) car il peut faire 9 erreur et trouver le mot sa fai 9 + la longueur du mot + \0
*/


int i;



printf("********PENDU******** \n \n \n \n");

printf("il vous reste %d coups \n",nbrCoups);
printf("quel est le mot secret %s \n",chaineSecrete);
printf("entrez une lettre \n \n");


while((nbrCoups != 0) && (strcmp(chaineSecrete,motSecret)!= 0 ) )

{


lettre = lireCaractere();

pointeur = strchr(motSecret,lettre);


if(pointeur == NULL)
{
//nbrCoups -- ;
if (rempliChaineCarEntre(lettre, chaineCarEntre) == 0) // s il n a pas teste la lettre on decremente
{
nbrCoups -- ;
printf("\nil vous reste %d coups \n",nbrCoups);
printf("quel est le mot secret %s \n",chaineSecrete);
printf("entrez une lettre \n\n");
}
else
{
printf("Vous avez deja teste cette lettre \n");
printf("entrez une lettre \n\n");
}


}

else
{

for(i=0 ; i<strlen(motSecret) ; i++)
{


if(lettre == motSecret[i])
{
chaineSecrete[i] = lettre;
if (rempliChaineCarEntre(lettre, chaineCarEntre) == 0)
{
/*
** je lui precise qu il a trouver une autre lettre
*/
printf("bravo vous avez trouve une lettre suplementaire\n");
printf("quel est le mot secret %s \n\n",chaineSecrete);
}
else
{
printf("Vous avez deja teste cette lettre \n\n");
}


}


} //fin for




} // fin else


} // fin de la boucle

if( strcmp(chaineSecrete,motSecret)== 0 )
{
printf(" vous avez gagne le mot etait bien %s \n",motSecret);
}

else if (nbrCoups == 0)
{
printf(" vous avez perdu \n ");
}



return 0;
}




char lireCaractere()
{
char caractere = 0;

caractere = getchar();
caractere = toupper(caractere);


while (getchar() != '\n') ;

return caractere;

}

/*
** remplie chaineCarEntre a chaque fois qu il tape une lettre qui n est pas deja a l interieur
*/

int rempliChaineCarEntre(char l, char chaineCarEntre[])
{
int i = 0;
while (i < strlen(chaineCarEntre))
{
if (chaineCarEntre[i] == l)
{
return (1);
}
i++;
}
chaineCarEntre[i] = l;
chaineCarEntre[i + 1] = '\0';
return (0);
}
Ajouter un commentaire
Réponse
+0
moins plus
Ou comme ceci:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int gagne(int lettreTrouvee[]);
int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
char lireCaractere();

int main(int argc, char* argv[])
{
    char lettre = 0;
    char motSecret[] = "ROUGE";
    int lettreTrouvee[6] = {0};
    int coupsRestants = 10;
    int i = 0;

    printf("     Bienvenue dans le Pendu !     \n");
    printf("***********************************");


    while (coupsRestants > 0 && !gagne(lettreTrouvee))
    {
        printf("\n\nIl vous reste %d coups a jouer", coupsRestants);
        printf("\nQuel est le mot secret ? \n\n\t\t");


        for (i = 0 ; i < 5 ; i++)
        {
            if (lettreTrouvee[i])
                printf("%c", motSecret[i]);
            else
                printf("*");
        }

        printf("\n\nProposez une lettre : ");
        lettre = lireCaractere();


        if (!rechercheLettre(lettre, motSecret, lettreTrouvee))
        {
            coupsRestants--;
        }
    }


    if (gagne(lettreTrouvee))
        printf("\n\nBRAVO ! Le mot secret etait bien : %s", motSecret);
    else
        printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);

        return 0;
}

char lireCaractere()
{
    char caractere = 0;

    caractere = getchar();
    caractere = toupper(caractere);


    while (getchar() != '\n') ;

    return caractere;
}

int gagne(int lettreTrouvee[])
{
    int i = 0;
    int joueurGagne = 1;

    for (i = 0 ; i < 5 ; i++)
    {
        if (lettreTrouvee[i] == 0)
            joueurGagne = 0;
    }

    return joueurGagne;
}

int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[])
{
    int i = 0;
    int bonneLettre = 0;


    for (i = 0 ; motSecret[i] != '\0' ; i++)
    {
        if (lettre == motSecret[i])
        {
            bonneLettre = 1;
            lettreTrouvee[i] = 1;
        }
    }

    return bonneLettre;
}
Ajouter un commentaire
Réponse
+0
moins plus
Le code de halner a l air plus propre , le mien il marche aussi et me suis arranger a ne modifier le moin possible ton code (j ai juste ajoute une fonction et une variable) te conseil de tester les 2 et de prendre celui que tu metrisra le +
Ajouter un commentaire
Réponse
+0
moins plus
oups nn je vien de teste ton code halner ya un petit probleme
quand tu tape une mauvaise touche deux fois il decremente le nombre dessai restant , genre tu as gerer le cas juste pour les lettre deja presentes dans le mot .

exemple:


Bienvenue dans le Pendu !
***********************************

Il vous reste 10 coups a jouer
Quel est le mot secret ?

*****

Proposez une lettre : r


Il vous reste 10 coups a jouer
Quel est le mot secret ?

R****

Proposez une lettre : a


Il vous reste 9 coups a jouer
Quel est le mot secret ?

R****

Proposez une lettre : a


Il vous reste 8 coups a jouer // problem
Quel est le mot secret ?

R****

Proposez une lettre : a


Il vous reste 7 coups a jouer // problem
Quel est le mot secret ?

R****

Proposez une lettre : a


Il vous reste 6 coups a jouer // problem
Quel est le mot secret ?

R****

Proposez une lettre : a // problem


Il vous reste 5 coups a jouer // problem
Quel est le mot secret ?

R****

Proposez une lettre :


par contre si je fais


Proposez une lettre : r


Il vous reste 3 coups a jouer // pas de problem
Quel est le mot secret ?

R****

Proposez une lettre : r


Il vous reste 3 coups a jouer // pas de problem
Quel est le mot secret ?

R****

Proposez une lettre : r


Il vous reste 3 coups a jouer // pas de problem
Quel est le mot secret ?

R****

Proposez une lettre : r


Il vous reste 3 coups a jouer
Quel est le mot secret ?

R****


JESPERE QUE J AI BIEN EXPLIQUE
Ajouter un commentaire
Réponse
+0
moins plus
Ton code marche tres bien dwyane346 cepandant je n'ai pas compris le role de la fonction rempliChaineCarEntre ni comment elle s'exécute.
Ajouter un commentaire
Réponse
+0
moins plus
A) Son role
---------------

en faite la fonction rempliChaineCarEntre ajoute chaque lettre taper au clavier dans le tableau char chaineCarEntre[] si et ssi cette lettre ne figure pas deja dans ce tableau;
- si cette lettre est deja dans le tableau ( l utilisateur a deja tente d utilise cette lettre) alors la fonction renvoie 1
sinon (l utilisateur n a jamais essayer cette lettre) la fonction ajoute la lettre et retourn 0

pour resume elle a un double role
1 - ) ajoute chaque nouvelle lettre taper par l utilisateur dans le tableau;
2 - )Verifie si oui ou non la lettre taper par l utilisateur figure dans le tableau

B) Son execution
---------------------
//fonction qui prend la lettre tape par lutilisateur et la chaine ou je stock toutes les lettres qu il a deja tape

int rempliChaineCarEntre(char l, char chaineCarEntre[])
{
int i = 0;
while (i < strlen(chaineCarEntre)) //je parcours la chaine ( chaineCarEntre )
jusqu a la fin
{
if (chaineCarEntre[i] == l) // si la lettre entre se trouve deja a linterieur
je retourne 1
{
return (1);
}
i++;
}
// si la fonction ne s est pas termine c kil na rien retourner (je
comprend alors que la lettre n a jamais ete tape par l utilisateur)

chaineCarEntre[i] = l; // le compteur i est a la position de la dernier lettre +1
de la chaine chaineCarEntre
j ajoute la lettre taper a la fin de mon tableau

chaineCarEntre[i + 1] = '\0'; // je m assure que mon tableau se termine bien par
\0 car si c pas le cas sa peut engendrer
des beugs
return (0);
// je retourne 0 pour dir que la lettre ne se trouvai
pas dans chaineCarEntre et que la lettre a bien
ete ajoute
}

J espere avoir ete assez explicite
Ajouter un commentaire
Ce document intitulé «  jeu du pendu en language C  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.