Mastermind en C

Fermé
lydie - Modifié par irongege le 16/12/2010 à 22:01
lucieb31 Messages postés 345 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 - 18 déc. 2010 à 14:17
Bonjour,


Je souhaite faire un mastermind en C mais je bloque sur un point très bidon que j'arrive pas résoudre. J'ai le choix entre plusieurs couleurs pour proposer une combinaison de 4. Le problème c'est que je veux le nombre de tentative que j'ai fait pour le réussir. Mais mon problème principale c'est que je n'ai que 1 tentatives pour trouver le code or je voudrai insérer une boucle pour proposer des propositions jusqu'à trouver la solution. pourriez vous m'aider.Merci d'avance.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void initialisationj(char*);
void initialisationt(char*);
void verification(char*);
void affichage(char*);


void main() {

char c='y',vord[5];
printf ("\t\t************************************\n");
printf ("\t\t* *\n");
printf ("\t\t* Bienvenue dans le Mastermind *\n");
printf ("\t\t* *\n");
printf ("\t\t************************************\n");
initialisationj(&vord[0]);
verification(&vord[0]);
printf ("\n");
printf ("\n\tVoici la bonne reponse : ");
affichage(&vord[0]);
printf ("\n");

}

void initialisationj (char *pa) {
int i,j;

srand(time(NULL)); /* initialisation du générateur aléatoire*/
for (i=0;i<4;i++) {
j=rand()%6; /* j sera toujours compris entre 0 et 6 */
switch(j) {
case 0 : *(pa+i)='B';
break;
case 1 : *(pa+i)='R';
break;
case 2 : *(pa+i)='V';
break;
case 3 : *(pa+i)='J';
break;
case 4 : *(pa+i)='F';
break;
case 5 : *(pa+i)='O';
}
}
}

void initialisationt (char *pa) {
int i;

for (i=0;i<4;i++) {
do {
printf("tapez le %d e caractere\n",i+1);
fflush(stdin);
*(pa+i)=getchar();
}
while(*(pa+i)!='B' &&*(pa+i)!='R' &&*(pa+i)!='V' &&*(pa+i)!='J' &&*(pa+i)!='F' &&*(pa+i)!='O');
}
}


void affichage (char *pa) { //affichage de la solution
int i;

for(i=0;i<4;i++) {
printf("%c ",*(pa+i));
}
printf("\n");
}

void verification (char *pa) {
int essai,i,j,b,m;
char tmp[5],tmp2[5];
essai=1;
for(i=0;i<4;i++){
tmp2[i]=*(pa+i);
}
printf("\n\tDevinez la suite de 4 couleurs parmi bleu (B) rouge (R) \n\t\t vert (V) jaune (J) fushia (F) et orange (O) \n");
printf ("\n");

//*******************
for(i=0;i<4;i++) {

do {

printf("tapez le %d e caractere\n",i+1);
fflush(stdin);
tmp[i]=getchar();
}

while(tmp[i]!='B' &&tmp[i]!='R' &&tmp[i]!='V' &&tmp[i]!='J' &&tmp[i]!='F' &&tmp[i]!='O');
}
/* bonnes réponses */
for(i=0,b=0;i<4;i++) {
if(tmp[i]==tmp2[i]) {
tmp[i]=tmp2[i]='b';
b++;
}
}

/* mauvaises reponses */
for(i=0,j=0,m=0;i<4;i++) {
if (tmp2[i]=='b'||tmp2[i]=='n') {
i++;
}

else {
if(tmp2[i]==tmp[j]) {
tmp2[i]=tmp[j]='n';
m++;
}
else {
j++;
}
}
essai=essai+1;
}

if(b==4) {
printf("\nBRAVO ! vous avez gagné en %d essais",essai);
essai=essai+1;
}
else {
printf("\n %d a la bonne place \n %d a la mauvaise place\n\n",b,m);
}
if (essai==0) {
printf ("\n");
printf("\n\tVous avez Perdu !");
printf ("\n");
}
}





2 réponses

lucieb31 Messages postés 345 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 62
Modifié par lucieb31 le 17/12/2010 à 20:14
tu l'a dit toi meme, il suffit que tu fasse une boucle. Dans ta fonction "verification", juste aprés ton printf("Devinez ....") tu ouvre ta boucle avec un do, et tu la ferme a la fin de la fonction avec un while (essai!= ...), a la place des ... tu met le nombre d'essai que tu souhaite. Si tu souhaite que ça soit tant que tu n'a pas trouvé, dans le while tu met un nontrouve == 1 que t'initialise a 1 et quand la combinaison est trouvée, tu la met à 0 ainsi tu sortira de la boucle.
Par contre, tu es sur que le reste fonctionne ?
0
oui tout fonctionne mais j'ai essayé mais je n'arrive pas a mettre la boucle je vais encore regarder mais je bloque énormément
0
lucieb31 Messages postés 345 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 28 juillet 2012 62
18 déc. 2010 à 14:17
pk tu n'arrive pas à mettre la boucle ? ça te fait une erreur ?
0