ribery91720
Messages postés17Date d'inscriptiondimanche 6 janvier 2008StatutMembreDernière intervention27 mars 2009
-
20 janv. 2008 à 13:29
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDerniè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
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 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;
}
}