Réalisation d'un jeu: le pendu

Fermé
jeffrey - Modifié le 8 mai 2017 à 18:19
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 10 mai 2017 à 14:13
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.
A voir également:

3 réponses

Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
8 mai 2017 à 17:00
De l'aide pour ? Elle est où ta question ? Quel est ton problème ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 9 mai 2017 à 13:02
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
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
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
9 mai 2017 à 19:38
gagne.h n'est pas dans le même répertoire que ton programme .c et la compilation échoue avec une erreur.
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié le 10 mai 2017 à 14:29
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