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>
94 lines
3.5 KiB
Markdown
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
|
|
```
|