Programation en C d'un pendu

Fermé
Kaera - 22 déc. 2010 à 17:26
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 déc. 2010 à 19:57
Bonjour à tous,

je vien soliciter votre aide, je dois ,pour l'école, créent un jeux du pendu en C, mon programme tourne comme le prof le demande néamoin j'aimerais rajouter une option qui est la suivante:

Lorsque je lance le jeux j'aimerais afficher le texte suivant "Vous avez entrez les lettres suivantes: %c %c %c %c %c" enfin voila quoi, le probleme lorsque je le fait il m'affiche a chaque fois la derniére lettre que j'ai taper et pas toute les une aprés les autres.

Si quelqu'un pourais m'équiller ca serait gentil, voila mon code:

#include<stdio.h>

int gagne(int lettreTrouvee[]);
int rechercheLettre(char lettre, char motSecret[], int lettreTrouvee[]);
char lireCaractere();
void regle();
void jeux ();
void quittez();
void pendaison(int coupsRestants);
main()
{
// --------------------------------------------------------------------------------- MENU ----------------------------------------------------------------------------------------------------------
    int choix;
    system("cls");
printf(".=*|*=Menu=*|*=.\n\n");
printf("[1] : Jouer.\n");
printf("[2] : Regles du jeux.\n");
printf("[3] : Quitter.\n");
printf("\n --------------------\n\n");
printf("Quelle est votre choix: ");
scanf("%d", &choix);
fflush(stdin);


while (choix<1 || choix>3)
{
    printf("Vous n'avez pas rentrez un bon numero, rechoissisez:");
    scanf("%d",&choix);
    fflush(stdin);
}

switch (choix)
{
    case 1:
    system("cls");
    jeux();
    break;

    case 2:
    regle();
    break;

    case 3:
    quittez();
    break;

}

return 0;
}

// ------------------------------------------------------------------------------------------------------------------------------------------------------


// ------------------------------------------------------------------------ FONCTION REGLE ----------------------------------------------------------------------------

void regle()
{
    system("cls");
    printf("-------------- REGLES DU PENDU : ----------------\n\n");
    printf("\n\n Le pendu est un jeu consistant a retrouver un mot en devinant quelles sont les lettres qui le composent.\n Le jeu se joue traditionnellement a deux, avec un papier et un crayon, selon un deroulement bien particulier.\n Le but de cet exercice va etre de creer un programme qui va se substituer a l'un des joueurs.\n L'utilisateur doit deviner un mot choisi au hasard par l'ordinateur enun minimum d'essais.\n Pour cela, il propose des lettres de l'alphabet. Si la lettre figure dans le mot a trouver, elle s'affiche.\n Si elle n'y figure pas, le nombre des mauvaises reponses augmente de 1, ce qui se materialise par une evolution du dessin de la silhouette du personnage.\n Au bout de sept mauvaises reponses, la partie est perdue..\n\n");
    getch(); //fige
    main();// retour au main
}
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------FONCTION QUITTEZ.--------------------------------------------------------------------------------------

void quittez()
{
    system("cls");
    printf("\n-\n--\n---\n----\n-----\n------\n--------\n---------\n----------\n-----------\n------------\n\nVous avez decider de quitter, merci d'avoir pris le temps de jouer au jeux du pendu.\n\n------------\n-----------\n----------\n---------\n--------\n-------\n------\n-----\n----\n---\n--\n-\n");
}

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void jeux()
{
    char motSecret[] = "FOOTBALL";
    char lettre = 0; // Stocke la lettre proposée par l'utilisateur (retour du scanf)
    int lettreTrouver [8] = {0}; // Un tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée, 1 = lettre trouvée
    int i = 0; // Une petite variable pour parcourir les tableaux
    int coupsRestants = 7;
    int lettrejouer [8] = {0};


     while (coupsRestants > 0 && !gagne(lettreTrouver))  // On continue à jouer tant qu'il reste au moins un coup à jouer ou qu'on a pas gagné
    {
        system ("cls");
        printf(" ----- Bienvenue dans le pendu !!! -----");
        pendaison(coupsRestants);
        printf("\n\n\nQuel est le mot secret ? ");

        /* On affiche le mot secret en masquant les lettres non trouvées
        Exemple : f**t**ll */
        for (i = 0 ; i < 8 ; i++)
        {
            if (lettreTrouver[i]) // Si on a trouvé la lettre n°i
                printf("%c", motSecret[i]); // On l'affiche
            else
                printf("*"); // Sinon, on affiche une étoile pour les lettres non trouvées
        }

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


        // Si ce n'était PAS la bonne lettre
        if (!rechercheLettre(lettre, motSecret, lettreTrouver))
        {
            coupsRestants--; // On enlève un coup au joueur

        }
    }

    if (gagne(lettreTrouver))
        printf("\n\nGagne ! Le mot secret etait bien : %s", motSecret);
    else
        printf("\n\nPerdu ! Le mot secret etait : %s", motSecret);
        getch();
        main();
}

char lireCaractere()
{
    char caractere = 0;

    caractere = getchar(); // On lit le premier caractère
    caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà

    // On lit les autres caractères mémorisés un à un jusqu'à l'\n
    while (getchar() != '\n') ;

    return caractere; // On retourne le premier caractère qu'on a lu
}

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

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

    return joueurGagne;
}

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

    // On parcourt motSecret pour vérifier si la lettre proposée y est
    for (i = 0 ; motSecret[i] != '\0' ; i++)
    {
        if (lettre == motSecret[i]) // Si la lettre y est
           {

            bonneLettre = 1; // On mémorise que c'était une bonne lettre
            lettreTrouvee[i] = 1; // On met à 1 le case du tableau de booléens correspondant à la lettre actuelle
           }

    }

    return bonneLettre;
}

void pendaison(int coupsRestants)
{
        switch (coupsRestants)
    {
        case 7:
        printf("\n |---------------\n |\t\t|\n |\n |\n |\n |\n |\n |\n/|\\\n");
        break;

        case 6:
        printf("\n |---------------\n |\t\t|\n |              @\n |\n |\n |\n |\n |\n/|\\\n");
        break;

        case 5:
        printf("\n |---------------\n |\t\t|\n |              @\n |              |\n |\n |\n |\n |\n/|\\\n");
        break;

        case 4:
        printf("\n |---------------\n |\t\t|\n |              @\n |             -|-\n |\n |\n |\n |\n/|\\\n");
        break;

        case 3:
        printf("\n |---------------\n |\t\t|\n |              @\n |             -|-\n |              |\n |\n |\n |\n/|\\\n");
        break;

        case 2:
        printf("\n |---------------\n |\t\t|\n |              @\n |             -|-\n |              |\n |             /\n |\n |\n/|\\\n");
        break;

        case 1:
        printf("\n |---------------\n |\t\t|\n |              @\n |             -|-\n |              |\n |             / \\\n |\n |\n/|\\\n");
        break;

    }
}




A voir également:

2 réponses

Utilisateur anonyme
22 déc. 2010 à 17:29
Salut, tu peux utiliser un tableau de char qui va stocker les lettres tapées. Tu peux soit créer un tableau dynamiquement (malloc etc) ou bien un tableau de 26 positions (vu qu'il y a 26 lettres).

ce serait donc :

char lettres[26];
int compteur = 0;


à chaque scanf tu stocke la lettre déjà entrée dans le tableau lettres et incrémente le compteur.

Ensuite ce sera un affichage de tableaux.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 déc. 2010 à 19:57
Salut
sinon tu peux utiliser une simple variable long que tu vas gerer en binaire : chaque bit pour chaque lettre de lalphabet.
Ça sera moins lourd et plus performant.
Cdlt
0