Derto
Messages postés11Date d'inscriptiondimanche 7 décembre 2008StatutMembreDernière intervention14 janvier 2009
-
17 déc. 2008 à 14:04
Derto
Messages postés11Date d'inscriptiondimanche 7 décembre 2008StatutMembreDernière intervention14 janvier 2009
-
18 déc. 2008 à 10:45
Bonjour !
j'aurais besoin d'un peu d'aider pour la programmation d'un jeu d'echec.
J'utilise un Algorithme de type minimax utilisant une fonction récursive et je rencontre pas mal de problème, je m'embrouille un peu on va dire
Voici mon code brouillon qui n'est pas fonctionnel et j'aimerai un peu d'aide pour le finaliser.
Le premier problème est que fait comme cela, mon jeu ne prend pas en compte les réponses adverse.
Mais je n'arrive pas tellement a faire en sorte qu'il joue les coups blanc une profondeur sur deux.
Function analyse($positions_reel, $profondeur) // le plateau et la profondeur de la recherche.
{
$coups_possible coups_possible_noir($positions_reel); // renvoit un tableau avec la liste des coup possible du joueur noir (l'ordi), par exemple pour le premier coup $coups_possible[1][avant] case_avant et $coups_possible[1][apres] = case_apres
$score_meilleur_coup = -2000000;
$z = 1;
while ($coups_possible[$z][avant] != NULL)
{
$positions_reel_avant = $positions_reel; // fait une copie du plateau de jeu pour defaire le coup plus tard
$positions_reel[$coups_possible[$profondeur][$z][apres]] = $positions_reel[$coups_possible[$z][avant]]; // on joue le coup
$positions_reel[$coups_possible [$z ][avant]] = 'vide';
if ($profondeur == 0)
{
$score_noir = evaluation_noir($positions_reel);
$score_blanc = evaluation_blanc($positions_reel);
$score = $score_noir - $score_blanc ;
}
else
{
$score = analyse($positions_reel, $profondeur - 1);
}
$positions_reel = $positions_reel_avant ; // on defait le dernier coup
if ($score > $score_meilleur_coup)
{
$score_meilleur_coup = $score ;
$meilleur_coup = $z;
}
$z++;
}
return $score_meilleur_coup;
}
Derto
Messages postés11Date d'inscriptiondimanche 7 décembre 2008StatutMembreDernière intervention14 janvier 2009 18 déc. 2008 à 10:45
Je cherche un code de ce genre mais fonctionnel : D
J'ai fait un script de ce genre, mais il ne prend pas en compte les réponses adverse (ne fait que profondeur 1 :<)
Si quelqu'un a une idée d'où vient le problème
Function analyse($positions_reel, $profondeur)
{
if ($profondeur % 2 == 0) // savoir si on regarde les coups noir ou blanc
{
$coups_possible_noir = coups_possible_noir($positions_reel);
$i = 0;
$score_le_plus_haut = -20000000;
while ($coups_possible_noir[$i] != NULL)
{
$i++;
$coup_apres = $positions_reel[$coups_possible_noir[$i][apres]];
$positions_reel = faire_coup($positions_reel, $i, $coups_possible_noir);
if ($profondeur == 0)
{
$coups_possible_noir2 = coups_possible_noir($positions_reel);
$score_noir2 = evaluation_noir($positions_reel, $coups_possible_noir2);
$score_blanc2 = evaluation_blanc($positions_reel);
$score = $score_noir2 - $score_blanc2;
}
else
{
$score_noir_reponse = analyse($positions_reel, $profondeur - 1);
$score = $score_noir_reponse + score; //pour faire la difference entre le score du coup est celui de la réponse adverse
}
if ($score > $score_le_plus_haut) // pour maximiser les coups noir
{
$score_le_plus_haut = $score;
$_SESSION['meilleur_coup'] = $i; // renvoit normalement le dernier coup à jouer