Master mind console

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 857 fois - Téléchargée 30 fois

Contenu du snippet

Basé sur le traitement de deux chaines de caractères et l'utilisation
de caractères jokers, c'est un mastermind très simple et paramétrable.
Si vous connaissez une méthode plus simple, ça m'intéresse.

Source / Exemple :


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

void main()
{
int nbcoups=0;
int nbchiffre=0;
int nbp=0,nmp=0,gagne=0,i,j,k;
char combinaison[10], combijeu[10];
char jeu[10];
time_t t;
srand((unsigned) time(&t));

printf("en combien de coups jouez vous ?");
scanf("%d",&nbcoups);
if (nbcoups <1)nbcoups =1;
if (nbcoups>12)nbcoups =12;
printf("avec combien de chiffres ?");
scanf("%d",&nbchiffre);
if (nbchiffre <1)nbchiffre =1;
if (nbchiffre>9)nbchiffre =9;
for(i=0; i<nbchiffre; i++)
{
combinaison[i]=(char)(rand()%10+'0');
}
combinaison[i]=0;

for(i=0; i<nbcoups && gagne==0 ; i++)
  {
  printf("essai N° %d :",i);
  scanf("%s",jeu);
  if(!strncmp(jeu,combinaison,nbchiffre)) gagne=1;
  else
   {
   strcpy(combijeu, combinaison);
   nbp=0; nmp=0;
   for(j=0;j<nbchiffre; j++)
    {
    if(jeu[j]==combijeu[j]){nbp++;jeu[j]='B';combijeu[j]='b';}
    }

   for(j=0;j<nbchiffre; j++)
     {
     for(k=0;k<nbchiffre;k++)
       if(j!=k && jeu[j]==combijeu[k])
         {jeu[j]='M';combijeu[k]='m'; nmp++;}
      }
    printf("Bien places :%d Mal places :%d", nbp,nmp);
    }
  }

  if(gagne)
  {  printf ("trouve en %d coups",i);  }
  else
  {  printf("la bonne combinaison :%s",combinaison); }

  scanf("%s",jeu);

}

A voir également

Ajouter un commentaire

Commentaires

pyronet
Messages postés
24
Date d'inscription
samedi 14 février 2004
Statut
Membre
Dernière intervention
3 mai 2006
-
Avec plaisir, Uxtobirza
en fait je planche sur un master mind avec intelligence artificielle en ce moment et j'ai regardé un peu les sources qui circulaient sur le web...
je posterai mon résultats quand ce sera fini ;-)
uxtobirza
Messages postés
16
Date d'inscription
dimanche 2 février 2003
Statut
Membre
Dernière intervention
3 juin 2008
-
merci, j'ai corrigé 2 choses :
1/
for (i=0 ; i<9 ; i++)
{
combinaison[i]=0;
}
combinaison[i]=0;
il fallait mettre un caractère fin de chaine pour que ce soit lisible

2/ vers la fin du programme :

{ printf("la bonne combinaison :%s",combinaison); }

et non pas %d

des précisions :

- (rand()%10+'0');
va donner une valeur entre 48 et 58, soit un caractère entre '0' et '9' ce qui permet de traiter un chiffre comme du . caractère.

- combinaison est en effet un tableau de caractère, soit une chaine.

merci d'avoir vu les deux erreurs
pyronet
Messages postés
24
Date d'inscription
samedi 14 février 2004
Statut
Membre
Dernière intervention
3 mai 2006
-
Salut,

Il est cencé fonctionner ce code ? J'ai voulu voire ce que ça donnait (compil avec devcpp) mais il y a beaucoup de problèmes dans ton code.
Rapidement, parce que j'ai commencé à faire des modifs pour le faire fonctionner :
Avant tout j'ai initialisé les tableaux à 0 :
for (i=0 ; i<9 ; i++)
{
combinaison[i]=0;
}

for (i=0 ; i<9 ; i++)
{
combijeu[i]=0;
}

Ensuite, il y a un problème avec ta randomisation...
ici : combinaison[i]=(char)(rand()%10+'0');
ça génère des nombre à 2 chiffres... je m'y suis pas attardé j'ai fait des tests avec un tableau que je rentre manuellement.

En gros je me suis arrêté là parce que j'ai vu que la suite ne marchait pas non plus... mais un dernier truc que j'ai remarqué :
printf("la bonne combinaison :%d",combinaison); cela ne marche pas car combinaison est un tableau, cette ligne t'affichera pas le contenu du tableau mais je pense plutot son adresse. Voilà comment faire :
for(i=0; i<nbchiffre; i++)
{
printf("%d", combinaison[i]);
}
je pense que les autres problèmes dans le test des combinaisons viennent aussi du fait que tu gère mal le tableau (mais je m'y suis pas attardé)

J'espère servir à quelquechose avec ces conseils et ne pas te raconter de bêtises (je me remet au C ça fait perpète)...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.