Téléchargement
illégal
Posez votre question Signaler

[C] Un petit jeu du pendu [Résolu]

jerryp 142Messages postés 27 juillet 2008Date d'inscription 7 avril 2010Dernière intervention - Dernière réponse le 2 sept. 2008 à 21:18
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 !
Lire la suite 

[C] Un petit jeu du pendu »

8 réponses
Réponse
+1
moins plus
bonsoir,

en effet, malloc, c'est casse-tête...

J'ai donc fait un nouveau tableau, mais quand le joueur entre une lettre, celle-ci se mets automatiquement dans toute les cases du tableau... dans ce cas-ci, j'ai donc RRRRR qui s'affiche au lieu de R****...

Revoila mon code :
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

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

int main(int argc, char *argv[])
{
	long nombreCoups = 10;
	char motMystere[] = "ROUGE";
	long nombreCaracteres = 0;
	long i = 0;	
	char caractereEntre = "";
	char motDecouvert[25] ={"*"} ;
	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("%s", motDecouvert);
			i++;
		} while(i != nombreCaracteres);
		printf("\n");
		printf("Proposez une lettre : ");
		caractereEntre = lireCaractere();
		trouverEtRemplacer(motMystere, motDecouvert, caractereEntre);
		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)
{
    char caractereActuel = 0;
    long i = 0;

    do
    {
        caractereActuel = motSecret[i];
 
        if(caractereActuel == lettre)
        {
            motTrouver[i] = motSecret[i];
        }
        i++;
    }while(motSecret[i] != '\0');
}


cordialement,
jerryp
Ajouter un commentaire
Réponse
+1
moins plus
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...
Ajouter un commentaire
Réponse
-2
moins plus
Bonjour,

je ne vais pas coder là parceque je suis au boulot mais je vais te donner l'idée:

il faudrait enregistrer ton mot mystère dans un tableau : chaque caractère dans une case
et tu compare chaque case de ton tableau avec le caractère entré avec le joueur . si ça correspond tu retiens l'indice "i" , et dans ta boucle :
do
{
printf("*");
i++;
} while(i != nombreCaracteres);
tu lui fait écrire la lettre à l aplace de "*"...

bon courage
Ajouter un commentaire
Réponse
-2
moins plus
bonjour,

j'y ai pensé aussi, de mettre le mot dans un tableau ou je remplace au fur et à mesure les étoiles par des lettres, mais, je n'arrive pas à voir comment faire pour créer un tableau de la même taille que le motMystere...

Merci beacoup,

cordialement,
jerryp
Ajouter un commentaire
Réponse
-2
moins plus
si tu ne veux pa te casser la tête cree le suffisamment grand.
ça fait longtemps que je n'ai pas fait de C mais je dirai :
char TonTableau[30];

on a pas à s'inquieter de l'usure de ressources à ce niveau;
et tu n'as qu'à parcourir ton tableau en fonction de ta variable : nombreCaracteres.
Ajouter un commentaire
Réponse
-2
moins plus
Bonsoir,

Je vois, j'ai pas encore tout à fait trouvé le truc avec les malloc, mais ça viendra avec le temps et la pratique je suppose...

Le code fonctionne, un grand merci !!!

Je vais encore juste le terminer afin d'avoir un jeu "opérationnel", et après j'ajouterai un dictionnaire afin d'avoir plus de mots possibles...

Merci
Ajouter un commentaire
Réponse
-2
moins plus
de rien...
si tu n'as plus de probleme n'oublie pas de metre en resolu ;)
Ajouter un commentaire
Réponse
-2
moins plus
bonsoir,

bien sûr, je mets le résolu tout de suite !

encore merci
Ajouter un commentaire
Ce document intitulé « [C] Un petit jeu du pendu » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?