Mastermind Ia en C

Fermé
Avicynn - 26 mai 2013 à 19:24
 Avicynn - 26 mai 2013 à 19:26
Bonjour,

Je dois programmer l'IA du mastermind en C, enfin, autrement dit, c'est l'ordinateur qui doit deviner la combinaison des couleurs. Bref, je suis en terminal S et je fais option ISN, le prof a un peu craqué de nous filler des trucs aussi durs à faire mais bon, j'ai presque finit le programme, d'après moi il manque juste la fonction reproposer une combinasons parmis l'enssemble des combinaisons possible restantes et recommencer la verifications de pions noir et blanc /bien et mal placés. Merci

#include <stdio.h>

#include <stdlib.h>
#define N 4 //définie une constante N=4

typedef struct noir_blanc
{
int blanc;
int noir;
}Noir_blanc;

typedef struct jeu
{
int p1;
int p2;
int p3;
int p4;
int possible;
}Jeu;



void initialise_Code(int *code)
{
int i;


for (i=0; i<4 ;i++)
{
switch (rand() % 8)
{
case 0:
{
code[i] = 'r';
}break;
case 1:
{
code[i] = 'v';
}break;
case 2:
{
code[i] = 'b';
}break;
case 3:
{
code[i] = 'j';
}break;
case 4:
{
code[i] = 'o';
}break;
case 5:
{
code[i] = 'p';
}break;
case 6:
{
code[i] = 'f';
}break;
case 7:
{
code[i] = 'm';
}break;
}
}
}


void generer(Jeu* ensemble)
{
int i,j,k,l;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
for(k=0;k<8;k++)
{
for(l=0;l<8;l++)
{
ensemble[i*512+j*64+k*8+l].p1=i;
ensemble[i*512+j*64+k*8+l].p2=j;
ensemble[i*512+j*64+k*8+l].p3=k;
ensemble[i*512+j*64+k*8+l].p4=l;
ensemble[i*512+j*64+k*8+l].possible=1;
}
}
}
}
}


void affiche(Jeu* ensemble)
{
int i;
for(i=0;i<4096;i++)
{
if(ensemble[i].possible==1)
{
printf("%d %d %d %d \n",ensemble[i].p1,ensemble[i].p2, ensemble[i].p3, ensemble[i].p4);
}
}
}



Noir_blanc verification(int* tab1 ,int* tab2)
{
int i, j, Jeu_solution[4], Jeu_test[4];
for(j=0 ; j<4 ; j++)
{
Jeu_solution[j]=tab1[j];
Jeu_test[j]=tab2[j];
}

Noir_blanc sol;
sol.blanc=0;
sol.noir=0;
for(i=0; i<4; i++) //Verification des couleurs bien placées
{
if(Jeu_test[i]==Jeu_solution[i])
{
sol.noir++;
Jeu_test[i]=9;
Jeu_solution[i]=9;
}
}

for(i=0; i<4 ; i++) //Verification des couleurs mal placées
{
if(Jeu_test[i]!=9)
{
for(j=0; j<4; j++)
{
if(Jeu_test[i]==Jeu_solution[j])
{
if(i!=j)
{
sol.blanc++;
Jeu_solution[j]=9;
}
}
}

}
}
return sol;
}



void bien_mal_place(int* n, int* b) //annonce à l'ordinateur combien de pions sont bien ou mal placés
{
printf("entrez le nombre de pions mal places");
scanf("%d",b);
printf("entrez le nombre de pions bien places");
scanf("%d",n);
}




void supprimer_solutions(Jeu*ensemble,int* ref,Noir_blanc sol)//suppression des combinaisons impossible du tableau
{
int i;
Noir_blanc tmp;
int jeutmp[4];
for(i=0;i<4096;i++)
{
if(ensemble[i].possible==1)
{
jeutmp[0]=ensemble[i].p1;
jeutmp[1]=ensemble[i].p2;
jeutmp[2]=ensemble[i].p3;
jeutmp[3]=ensemble[i].p4;
tmp=verification(ref,jeutmp);
if(tmp.noir!=sol.noir||tmp.blanc!=sol.blanc)
{
ensemble[i].possible=0;
}
}
}
}

Jeu entrez_les_couleurs(Jeu combinaison)//Le joueur rentre la combinaison que l'ordinateur
{ //doit deviner
printf("entrez la permiere couleur");
scanf("%d",combinaison.p1);
printf("entrez la deuxieme couleur");
scanf("%d",combinaison.p2);
printf("entrez la troisieme couleur");
scanf("%d",combinaison.p3);
printf("entrez la quatrieme et derniere couleure");
scanf("%d",combinaison.p4);
}



int main()
{
Jeu ensemble[4096];
generer(ensemble);
Noir_blanc sol;
sol.noir=1;
sol.blanc=2;
int jeu[4];
jeu[0]=0;
jeu[1]=1;
jeu[2]=2;
jeu[3]=3;
supprimer_solutions(ensemble,jeu,sol);

affiche(ensemble);
return 0;
}
            
                
A voir également:

1 réponse

hmm j'arrive pas à mettre le code entre les </>, qqn peut le faire, dans le but d'ader tout le monde à mieux lire le programme? merci :)
0