4.10 Corrigés des exercices
4.10.4 Recherche À au Phutball
bool lambda ( int joueur , int ordre ) {
if ( phutball . gagne (joueur , phutball . balle ))
return true ;
list listeCoups , listeCoupsAdverses ;
if ( phutball . coupsLegaux (joueur , listeCoups ))
return true ;
if (ordre == 0)
return false ;
fo r (list:: iterator it = listeCoups .begin ();
it != listeCoups .end (); ++ it ) {
bool menaceVerifiee = false ;
phutball . joue (* it );
if (lambda (joueur , ordre - 1)) {
menaceVerifiee = true ;
int autre = adversaire (joueur );
79
if ( phutball . coupsLegaux (autre , listeCoupsAdverses ))
menaceVerifiee = false ;
}
}
}
for ( 1 i s t:: i ter a t or i t 1 =
}
listeCoupsAdverses . begin ();
(itl != listeCoupsAdverses .end ()) &&
menaceVerifiee ; ++ itl) {
phutball .joue (* itl );
if (!lambda (joueur , ordre ))
menaceVerifiee = false ;
phutball . dejoue (* itl );
phutball . dejoue (* it );
if ( menaceVerifiee )
return true ;
return false ;
4.10.5 Réduction aux coups prometteurs
On aj oute les fonctions suivantes dans la classe Phutball de façon à trouver les coups
qui étendent le chemin de la balle (fonction coupsVoisinsBalle) et à prendre en
compte l'ordre de la menace pour réduire le nombre de coups à envisager (fonction
coupsLegaux) :
bool coupsLegaux ( int ordre , int joueur ,
1 i s t & 1 i s te ) {
bool gagne = false ;
liste . clear ();
4.10.4 Recherche À au Phutball
bool lambda ( int joueur , int ordre ) {
if ( phutball . gagne (joueur , phutball . balle ))
return true ;
list
if ( phutball . coupsLegaux (joueur , listeCoups ))
return true ;
if (ordre == 0)
return false ;
fo r (list
it != listeCoups .end (); ++ it ) {
bool menaceVerifiee = false ;
phutball . joue (* it );
if (lambda (joueur , ordre - 1)) {
menaceVerifiee = true ;
int autre = adversaire (joueur );
79
if ( phutball . coupsLegaux (autre , listeCoupsAdverses ))
menaceVerifiee = false ;
}
}
}
for ( 1 i s t
}
listeCoupsAdverses . begin ();
(itl != listeCoupsAdverses .end ()) &&
menaceVerifiee ; ++ itl) {
phutball .joue (* itl );
if (!lambda (joueur , ordre ))
menaceVerifiee = false ;
phutball . dejoue (* itl );
phutball . dejoue (* it );
if ( menaceVerifiee )
return true ;
return false ;
4.10.5 Réduction aux coups prometteurs
On aj oute les fonctions suivantes dans la classe Phutball de façon à trouver les coups
qui étendent le chemin de la balle (fonction coupsVoisinsBalle) et à prendre en
compte l'ordre de la menace pour réduire le nombre de coups à envisager (fonction
coupsLegaux) :
bool coupsLegaux ( int ordre , int joueur ,
1 i s t
bool gagne = false ;
liste . clear ();
