[C] Un petit jeu du pendu

Résolu/Fermé
jerryp Messages postés 141 Date d'inscription dimanche 27 juillet 2008 Statut Membre Dernière intervention 7 avril 2010 - 2 sept. 2008 à 18:34
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 8 mars 2014 à 10:27
Bonjour,

J'ai commncé l'apprentissage du langage C,

et j'aimerais programmer un petit jeu du pendu...

Seulement j'ai un petit problème (non, c'est vrai ?!?)...

Le mot que le joueur recherche est caché par des étoiles *...

Et lorsque le joueur entre une lettre au moyen d'une fonction "maison", je ne sais pas comment faire pour remplacer l'étoile correspondant à la lettre, si toutefois celle-ci se trouve bien dans le mot...

Voici mon code :

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

char lireCaractere();

int main(int argc, char *argv[])
{
long nombreCoups = 10;
char motMystere[] = "ROUGE";
long nombreCaracteres = 0;
long i = 0;
char caractereEntre = "";

printf("Bienvenue dans le pendu\n\n");
do
{
i = 0;
printf("Il vous reste %ld coups a jouer\n", nombreCoups);
nombreCaracteres = strlen(motMystere);
printf("Quel est le mot cache : ");
do
{
printf("*");
i++;
} while(i != nombreCaracteres);
printf("\n");
printf("Proposez une lettre : ");
caractereEntre = lireCaractere();

if(strchr(motMystere, caractereEntre) == 0)
{

nombreCoups--;
}

} while(nombreCoups != 0);

system("PAUSE");
return 0;
}

char lireCaractere()
{
char caractere = 0;

caractere = getchar();
caractere = toupper(caractere);


while (getchar() != '\n') ;

return caractere;

}

Je vous remercie d'avance,

cordialement,
jerrypeeren

EDIT : je sais que le code n'est pas encore complet et qu'il peut encore être optimisé (par exemple lors de la déclaration des variables), mais je changerai tout ça quand le jeu fonctionnera complètement... L'optimisation, c'est pour après !
A voir également:

8 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
2 sept. 2008 à 21:09
c'est pas trop dure les malloc suffit de trouver la taille du mot avec un strlen pour savoir la taille a donné au mot avec un malloc ensuite tu rempli avec des '*'
ça donne ça

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

char lireCaractere();
void trouverEtRemplacer(char motSecret[], char motTrouver[], char lettre, long nombreCaracteres);

int main(int argc, char *argv[])
{
	long nombreCoups = 10;
	char motMystere[] = "ROUGE";
	long nombreCaracteres = 0;
	long i = 0;
	char caractereEntre;
	char *motDecouvert;
	printf("Bienvenue dans le pendu\n\n");
	nombreCaracteres = strlen(motMystere);
	   motDecouvert = (char *) malloc(nombreCaracteres * sizeof(char));
        for(i=0;i<nombreCaracteres;i++) motDecouvert[i]='*';
	do
	{
		i = 0;
		printf("Il vous reste %ld coups a jouer\n", nombreCoups);

		printf("Quel est le mot cache : ");

		do
		{
			printf("%c", motDecouvert[i]);
			i++;
		} while(i != nombreCaracteres);
		printf("\n");
		printf("Proposez une lettre : ");
		caractereEntre = lireCaractere();
		trouverEtRemplacer(motMystere, motDecouvert, caractereEntre, nombreCaracteres);
		if(strchr(motMystere, caractereEntre) == 0)
		{

			nombreCoups--;
		}

	} while(nombreCoups != 0);

	system("PAUSE");
	return 0;
}

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 (pour les effacer)
    while (getchar() != '\n') ;

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

}

void trouverEtRemplacer(char motSecret[], char motTrouver[], char lettre, long nombreCaracteres)
{
    char caractereActuel;
    long i = 0;

    do
    {
        caractereActuel = motSecret[i];

        if(caractereActuel == lettre)
        {
            motTrouver[i] = motSecret[i];
        }
        i++;
    }while(i!= nombreCaracteres);
}
il te reste plus qu'a l'optimiser...
3