emmatopiak
Messages postés
149
Date d'inscription
mercredi 28 mars 2007
Statut
Membre
Dernière intervention
17 mai 2007
2
4 mai 2007 à 00:03
BOn voilà je t'ai refait tout ca bien plus clean:p
Ca semble marcher chez moi.
#include
void calculerValeur(int allumettes, int retirer, int joueur, int autreJoueur, int * coup, int * valeur);
int main()
{
int allumettes = 13;
int retirer = 3;
int joueur = 0;
int coup;
int valeur;
calculerValeur(allumettes, retirer, joueur, joueur, &coup, &valeur);
printf("Meilleur coup pour l'ordinateur : %d (valeur %d)\n", coup, valeur);
return 0;
}
void calculerValeur(int allumettes, int retirer, int joueur, int joueurInitial, int * c, int * v) {
int i;
int coup;
int valeur;
int maxCoup;
int maxValeur;
int minCoup;
int minValeur;
if (allumettes<=1) {
if (joueur==joueurInitial) {
*v = -100;
*c = 0;
return;
}
else {
*v = 100;
*c = 0;
return;
}
}
else {
if (allumettes-1<=retirer) {
if (joueur==joueurInitial) {
*v = 100;
*c = allumettes-1;
return;
}
else {
*v = -100;
*c = allumettes-1;
return;
}
}
else {
if (joueur==joueurInitial) {
maxCoup = 1;
calculerValeur(allumettes-1, retirer, !joueur, joueurInitial, &coup, &maxValeur);
for (i=2; i<=retirer; i++) {
calculerValeur(allumettes-i, retirer, !joueur, joueurInitial, &coup, &valeur);
if (valeur>maxValeur) {
maxValeur = valeur;
maxCoup = i;
}
}
*c = maxCoup;
*v = maxValeur;
return;
}
else {
minCoup = 1;
calculerValeur(allumettes-1, retirer, !joueur, joueurInitial, &coup, &minValeur);
for (i=2; i<=retirer; i++) {
calculerValeur(allumettes-i, retirer, !joueur, joueurInitial, &coup, &valeur);
if (valeur<minValeur) {
minValeur = valeur;
minCoup = i;
}
}
*c = minCoup;
*v = minValeur;
return;
}
}
}
}