Réalisation d'un jeu: le pendu
jeffrey
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[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
-
De l'aide pour ? Elle est où ta question ? Quel est ton problème ?
-
Salut jeffrey,
En ligne 14, tu fermes l'accolade de la fonction main, alors que tu as encore du code à la suite.
Les fonctionsgagne()
,lireCaractere()
,rechercheLettre()
ne sont pas implémentées.
Quelque soit ce que fait la fonctiongagne()
, 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.
Lereturn 0;
devrait être à l'extérieur de la bouclewhile
, 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 -
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"-
-
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
-