Débutant, problème master mind en C. - C - Programmation
Marsh Posté le 22-11-2010 à 23:15:35
J'aime pas scanf
Change la façon dont tu récupère tes entrées (une boucle avec un getc/printf par exemple) comme ça tu aura la maîtrise sur ce qu'il se passe...
Marsh Posté le 23-11-2010 à 15:15:41
Tout d'abord merci d'avoir pris le temps de me répondre.
Quelque chose comme ça semble mieux ?
void saisie_combi(int j)
{
int i;
for (i=0; i<5; i++)
{
if (j==1)
{
scanf ("%c ", &C1[i]);
}
else
if (j==2)
{
scanf ("%c ", &C2[i]);
}
}
}
Je ne connais pas la fonction getc/printf, nos cours d'informatique ne sont pas allés jusque là, mais je vais essayé de chercher sur internet.
Marsh Posté le 23-11-2010 à 16:34:28
J'ai pas essayé ton code, mais je t'en file un que j'ai fait il y a quelques temps (C'est pour jouer tout seul).
Les fonctions sont quasi les mêmes, tu devrais pouvoir t'y retrouver :
Code :
|
Marsh Posté le 24-11-2010 à 22:58:08
Slt Ydalb
Merci d'avoir posté ton code je vais regarder si je trouve dedans une solution à mon problème.
Marsh Posté le 25-11-2010 à 14:31:30
Salut,
Utiliser scanf n'est pas une bonne solution.
La fonction fgets te permet de récupérer une chaîne de caractère en donnant la taille maximale (en comptant le caractère nul de fin il me semble).
Donc tu pourrais avoir quelque chose du genre
fgets (tonTableau, 6, stdin); //size = 6 pour le caractère nul. Le tableau doit aussi faire 6 cases.
En une instruction tu as rempli ton tableau et de façon propre.
Par contre tu devrais vérifier si les couleurs sont valides, des fois que l'utilisateur tape z.
Cette ligne:
j==2;
ne fait rien du tout.
Je ne pense pas que les variables globales soient indispensables pour un programme de master mind
Je n'ai pas eu le courage de tout lire par contre. Si tu pouvais éditer ton message en mettant des balises code ça serait pratique.
Marsh Posté le 20-11-2010 à 14:58:28
Bonjour
Étudiant en licence de biologie, je dois créer le code du jeu master mind, mais voilà je suis bloqué. J'ai fait des recherches sur internet, mais je n'arrive désespérément pas à voir ce qui cloche....
Mon problème est que le programme ne lit que 4 caractères sur 5 entré par le joueur 1, et que le 5em caractère ce trouve expulsé à la combinaison suivante. Même chose avec le joueur 2.
Si quelqu'un peut m'aider à comprendre..
Merci d'avance.
(Je suis sous windows 7 et j'utilise Dev-C++.)
Voici mon code:
#include <stdio.h>
// --------------variables------------
char C1[5], C2[5];
// -----------Introduction aux principes du jeux--------
void principes_jeu()
{
printf("\n" );
printf("***********************************\n" );
printf("* *\n" );
printf("* Mastermind *\n" );
printf("* *\n" );
printf("***********************************\n" );
printf("\n" );
printf(" Vous allez jouez au Mastermind.\n" );
printf("\nCe jeu consiste à decouvrir une combinaison faite de cinques couleurs\n(rouge, jaune, vert, bleu)\n" );
printf("\n" );
printf("Cette combinaison à ete prealablement entre par votre adversaire.\n" );
printf("vous aurez 5 tentatives pour découvrir cette combinaison de couleur,\npour entre une couleur dans le programmme vous prendrez la \npremiere lettre de la couleur que vous voulez, ex: rouge -> r\n" );
printf(" B= bonne couleur au mauvais endroit, X= ne ce trouve pas dans la combinaison,N= bonne endroit et bonne couleur.\n" );
printf("\n" );
}
// -----------processus de saisie---------
// Joueur 1
void saisie_combi1(int j)
{ j==1;
scanf("%c %c %c %c %c",&C1[0],&C1[1],&C1[2],&C1[3],&C1[4]);
}
// Joueur 2
void saisie_combi2 (int j)
{ j==2;
printf("Joueur 2 entrez une combinaison et tentez de decouvrir la combinaison du joueur 1.\n" );
scanf("%c %c %c %c %c",&C2[0],&C2[1],&C2[2],&C2[3],&C2[4]);
}
//-------processus d'affichage des combinaisons---------
void afficher_combi (int J)
{
int i;
if (J==1)
{
for (i=0; i<5; i++)
{
printf ("%c ",C1[i]);
printf ("\n" );
}
}
else
if (J==2)
{
for (i=0; i<5; i++)
{
printf ("%c ",C2[i]);
printf ("\n" );
}
}
}
//--------------processus de comparaison des combinaisons entre joueur 1 et joueur 2---------------
int compare ()
{
int i,j,cases=0;
for (i=0; i<5; i++)
{
if (C1[i]==C2[i])
{
printf ("N" ),cases ++;
}
else
{
j=1;
while ( (C2[i]!=C1[(i+j)%5]) && (j<5) )
{
j=j+1;
}
if (j<5)
{
printf ("B" );
}
else
{
printf ("X" );
}
}
}
return cases;
}
// ------------corp du programme-----------
int main ()
{
principes_jeu();
int nb_essais=0; /* le nombre d'essai est à zéro */
printf("Joueur 1 entre votre combinaison de couleur, avec un espace entre chaques lettres désignant une couleur.\nexemple : r b j r v\n" );
printf("\n" );
saisie_combi1 (1);
system ("cls" ); /* Le joueur 1 à saisi la combinaison que le joueur 2 doit découvrir, puis le programme cache cette combinaison au joueur 2.*/
do
{
printf ("\njoueur 2,essai numero:%d\n", nb_essais);
saisie_combi2 (2);
afficher_combi (2);
nb_essais ++; // le joueur tente de découvrir la combinaison en entrant une combinaison, puis l'essai est ajouté.
}
while ( (nb_essais<10) && (compare ()!=5) ); // boucle de calcul du nombre d'essai restant et de la comparaion des combinaisons.
if (nb_essais<10)
{
printf("vous avez gagne !!\n" );
}
}