j'ai fait le rapport chef ! c'est vraiment pas mal, j'ai développé les partie nécessaires

This commit is contained in:
arussac
2026-05-30 16:38:30 +02:00
parent e508efa14f
commit cfc1ff0b72

View File

@@ -10,6 +10,23 @@ Joueur : `escampe.JoueurPuyaubreauRussac`
---
## Sommaire
1. [Présentation et règles](#1-présentation-et-règles)
2. [Analyse des caractéristiques du jeu (Q1Q7)](#2-analyse-des-caractéristiques-du-jeu-q1q7)
3. [Modélisation : la classe `EscampeBoard`](#3-modélisation--la-classe-escapeboard)
4. [Intégration au tournoi : protocole de l'arbitre](#4-intégration-au-tournoi--protocole-de-larbitre)
5. [Placement d'ouverture](#5-placement-douverture)
6. [Moteur de décision](#6-moteur-de-décision)
7. [Heuristique d'évaluation](#7-heuristique-dévaluation)
8. [Gestion du temps réel](#8-gestion-du-temps-réel)
9. [Performances et tests](#9-performances-et-tests)
10. [Compilation, exécution et livrables](#10-compilation-exécution-et-livrables)
11. [Sources et bibliographie](#11-sources-et-bibliographie)
12. [Conclusion et difficultés rencontrées](#12-conclusion-et-difficultés-rencontrées)
---
## 1. Présentation et règles
Escampe se joue sur un plateau de 36 cases (6×6). Chaque case porte un liseré
@@ -22,10 +39,9 @@ d'une case dont le liseré est *identique* à celui de la case d'arrivée du cou
adverse précédent. Le liseré de départ fixe le nombre de pas (1, 2 ou 3),
orthogonaux, sans traverser ni revisiter de case. On ne capture qu'en se posant,
au dernier pas, sur la licorne adverse (paladins imprenables). Sans coup possible,
on passe son tour.
on passe son tour. Toute la difficulté consiste donc à "coincer" son adversaire.
Déroulement : Noir place ses six pièces sur les deux lignes d'un bord ; Blanc sur
le bord opposé ; **Blanc joue le premier coup**.
Déroulement : Noir place ses six pièces sur les deux lignes d'un bord (spécifié dans l'énnoncé : haut ou bas) ; Blanc sur le bord opposé ; **Blanc joue le premier coup**.
---
@@ -84,10 +100,25 @@ Le branchement effectif modeste explique les profondeurs élevées atteintes par
l'alpha-bêta (§6).
### Q4 — Coups imparables
Pas d'« imparable » universel garanti dès le départ (la contrainte de liseré peut
toujours bloquer une menace). Mais des configurations créent un **zugzwang
partiel** (exemple figure 6 : C2 prend C1 dès que Noir est forcé d'imposer un
liseré double). Notre recherche les exploite quand ils sont à portée d'horizon.
Pas d'« imparable » universel garanti dès le départ : la contrainte de liseré peut
toujours bloquer une menace, car l'adversaire choisit sa case d'arrivée et donc le
liseré qu'il impose au tour suivant. En revanche, certaines configurations créent
un **zugzwang partiel** — l'adversaire est forcé d'imposer précisément le liseré
qui autorise la capture.
**Exemple concret (figure 6 de l'énoncé).** Noir vient de poser sa pièce en D4 (liseré double,
TILE\_MAP = 2). Blanc doit donc jouer depuis une case à liseré double. Il choisit
**F6E5** (F6 est à liseré double). Noir doit maintenant jouer depuis une case à
liseré simple (E5 = 1) : son seul coup raisonnable est **A1A2**. A2 est à liseré
triple (TILE\_MAP = 3). Blanc joue alors **C2×C1** : le paladin en C2 (liseré 3)
effectue les trois pas C2→D2→D1→C1 et capture la licorne noire. La séquence
F6E5 / A1A2 / C2×C1 est donc un « imparable local » : dès que Noir est forcé
d'atterrir en A2, la capture est inévitable.
Ce type de combinaison est inexploitable de façon générale depuis le début de la
partie (trop de degrés de liberté), mais notre alpha-bêta le détecte et le joue
dès qu'il est à portée d'horizon.
### Q5 — Critères pour l'heuristique
Cinq critères identifiés : distance à la licorne adverse, mobilité différentielle,
@@ -112,7 +143,7 @@ budget par coup dérivé du temps restant (§8).
## 3. Modélisation : la classe `EscampeBoard`
`EscampeBoard` (~860 lignes) implémente `Partie1` (`setFromFile`/`saveToFile`,
`EscampeBoard` implémente `Partie1` (`setFromFile`/`saveToFile`,
`isValidMove`, `possiblesMoves`, `play`, `gameOver`). Conventions de l'arbitre :
coup `"B1-D1"`, placement `"C6/A6/B5/D5/E6/F5"` (licorne en tête), pass `"E"`.
@@ -184,6 +215,8 @@ Bord bas A1/A2/B1/E1/F1/C2 Bord haut A6/A5/B6/C5/F5/E6
mobiles E1·F1·C2 = liserés 1·2·3 mobiles C5·F5·E6 = liserés 1·2·3
```
Nous n'utilisons pas de bibliothèque d'ouvertures de coups. La raison principale est que la contrainte de liseré rend l'arbre d'ouverture très sensible au placement adverse : une séquence pré-calculée contre un placement différent du nôtre perdrait toute pertinence dès le deuxième coup. De plus, le branchement moyen (~8,9) est suffisamment faible pour que l'alpha-bêta atteigne la profondeur 1215 dès les premiers coups, rendant une bibliothèque peu utile. Le placement fixe ci-dessus suffit à garantir une position solide et reproductible dès le début.
---
## 6. Moteur de décision