2.14 Corrigés des exercices
41
int alphabeta ( int depth , int alpha , int beta , char joueur ,
list & vp ) {
}
if ( clock () - clockStart > maxClock )
return O;
if ( depth == 0)
return quiescence (alpha , beta , joueur );
list listeCoups = virus . coupsLegaux (joueur );
if ( listeCoups . empty ())
return virus . evaluationSiPlusDeCoupsPossibles (joueur );
/* He uristique des coups qui tuent */
Coup killer = coupQuiTue [depth ] [0] ;
Coup secondKiller = coupQuiTue [ depth ] [ 1];
i f ( k i 11 e r . c o u 1 e u r == j o u e u r )
if (virus . coupLegal ( killer ))
joueAlphaBeta ( killer , depth , alpha , beta , joueur ,
vp );
if (alpha < beta )
i f ( s e c o n d K i 11 e r . c o u 1 e u r == j o u e u r )
if ( virus . coupLegal ( secondKiller ))
joueAlphaBeta ( secondKiller , depth , alpha , beta ,
joueur , vp );
/* Fin de l'heuristique des coups qui tuent */
for (list :: iterator it = listeCoups .begin ();
(it ! = listeCoups .end ()) && (alpha < beta ); ++ it )
if ((* it ! = killer ) && (* it ! = secondKiller ))
joueAlphaBeta ( * i t , depth , alpha , beta , joueur , vp );
return alpha ;
2.14.12 Heuristique de l'historique
Au jeu du virus on fait correspondre à un coup l'indice de son intersection si c'est un
coup noir, et le nombre de cases du damier plus l'indice de son intersection si c'est un
coup blanc. Les indices des intersections commencent à 0 pour l'intersection la plus en
haut à gauche puis s' incrémentent en avançant vers la droite et en descendant d'une ligne
au bout de chaque ligne de cases.
Dans le code ci-dessous MaxNombre code le nombre d'indices possibles et la fonction nombre ( ) donne l'indice du coup.
const int MaxNombre = 2 * Taille * Taille ;
Précédent

- 55/256

Suivant