[AIDE] Finition mastermind SVP

ribery91720 Messages postés 17 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 27 mars 2009 - 20 janv. 2008 à 13:29
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 21 janv. 2008 à 10:42
Bonjour a tous,

Voila j'ai fait un mastermind des plus basiques sans graphisme ni rien mais il ne marche pas dans tous les cas

Je vous met mon code :

#include <stdio.h>

#include <stdlib.h>

#define taille 4

int CduPif (int);

int init (int []);

int saisie (int []);

int mal_place (int [],int[]);

int bien_place (int [],int []);

main ()

{

int tab[taille],tab2[4], i,reussi,perdu,essai=0;

printf (" ***********************\n");

printf (" * MASTERMIND *\n");

printf (" ***********************\n\n");

printf ("Bienvenue sur le jeu de Mastermind\n");

init (tab);

for (i=0; i < taille; i++)

{

printf (" %d | ",tab[i]);

}

printf ("\t");

printf (" \nLes chiffres ont été générés aléatoirement\n\n");

printf (" Début du jeu : \n\n");

while (essai != 5)

{

saisie (tab2);

reussi = bien_place (tab,tab2);

mal_place (tab,tab2);

essai++;

for (i=0; i < taille; i++)

{

printf (" %d | ",tab2[i]);

}

if (reussi == taille)

{

essai = 5;

printf ("Félicitation vous avez gagné!!!");

}

else if ((essai == 5) && (reussi !=4))

{

printf ("\n\nVous avez perdu!!!");

}

}

}

int init(int tab[])

{

int i,n ;

randomize();

printf (" Jusqu'à quel valeur voulez vous initialiser le jeu??\t");

scanf ("%d",&n);

for(i=0; i<4; i++)

{

tab[i] = CduPif(n);

}

}

int CduPif(int n)

{

int a;

a = rand() % n ;

return a;

}

int saisie (int tab2 [])

{

int i;

int ch;

randomize ();

printf ("\n\n");

for (i=0; i < taille; i++)

{

printf ("chiffre %d : ",i+1);

scanf ("%d",&ch);

tab2[i] = ch;

}

}

int mal_place (int tab[taille] , int tab2[taille])

{

int i,a=0,m=0;

int tab3[4]

for (i = 0; i< taille; i++)

{

if (tab[i]!=tab2[i])

{

for (a = 0; a< taille; a++)

{

if(tab2[a] == tab[i])

{

m++;

}

}

}

}

printf ("\nIl y a %d chiffres mal placés\n\n",m);

return m;

}

int bien_place (int tab[taille] , int tab2[taille])

{

int i,mal=0;

for (i = 0; i< taille; i++)

{

if (tab[i]==tab2[i])

{

mal++;

}

}

printf ("\nIl y a %d chiffres bien placés\n\n",mal);

return mal;

}

Je vous explique il ne marche pas ds certains cas :

- lorsqu'il y a un double dans la solution est par exemple 3 | 6 |
7 | 3 et ke je rentre 3 | 9 | 3 | 8 il me met qu'il y a 2 mal placé
alors qu'il devrait y en avoir un seul

- lorsqu'il y a un double dans la réponse qui n'est pas dans la
solution par exmple 3 | 4 | 5 | 6 et ke je rentre 3 | 3 | 9 | 9 il me
met qu'il y a deux mal placé alors qu'il y en a que un et un qui n'y
est pas du tout

Si vous pouvez m'aider apparamment je dois mettre un tab3 dans le mal placé mais je ne sais pas quoi en faire

merci d'avance de votre aide

1 réponse

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
21 janv. 2008 à 10:42
Salut
Je pense que ton problem vient du fait que tu ne traite pas le cas ou tes pions sont bien place dans ta fonction "MalPlacer". Effectivement si tes pions sont bien placer, pas besoin de les tester.
je ferais qqchose de la forme:

int mal_place (int tab[taille] , int tab2[taille])
{
   bool Tab3[Taille];
   for(i=0;i<Taille;i++)
      if(tab[i]==tab2[i])
         Tab3[i]=1;
      else
         Tab[i]=0;
   
//la grace a tab3 tu sais quelle case il n'est pas necessaire de voir

   for(i=0;i<Taille;i++)
      if(Tab3[i]==0)            //si le chiffre n'es pas deja place
         for(j=0;j<Taille;j++)
            if(Tab3[i]==0  && i != j && tab2[i]==tab[j])
            {
               mal++;
               break;
            }
}

C'est deja un peu mieux mais ca ne doit pas encore marcher dans toutes les situations.
Refere toi sur ce lien:
http://www.cppfrance.com/codes/MASTERMIND-MODE-GRAPHIQUE-AVEC-CMUGRAPHICS_28016.aspx

A+
Mon site internet : http://pistol.petesampras.free.fr
0
Rejoignez-nous