Réalisation d'un jeu: le pendu

Bonjour, merci de votre aide

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

int main(int argc, char* argv[])
{
    char lettre = 0; // Stocke la lettre proposée par l'utilisateur (retour du scanf)
    char motSecret[] = "MARRON"; // C'est le mot à trouver
    int lettreTrouvee[6] = {0}; // Tableau de booléens. Chaque case correspond à une lettre du mot secret. 0 = lettre non trouvée, 1 = lettre trouvée
    int coupsRestants = 10; // Compteur de coups restants (0 = mort)
    int i = 0; // Une petite variable pour parcourir les tableaux

}

printf("Bienvenue dans le Pendu !\n\n");
while (coupsRestants > 0 && !gagne(lettreTrouvee))
{

printf("\n\nIl vous reste %d coups a jouer", coupsRestants);
printf("\nQuel est le mot secret ? ");


/* On affiche le mot secret en masquant les lettres non trouvées
        Exemple : *A**ON */
        for (i = 0 ; i < 6 ; i++)
        {
            if (lettreTrouvee[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, lettreTrouvee))
    {
        coupsRestants--; // On enlève un coup au joueur
    }

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

return 0;
}



EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. De l'aide pour ? Elle est où ta question ? Quel est ton problème ?
    1. Contributeur
      Salut jeffrey,

      En ligne 14, tu fermes l'accolade de la fonction main, alors que tu as encore du code à la suite.

      Les fonctions
      gagne()
      ,
      lireCaractere()
      ,
      rechercheLettre()
      ne sont pas implémentées.

      Quelque soit ce que fait la fonction
      gagne()
      , ce code parait étonnant :

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


      Ce n'est pas parce que le jeu n'est pas "gagné", qu'il est perdu s'il reste des coups à jouer.

      Le
      return 0;
      devrait être à l'extérieur de la boucle
      while
      , et juste avant l'accolade fermante de la fonction main.

      C'est mieux de terminer tes printf par
      \n
      (sauf ceux en lignes 29 et 31).

      Dal
      1. Bonjour Dal,
        merci de m'avoir répondu, j'ai un autre problème malheureusement:

        Mon programme ne marche pas et on m'indique une erreur à la ligne 4 mais pourtant j'ai suivi - au moins une partie - de tes conseils. Si tu peux m'aider à résoudre ce problème, merci :) .
        Voilà la phrase d'erreur:
        "fatal error: gagne.h: No such file or directory"
        1. Contributeur
          gagne.h n'est pas dans le même répertoire que ton programme .c et la compilation échoue avec une erreur.
        2. Contributeur
          Par exemple :

          main.c :
          #include <stdio.h>
          
          #include "gagne.h"
          
          #define WORDLEN 6
          
          int main(void)
          {
              int lettreTrouvee[WORDLEN] = { 0, 1, 1, 1, 1, 1 };
          
              if (gagne(lettreTrouvee, WORDLEN))
                  printf("Gagne !\n");
              else
                  printf("Le jeu continue...\n");
          
              return 0;
          }

          gagne.h :
          #ifndef GAGNE_H
          #define GAGNE_H
          
          int gagne(int * lettreTrouvee, int len);
          
          #endif

          et gagne.c :
          /**
           * gagne() - test if we have won
           * @lettreTrouvee: array of booleans
           * @len: length of array
           *
           * if all ints are non-zero, returns true
           * otherwise return false
           */
          int gagne(int  * lettreTrouvee, int len) {
              int n;
          
              for (n=0; n<len; n++)
                  if (!lettreTrouvee[n])
                      return 0;
              return 1;
          }

          les 3 fichiers main.c, gagne.h et gagne.c doivent être dans le même répertoire.

          Note que le
          #include "gagne.h"
          met le nom de l'entête entre guillemets et non pas entre chevrons, car c'est un entête que le compilateur doit trouver par rapport à l'emplacement de ton source, et non pas un entête d'une bibliothèque.

          Dal