Jeu de Dames - Maxence MOHR

Transcription

Jeu de Dames - Maxence MOHR
Polytech'Marseille
Case 925 –163, avenue de Luminy
13288 Marseille cedex 9
Informatique 3ème année
Promo 2016
Projet Algorithmique
Jeu de Dames
Rapport de projet
Etudiants :
Charton Trystan
Mohr Maxence
Ollagnon Julien
Tuteur :
Alexandra Bac
Rapport d’analyse -- Jeu de Dames
Introduction
Les dames ou jeu de dames est un jeu de société combinatoire abstrait pour deux joueurs
dont le but et de capturer ou d’immobiliser les pièces de son adversaire. Le terme désigne en
fait plusieurs jeux comme le jeu de dames internationales ou bien le jeu de checkers.
Le but de ce projet est d’appliquer nos connaissances dans le langage C et en algorithmique
afin de réaliser non seulement un jeu de Dames à deux joueurs humains, mais aussi avec un
joueur ordinateur ayant plusieurs niveaux de difficultés.
Ce document contient l’analyse préliminaire du projet et permet de montrer un aperçu de la
compréhension global du sujet, ainsi qu'une description des futurs algorithmes et structures
de données.
~1~
Rapport d’analyse -- Jeu de Dames
Sommaire
1) Règles du jeu de Dames






Le matériel
La marche des pièces
La prise
Les irrégularités
La fin de partie égale
Le résultat
2) Analyse des boucles nécessaires
3) Algorithmes des boucles
4) Réflexion sur le joueur ordinateur
5) Planning prévisionnel
6) Tests
7) Bilan
8) Conclusion
9) Références
~2~
Rapport d’analyse -- Jeu de Dames
Regles
Les règles ci-dessous sont des règles simplifiées. Les règles détaillées se trouvent à cette
adresse : http://www.ffjd.fr/Web/index.php?page=reglements
Vocabulaire : si vous avez le trait, cela signifie que c'est à vous de jouer.
LE MATERIEL
1. Le jeu de dames international se joue sur un damier carré divisé en 100 cases égales,
alternativement claires et foncées.
2. Le jeu se joue sur les cases foncées du damier. Il y a donc 50 cases actives. La plus
longue diagonale, joignant deux coins du damier et comprenant 10 cases foncées, se
dénomme la grande diagonale.
3. Le damier doit être placé de sorte que la première case de gauche, pour chaque
joueur, soit une case foncée.
4. Le jeu de dames international se joue avec 20 pions blancs (clairs) et 20 pions noirs
(foncés). Avant de débuter une partie, les 20 pions noirs et les 20 pions blancs sont
disposés sur les 4 premières rangées de chaque joueur.
Position initiale
LA MARCHE DES PIECES
1. Il existe deux types de pièces : les pions et les dames.
2. Le premier coup est toujours joué par les blancs. Les adversaires jouent un coup
chacun à tour de rôle avec leurs pièces.
~3~
Rapport d’analyse -- Jeu de Dames
3. Un pion se déplace obligatoirement vers l’avant, en diagonale, d’une case sur une
case libre de la rangée suivante.
Un pion se déplace vers l’avant, en diagonale, sur une case libre de la rangée
suivante.
4. Lorsqu'il atteint la dernière rangée, le pion devient dame. Pour cela, on couronne le
pion en plaçant dessus un deuxième pion de la même couleur.
Lorsqu'il atteint la dernière rangée, le pion devient dame.
5. Une dame doit attendre que l’adversaire ait joué au moins une fois avant d’entrer en
action.
~4~
Rapport d’analyse -- Jeu de Dames
6. Une dame se déplace en arrière ou en avant sur les cases libres successives de la
diagonale qu’elle occupe. Elle peut donc se poser, au-delà de cases libres, sur une
case libre éloignée.
Une dame se déplace en arrière ou en avant sur les cases libres de la diagonale
qu’elle occupe
7. Pour un joueur à qui c'est le tour de jouer, le fait de toucher une de ses pièces
jouables implique l’obligation de jouer cette pièce, pour autant que cela soit possible.
8. Tant qu’une pièce touchée ou en cours de déplacement n’a pas été lâchée, il est
permis de la poser sur une autre case, pour autant que cela soit possible.
9. Le joueur qui a le trait et qui désire replacer correctement une ou plusieurs pièces doit
le notifier d’avance et distinctement à l’adversaire par la formule "j’adoube".
LA PRISE
1. La prise des pièces adverse est obligatoire et s’effectue aussi bien en avant qu’en
arrière.
2. Lorsqu’un pion se trouve en présence, diagonalement, d’une pièce adverse derrière
laquelle se trouve une case libre, il doit obligatoirement sauter par-dessus cette pièce
et occuper la case libre. Cette pièce adverse est alors enlevée du damier. Cette
opération complète est la prise par un pion.
~5~
Rapport d’analyse -- Jeu de Dames
Un pion effectue une prise en passant au-dessus d'un pion adverse.
Il se rend alors sur la case suivante et enlève le pion adverse.
3. Lorsqu’une dame se trouve en présence sur la même diagonale, directement ou à
distance, d’une pièce adverse derrière laquelle se trouvent une ou plusieurs cases
libres, elle doit obligatoirement passer par-dessus cette pièce et occuper, au choix,
une des cases libres. Cette pièce est alors enlevée du damier. Cette opération
complète est la prise par une dame.
La dame peut effectuer une prise à distance.
La pièce à prendre doit se situer sur la même diagonale que la dame et il faut
également une case vide derrière.
La dame s'arrête sur la case libre de son choix située après la pièce prise.
4. Lorsqu’au cours d’une prise par un pion, celui-ci se trouve à nouveau en présence,
diagonalement, d’une pièce adverse derrière laquelle se trouve une case libre, il doit
obligatoirement sauter par-dessus cette seconde pièce, voire d’une troisième et ainsi
de suite, et occuper la case libre se trouvant derrière la dernière pièce capturée. Les
pièces adverses ainsi capturées sont ensuite enlevées du damier dans l’ordre de la
prise. Cette opération complète est une rafle par un pion.
~6~
Rapport d’analyse -- Jeu de Dames
Le pion prend également vers l'arrière
5. Lorsqu’au cours d’une prise par une dame, celle-ci se trouve à nouveau en présence,
sur une même diagonale, d’une pièce adverse derrière laquelle se trouve une ou
plusieurs cases libres, elle doit obligatoirement sauter par-dessus cette seconde pièce,
voire d’une troisième et ainsi de suite, et occuper au choix une case libre se trouvant
derrière et sur la même diagonale que la dernière pièce capturée. Les pièces adverses
ainsi capturées sont ensuite enlevées du damier dans l’ordre de la prise. Cette
opération complète est une rafle par une dame.
Au cours d'une prise, la dame change de direction pour prendre d'autres pièces.
6. Au cours d’une rafle, il est interdit de passer au-dessus de ses propres pièces.
7. Au cours d’une rafle, il est permis de passer plusieurs fois sur une même case libre
mais il est interdit de passer plus d’une fois au-dessus d’une même pièce adverse.
Il est permis de passer plusieurs fois sur une même case libre.
Mais il est interdit de passer plus d’une fois au-dessus d’une même pièce adverse.
~7~
Rapport d’analyse -- Jeu de Dames
8. Une rafle doit être clairement indiquée, pièce par pièce, en posant la pièce preneuse
sur la case de saut, le temps d’y passer, et en déposant cette pièce sur la case
terminale.
9. Les pièces prises ne peuvent être enlevées du damier qu’à l’issue de l’exécution
complète de la rafle.
10. La prise du plus grand nombre de pièces est prioritaire, donc obligatoire. Dans ce
cas, une dame compte pour une pièce, tout comme un pion. Elle ne confère nulle
priorité et n’impose aucune obligation.
Ici, les blancs doivent prendre trois pions noirs.
Ils ne peuvent pas prendre les deux dames noires !
11. Si les pièces à prendre sont en nombre égal dans deux ou plusieurs possibilités de
prise ou de rafle, le joueur est libre de choisir une de ces possibilités, soit avec un
pion, soit avec une dame.
12. Un pion qui au cours d’une rafle, ne fait que passer sur une des 5 cases de la rangée
de base adverse reste un pion lorsque la rafle est terminée.
LES IRREGULARITES
1. Si un des joueurs a commis une irrégularité, son adversaire a seul le droit de décider
si l’irrégularité doit être rectifiée ou si, au contraire, elle doit être maintenue. Quelques
exemples d'irrégularité :
o Jouer deux fois de suite
o Jouer une pièce de l’adversaire
o Jouer une pièce alors qu’une prise ou une rafle est possible
o Enlever sans raison des pièces de l’adversaire ou ses propres pièces
o Prendre un nombre inférieur ou supérieur de pièces possibles à prendre
o S'arrêter dans l’exécution d’une rafle
o Enlever irrégulièrement une pièce, au cours d’une rafle non terminée
2. Si un joueur refuse de se soumettre au règlement officiel du jeu, son adversaire est en
droit de l’y obliger.
~8~
Rapport d’analyse -- Jeu de Dames
LA FIN DE PARTIE EGALE
1. La fin de partie est considérée comme égale lorsque la même position se représente
pour la troisième fois, le même joueur ayant le trait.
2. Si, durant 25 coups, il n'y a ni déplacement de pion ni prise, la fin de partie est
considérée comme égale.
3. S’il n'y a plus que trois dames, deux dames et un pion, ou une dame et deux pions
contre une dame, la fin de partie sera considérée comme égale lorsque les deux
joueurs auront encore joué chacun 16 coups au maximum.
4. Pour autant qu’il n’y ait pas de phase de jeu en cours, la fin de partie de deux dames
contre une dame, et a fortiori, de une dame contre une dame, sera considérée égale.
LE RESULTAT
1. Le gain est obtenu par un joueur lorsque son adversaire :
o Abandonne la partie
o Se trouve dans l’impossibilité de jouer alors qu’il a le trait
o N’a plus de pièces
2. L’égalité, dénommée aussi remise ou nulle, est obtenue pour chacun des adversaires :
o Qui la déclare, de commun accord
o Lorsqu’aucun des deux ne parvient au gain
~9~
Rapport d’analyse -- Jeu de Dames
Analyse des boucles necessaires
Le jeu de dames se jouant au tour à tour et à deux joueurs uniquement, nous sommes
parvenus à une modélisation par tâches.
Une tâche principale, qui gérera le fonctionnement global : Affichage de l’écran titre,
sélection du mode de jeu, et appel des autres boucles du jeu. Les cas d’égalité ne seront
traités qu’en tant que tâches facultatives, car non essentielles au projet.
Une autre tâche s’occupera de l’affichage du damier et comptera le nombre de pions restant
pour chaque joueur, ainsi que le nombre de tours de jeu. Cela permettra qu’en plus d’afficher
ces statistiques pendant la partie de gérer certaines règles.
Une troisième tâche cherchera tous les coups possibles pour le joueur ayant le trait, et
vérifiera si son coup est valide ou non.
Une quatrième tâche gérera les règles de prise en s’assurant que toutes les règles aient été
appliquées, mettra à jour le damier en retirant les pions capturés et en plaçant le pion
déplacé à sa destination finale.
De plus nous avons décidé de modéliser le damier à l’aide d’un tableau de dimension 10x10
(comme le damier original) avec par exemple :
La valeur 0 pour une case vide ;
1 pour un pion noir ;
2 pour une dame noire ;
-1 pour un pion blanc ;
-2 pour une dame blanche
Dans la prochaine partie nous allons détailler et décrire en pseudo-code les différents
algorithmes énumérés ici.
~ 10 ~
Rapport d’analyse -- Jeu de Dames
Algorithmes des boucles

Fonction principale
C’est elle qui gèrera le fonctionnement du jeu en général : l’initialisation du jeu,
Afficher le titre du jeu
Demande utilisateur 1 ou 2 joueurs => type
Initialisation (tableau affichage, bloqué, etc...) bloqué=0 ; init(tableau)
Affichage tableau
tant que (bloqué=0)
Si joueur
bloqué += coup (tableau, joueur, type)
Affichage tableau
joueur = -1
Si !joueur
bloqué += coup (tableau, joueur, type)
Affichage
Joueur = 1
fin_tq
gagnant = fini(tableau)
si gagnant = -1
afficher les blancs ont gangné
si gagnant = 1
afficher les noirs ont gagnés
sinon
afficher match nul
fin

Fonction affichage
Affiche le plateau de jeu
void affichage(tableau)
i, j, bl, no
Afficher cadre
pour i de 0 à 10
pour j de 0 à 10
Afficher tableau[i][j]
Si case_noire
noirs++
Si case_blanche
blancs++
f_pour
f_pour
Afficher cadre
Afficher info du jeu

Fonction coup possible
Cherche les coups possibles pour un joueur, le jouer er appeler la fonction.
Vous trouverez dans la page suivante un schéma explicatif de la boucle de recherche de coups.
~ 11 ~
Rapport d’analyse -- Jeu de Dames
~ 12 ~
Rapport d’analyse -- Jeu de Dames

Fonction joue
Cette boucle a pour but de jouer une rafle tout e vérifiant que la rafle est autorisée.
La boucle de recherche de coups renvoie un tableau rafles (tableau de liste) et cette
boucle se sert de ce tableau pour vérifier le coup saisi par le joueur…
~ 13 ~
Rapport d’analyse -- Jeu de Dames
Reflexion sur le joueur ordinateur
Comme indiqué par l’énoncé, le joueur IA sera basé sur l’algorithme MiniMax, avec différents
niveaux de profondeurs en fonction du niveau de difficulté choisi.
De plus, la fonction d’évaluation sera scindée en deux (une pour les pions, une pour les
dames, puis combinaison des deux pour avoir une seule évaluation globale) un système de
valeur de cases sera instauré afin d’établir des priorités de captures/déplacements (les dames
étant les pions les plus puissants, sacrifier un ou deux pions si l’échange est plus
intéressant…)

La fonction récursive Minimax
Void appel_minimax (damier, joueur, prof, coord)
Minimax(damier, joueur, prof)
int minimax (damier, joueur, profondeur, Nœud N, coordonnées coord_sauvées)
Val1=INT_MIN
Si profondeur > 0
{
Si(nœud = MAX)
Cherche des coups possibles de l’IA
Pour chaque coup possible
Copie du tableau de jeu (copie_damier)
L’IA joue dans la case possible (rafle entière)
val = minimax(copie_damier, joueur, profondeur -1, MIN)
Si val > val1
Val1=val
Coor_sauvées = Coord_actuelles
Si(nœud = MIN)
Cherche des coups possibles de l’humain
Pour chaque coup possible
Copie du tableau de jeu (copie_damier)
L’humain joue dans la case possible (rafle entière))
val = minimax(copie_damier, joueur, profondeur -1, MAX)
Si val < val1
Val1=val
Coor_sauvées = Coord_actuelles
}
Else
Return eval(damier)
~ 14 ~
Rapport d’analyse -- Jeu de Dames

Fonction d’évaluation des pions eval_pions (damier)
Cette fonction cherchera les pions sur le damier, et pour chaque pion (de l’IA ou de l’humain)
donnera un score en fonction de leurs positions sur le plateau, avec le tableau de scores cidessous. Un pion IA sera compté en positif, et un pion humain en négatif.
La somme de ces scores donnera l’évaluation pour les pions eval_pions.
eval_pions = ∑𝑖=𝑝𝑖𝑜𝑛𝑠 𝐼𝐴 𝑠𝑐𝑜𝑟𝑒(𝑖) − ∑𝑗=𝑝𝑖𝑜𝑛𝑠 𝐻𝑢𝑚𝑎𝑖𝑛𝑠 𝑠𝑐𝑜𝑟𝑒(𝑗)
Une fonction d’évaluation plus efficace aurait été de prendre en compte le positionnement
relatif de chaque pion IA par rapport à celui de l’humain. Cette implémentation ne sera pas
en place, en raison d’un manque de temps. En revanche, l’évaluation statique, dépendant de
la position, est actuellement implantée.

Fonction d’évaluation des dames eval_dame (damier)
Cette fonction a pour but d’évaluer un plateau par rapport à la position des dames.
Le principe étant qu’une dame ne doit pas être en danger, et si une dame est en position
pour capturer un pion, l’option est favorisée.
Cette fonction d’évaluation ne fonctionne que pour les profondeurs impaires.
~ 15 ~
Rapport d’analyse -- Jeu de Dames
Pour mieux comprendre, voici un schéma explicatif.

Fonction d’évaluation du nombre de dames (damier)
Pour tout le damier
Si l’IA a une dame
score += 250
Si l’humain a une dame
score -=300
Ceci permet d’éviter d’offrir la possibilité à l’humain d’avoir des dames, tout en valorisant
un plateau si l’IA a des dames

Fonction d’évaluation globale eval (damier)
La fonction d’évaluation globale regroupe l’évaluation des dames et des pions en un seul
score, qui est :
𝑒𝑣𝑎𝑙 = 𝑒𝑣𝑎𝑙𝑑𝑎𝑚𝑒𝑠 + 𝑒𝑣𝑎𝑙𝑝𝑖𝑜𝑛𝑠 + 𝑒𝑣𝑎𝑙𝑛𝑜𝑚𝑏𝑟𝑒𝑑𝑎𝑚𝑒𝑠
~ 16 ~
Rapport d’analyse -- Jeu de Dames
Planning previsionnel
~ 17 ~
Rapport d’analyse -- Jeu de Dames
Tests
Vu l’ensemble des fonctions du projet, il nous a été nécessaire de tester les fonctions à part,
afin de déceler les erreurs dans ces diverses fonctions.
Les tests effectués sont les suivants :





Fonction affichage : un damier initialisé et aléatoire
Fonction coup : sur un damier initialisé, sur un damier préparé à cet effet.
Fonction joue_rafle : en cours de partie (à deux joueurs) et sur un damier préparé à
cet effet.
Fonction minimax : en cours de tests (en cours de partie)
Fonction d’évaluation : damier de départ et damiers préparés à cet effet.
~ 18 ~
Rapport d’analyse -- Jeu de Dames
Difficultes rencontrees
Au cours de ce projet, nous avons rencontré différents points qui ont considérablement
ralenti notre projet :

Listes (structure de données pour enregistrer les coups)
Au début, nous avions envisagé un tableau pour sauver les coups possibles, mais du fait de
certaines rafles complexes (2 pions mangés ou plus), cela ne fonctionnait pas.
Ensuite nous avons développé une structure de données basée à la fois sur les listes et les
tableaux. La structure de donnée employée ne fonctionnait pas (problèmes de création de
maillons, de copies, etc …).
Nous avons dû alors repenser notre structure de donnée de sauvegarde de coups possibles
et de coups obligatoires.
Il s’agit maintenant d’un tableau de listes, où à chaque élément du tableau correspond une
liste qui elle-même correspond à une rafle.

Débogage
Cette étape a été longue, car d’une part le code de notre jeu est plutôt long et d’autre part à
cause de limitations du langage C (on est souvent tenté de faire de l’orienté objet). Malgré
cette difficulté, cela a été un défi pour nous à relever…

Activités extérieures (Vacances, partiels)
Il nous a été difficile de concilier les révisions pour les partiels du premier semestre et
l’avancement du projet.
De plus, en raison des vacances de Noël, il a été difficile de travailler (fêtes, repos, famille,
etc…)

Minimax
Le Minimax est assez complexe à comprendre, de par sa nature récursive et de la fonction
d’évaluation. Ces notions, difficilement acquises en cours, nous ont été réexpliquées par des
camarades et enfin comprises.

Cas d’égalité
Le cas d’égalité, tel qu’indiqué dans les règles, n’a pas pu être implémenté dans les temps.
Néanmoins, cette partie du jeu de dames n’est pas essentielle.

Dames : Il nous a fallu créer une nouvelle fonction de détection de coups basée sur
les dames et non sur les pions.
~ 19 ~
Rapport d’analyse -- Jeu de Dames
Bilan
Le projet a bien avancé, mais certaines parties nécessitent encore des approfondissements ou des
tests. Voici un récapitulatif des différentes boucles et de leurs états d’avancement.





Affichage : Terminée, testée et fonctionnelle
Recherche de coup : Terminée, testée et fonctionnelle. De plus, elle respecte les règles de la
FFJD.
Joue rafle : Terminée, testée et fonctionnelle. De plus, elle respecte les règles de la FFJD.
Minimax : Terminée, en cours de tests
Dames : Terminée, en cours de tests
~ 20 ~
Rapport d’analyse -- Jeu de Dames
Conclusion
Ce projet, basé sur le jeu de dames, est très intéressant car il permet d’appliquer à la fois nos
connaissances en C et en algorithmique. De plus, le jeu de dames étant un jeu assez
populaire, ce qui nous a facilité l’analyse du sujet.
Malgré tout, nous avons eu des difficultés dues aux règles du jeu et des structures de
données. Enfin, le joueur ordinateur et sa fonction d’évaluation ont été assez difficiles à
concevoir.
Ce projet a été énormément instructif sur le langage C, la recherche de structures de données
compatibles et efficaces et enfin sur le MiniMax, fonction que nous avons mal comprise en
cours et dont l’implémentation n’a pas été aisée, mais très intéressante.
~ 21 ~
Rapport d’analyse -- Jeu de Dames
References
Règles du jeu de dames :
-
Fédération Française de Jeu de Dames
http://www.ffjd.fr/Web/index.php
-
Wikipédia
http://fr.wikipedia.org/wiki/Dames
~ 22 ~

Documents pareils