Files
escampe-ia/MULTIJOUEUR.md
Ethan Puyaubreau e508efa14f 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>
2026-05-30 16:00:29 +02:00

94 lines
3.5 KiB
Markdown

# Jouer à Escampe en multijoueur
Le jeu est **réseau** : un **serveur** (l'arbitre) + **deux clients** qui s'y
connectent. Chaque client charge soit un humain (`escampe.JoueurHumain`, en
console), soit une IA (`escampe.JoueurPuyaubreauRussac`, la nôtre, ou
`escampe.JoueurAleatoire`). Les clients peuvent être sur la **même machine** ou
sur **deux machines différentes** : seules des chaînes de caractères circulent.
Prérequis sur chaque machine : **Java** et le fichier **`escampeobf.jar`**
(le serveur + les joueurs de référence). Pour jouer contre notre IA, il faut
aussi **`Puyaubreau_Russac.jar`** (produit par `build.sh`, dans `dist/`).
---
## 1. Sur le même PC — le plus simple
Double-cliquez sur :
- **`jouer-vs-pote.bat`** → deux humains (3 fenêtres : serveur + 2 joueurs).
- **`jouer-vs-IA.bat`** → vous (humain) contre notre IA.
(Ou, à la main, dans 3 terminaux PowerShell :)
```powershell
java -cp escampeobf.jar escampe.ServeurJeu 1234 1
java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurHumain localhost 1234
java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurHumain localhost 1234
```
---
## 2. À distance, avec un pote (deux PC sur le même réseau / Wi-Fi)
**Vous (l'hôte)** lancez le serveur et trouvez votre adresse IP locale :
```powershell
java -cp escampeobf.jar escampe.ServeurJeu 1234 1
ipconfig # repérez « Adresse IPv4 », ex. 192.168.1.42
```
Puis lancez votre propre client (sur l'hôte, `localhost` suffit) :
```powershell
java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurHumain localhost 1234
```
**Votre pote**, sur son PC, se connecte à **votre IP** (remplacez `localhost`) :
```powershell
java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurHumain 192.168.1.42 1234
```
Notes :
- Le **pare-feu Windows** de l'hôte doit autoriser Java sur le port 1234 (une
fenêtre de demande apparaît au 1ᵉʳ lancement — cliquez « Autoriser »).
- Il faut être sur le **même réseau local** (même box/Wi-Fi).
- **Par Internet** (réseaux différents) : il faut une redirection de port sur la
box de l'hôte (port 1234 → IP de l'hôte) **ou** un VPN type Tailscale/Hamachi
(plus simple et sûr). Sinon le pote ne peut pas atteindre votre machine.
---
## 3. Comment on joue (client console `JoueurHumain`)
À votre tour, le client affiche le plateau et vous demande de taper :
- au **placement** : le bord `H`/`B` (Noir choisit ; Blanc est forcé au bord
opposé), puis la case de la **licorne**, puis les **5 paladins** (ex. `A1`,
`B2`, …) ;
- en **jeu** : la case de **départ** puis la case d'**arrivée** (ex. `C2`, `D2`).
Rappel des règles : la pièce doit partir d'une case du **même liseré** que la
case où l'adversaire vient d'arriver, et avance d'autant de cases que le liseré
(1, 2 ou 3), sans traverser ni revenir sur une case. On gagne en se posant sur
la **licorne** adverse. Si vous ne pouvez rien jouer, le tour est passé
automatiquement.
> Le serveur ouvre aussi une **fenêtre graphique** du plateau (attention : d'après
> l'énoncé, le tout dernier coup n'y est pas affiché). Le client humain en console
> reste un peu rustique, mais fonctionne.
---
## 4. Variantes utiles
```powershell
# Vous (humain) contre l'IA :
java -cp Puyaubreau_Russac.jar escampe.ClientJeu escampe.JoueurPuyaubreauRussac localhost 1234
java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurHumain localhost 1234
# Joueur aléatoire de référence (pour tester) :
java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurAleatoire localhost 1234
```