Jeux d’échecs
Projet de programmation scienti…que
ENSTA
Il s’agit dans ce projet de réaliser un jeux d’échec permettant à un joueur humain d’a¤ronter l’ordinateur.
Ce dernier utilisera un algorithme de type min-max pour jouer. Dans une première étape, on développera
une version non graphique et dans une seconde étape si le tepms le permet, on développera une interface
graphique s’appuyant sur les utils développés dansla première phase. La réalisation de ce projet suppose un
minimum de connaissances des échecs (au moins les règles). Il n’est pas question, vu le temps imparti, de
faire jouer la machine comme un grand maître! Dans ce qui suit ne sont énoncés que les principes généraux
et quelques éléments sur les classes à utiliser. Bien évidemment, il vous appartient de préciser et de compléter
ces classes, voire d’en ajouter de nouvelles si le besoin s’en fait sentir.
1 Principe de l’algorithme du min-max
Cet algorithme n’est pas spéci…que, il s’applique à tout jeu à deux joueurs. On peut voir un jeu à deux
joueurs comme une succession de positions, résultat des coups alternés des joueurs. Nous noterons P1
iune
position que doit jouer le joueur 1et P2
iune position que doit jouer le joueur 2:A un instant donné de la
partie, supposons que le joueur 1doit jouer à partir de la position P1
0:Il a en général un certain nombre
de coups possibles C1
kqui vont produire autant de position P2
1;k que le joueur 2va devoir jouer et ainsi de
suite. Ce qui nous donne un arbre de toutes les possibilités d’évolution du jeu à une profondeur donnée.
P0
1
1,1
P
2
1,2
P2
1,3
P2
1,4
P2
1,1
C1
1,2
C1
1,3
C1
1,4
C1
2,1
P1
2,2
P1
2,3
P1
2,1
C2
2,2
C
2
2,3
C2
On dé…nit maintenant une fonction valeur d’une position V(P). La valeur d’une position gagnante pour le
joueur 1vaut +1, d’une position perdante 1, d’une position de match nul 0. La valeur d’une position
autre sera calculée en fonction d’heuristiques liées au jeu. Par exemple aux échecs, on pourra prendre la
di¤érence des valeurs des pièces du joueur 1encore présentes sur l’échiquier la di¤érence avec la valeur des
pièces du joueur 2à laquelle on ajoute la di¤érence du nombre de cases controlées par les deux joueurs. On
dé…nit alors lea fonction M inMax d’une position quelconque Pde la façon suivante :
MinMax(P) = 8
<
:
V(P)si Pest une position terminale
max(MinM ax(P1); :::; MinM ax(Pk)) si Pest une position du joueur
min(MinM ax(P1); :::; MinM ax(Pk)) si Pest une position de l’opposant
P1; :::; Pkdésignant toutes les positions obtenues après un coup.
L’algorithme du min-max consiste à calculer la fonction MinM ax de toutes les positions issues du premier
1