Réalisation d'un jeu: le pendu

jeffrey -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Felice_ Messages postés 271 Statut Membre 11
     
    De l'aide pour ? Elle est où ta question ? Quel est ton problème ?
    0
  2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    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
    0
  3. jeffrey
     
    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"
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      gagne.h n'est pas dans le même répertoire que ton programme .c et la compilation échoue avec une erreur.
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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
      0