Joueur IA Escampe (Puyaubreau/Russac) — version finale

Joueur alpha-bêta + iterative deepening pour le tournoi APP5 « IA et contraintes ».

- src/escampe/ : joueur (IJoueur), moteur (alpha-bêta + DFS bitmask, make/unmake
  sans allocation), modèle EscampeBoard (Partie1), utilitaires de test.
- Protocole arbitre vérifié (pass="E", carte des liserés identique au serveur,
  machine à états placement/jeu) ; 7/7 victoires vs joueur aléatoire, 0 illégal.
- Vérifications : VerifMoves (int≡String, 0 divergence/142k positions),
  RulesTest (21/21), Branching (facteur de branchement mesuré).
- Rapport : report/rapport.html + tools/make_report_pdf.py (PyMuPDF) → PDF, RAPPORT.md.
- Livrables buildés inclus (dist/ : jar, mainClass, tgz, rapport PDF) + lib/escampeobf.jar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 16:00:29 +02:00
commit e508efa14f
50 changed files with 6521 additions and 0 deletions

58
README.md Normal file
View File

@@ -0,0 +1,58 @@
# Escampe — Joueur IA (Puyaubreau / Russac)
Joueur artificiel pour le jeu **Escampe**, devoir « IA et contraintes »
(Polytech Paris-Saclay, APP5, 2025-2026). Le joueur dialogue avec l'arbitre du
tournoi via une interface réseau et choisit ses coups par recherche **alpha-bêta
+ approfondissement itératif**.
## Démarrage rapide
```bash
bash build.sh # compile, produit le jar, mainClass, l'archive et le rapport PDF
```
Tout est produit dans `dist/`. Pour jouer ou tester :
```bash
# Une partie arbitrée : notre IA contre le joueur aléatoire fourni
bash scripts/match.sh
# Sous Windows, en local (double-clic) :
jouer-vs-IA.bat # vous (humain) contre notre IA
jouer-vs-pote.bat # deux humains
```
Le serveur de jeu et les joueurs de référence sont dans `lib/escampeobf.jar`
(fourni avec le sujet). Voir [MULTIJOUEUR.md](MULTIJOUEUR.md) pour le jeu à distance.
## Structure
| Chemin | Rôle |
|--------|------|
| `src/escampe/` | Sources Java (paquetage `escampe`) |
| `src/escampe/JoueurPuyaubreauRussac.java` | Le joueur (interface `IJoueur`) |
| `src/escampe/Moteur.java` | Recherche alpha-bêta + heuristique |
| `src/escampe/EscampeBoard.java` | Modèle de jeu (interface `Partie1`) |
| `src/escampe/{VerifMoves,RulesTest,Bench,Branching}.java` | Utilitaires de test (hors jar de production) |
| `report/rapport.html` · `tools/make_report_pdf.py` | Source du rapport et générateur PDF |
| `RAPPORT.md` | Rapport (version Markdown) |
| `build.sh` | Build reproductible |
| `lib/escampeobf.jar` | Serveur d'arbitre + joueurs de référence (fournis) |
| `dist/` | Livrables buildés (jar, `mainClass`, archive, rapport PDF) |
## Livrables de la version finale (dans `dist/`)
- `Puyaubreau_Russac.jar` — jar exécutable (point d'entrée `escampe.ClientJeu`)
- `mainClass` — descripteur du tournoi (jar / clientClass / mainClass)
- `Puyaubreau_Russac.tgz` — archive de rendu (`src/` + `mainClass` + jar)
- `Puyaubreau_Russac_rapport.pdf` — rapport
## Tests
```bash
javac -d out src/escampe/*.java
java -cp out escampe.VerifMoves # chemin de recherche ≡ règles vérifiées (0 divergence)
java -cp out escampe.RulesTest # tests de règles (21/21)
java -cp out escampe.Bench 3000 8 # profondeur / vitesse du moteur
java -cp out escampe.Branching # facteur de branchement
```