rendered paste body#include <stdio.h>
#include <stdlib.h>
typedef struct jeu {
int scoreJ;
int scoreO;
int *tab;
int tour;
int termine;
}jeu;
void init(jeu*n) {
int i;
n->scoreJ=0;
n->scoreO=0;
for(i=0;i<12;i++){
n->tab[i]=4;
}
printf("Qui commence la partie? Entrez 0 pour Joueur et 1 pour Ordinateur\n");
scanf("%d",&n->tour);
n->termine=0;
}
void affichage(jeu*n){
printf("_____________________________________\n");
printf("| %i | %i | %i | %i | %i | %i |\n",n->tab[11], n->tab[10], n->tab[9], n->tab[8], n->tab[7], n->tab[6]);
printf("|_____|_____|_____|_____|_____|_____|\n");
printf("| %i | %i | %i | %i | %i | %i |\n",n->tab[0], n->tab[1], n->tab[2], n->tab[3], n->tab[4], n->tab[5]);
printf("|_____|_____|_____|_____|_____|_____|\n");
printf("\n\n Score du joueur:%d\n Score de l'ordinateur:%d",n->scoreJ, n->scoreO);
}
void prise_joueur(jeu*n){
int trou_s=13;
int trou;
int nb_graines=0;
while (trou_s<0 || trou_s>5){
printf("Quel trou choisisez vous?");
scanf("%d",&trou_s);
if (n->tab[trou_s]==0) printf("Impossible de selectionner une case vide");
}
nb_graines=n->tab[trou_s];
n->tab[trou_s]=0;
trou=trou_s;
while (nb_graines!=0){
trou++;
if(trou==12)trou=0;
if(trou==trou_s)trou++;
n->tab[trou]++;
nb_graines--;
}
while (trou>5 && trou<12){
if(n->tab[trou]==2 || n->tab[trou]==3){
n->scoreJ=n->scoreJ+n->tab[trou];
trou--;}
else break;
}
n->tour=1;
}
void prise_ordi(jeu*n){
int trou_s=ia_attaque_hype(n);
int trou;
int nb_graines=0;
;
nb_graines=n->tab[trou_s];
n->tab[trou_s]=0;
trou=trou_s;
while (nb_graines!=0){
trou++;
if(trou==12)trou=0;
if(trou==trou_s)trou++;
n->tab[trou]++;
nb_graines--;
}
while (trou>=0 && trou<6){
if(n->tab[trou]==2 || n->tab[trou]==3){
n->scoreO=n->scoreO+n->tab[trou];
trou--;}
else break;
}
n->tour=0;
}
int ia_attaque_hype(jeu*n){
int i;
int j;
int k;
int l;
int nb_graines;
double score[2] = {0,n->scoreO-n->scoreJ};
double score_ca[2] = {0,0};
jeu*v;
v=malloc(12*sizeof(jeu));
for (i=6;i<12;i++){
if (v->tab[i]==0)i++;
v=n;
nb_graines=v->tab[i];
v->tab[i]=0;
j=i;
while (nb_graines!=0){
j++;
if(j==12)j=0;
if(j==i)j++;
v->tab[j]++;
nb_graines--;
}
while (j>=0 && j<6){
if(v->tab[j]==2 || v->tab[j]==3){
v->scoreO=v->scoreO+v->tab[j];
j--;}
else break;
}
score_ca[1]=v->scoreO;
for (k=0;k<6;k++){
if (v->tab[k]==0)k++;
nb_graines=v->tab[k];
v->tab[k]=0;
l=k;
while (nb_graines!=0){
l++;
if(l==12)l=0;
if(l==k)l++;
v->tab[l]++;
nb_graines--;
}
while (l>=6 && j<12){
if(v->tab[l]==2 || v->tab[l]==3){
v->scoreJ=v->scoreJ+v->tab[l];
l--;}
else break;
}
if (score_ca[2]<v->scoreJ){
score_ca[2]=v->scoreJ;
}
}
if (score[2]<score_ca[1]-score_ca[2]){
score[2]=score_ca[1]-score_ca[2];
score[1]=i;
}
}
return score[1];
}
void alternance(jeu*n){
while (n->termine=0){
affichage(n);
if (n->tour==1){
prise_ordi(n);}
else prise_joueur(n);
}
}
main(){
jeu*n;
n=malloc(12*sizeof(jeu));
init(n);
alternance(n);
}