From e508efa14f442e59b5fcbd74e0a1e3d037135c13 Mon Sep 17 00:00:00 2001 From: Ethan Puyaubreau Date: Sat, 30 May 2026 16:00:29 +0200 Subject: [PATCH] =?UTF-8?q?Joueur=20IA=20Escampe=20(Puyaubreau/Russac)=20?= =?UTF-8?q?=E2=80=94=20version=20finale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- .gitignore | 17 + MULTIJOUEUR.md | 93 ++ Puyaubreau_Russac.pdf | Bin 0 -> 107914 bytes Puyaubreau_Russac.tgz | Bin 0 -> 8292 bytes RAPPORT.md | 331 +++++++ README.md | 58 ++ build.sh | 58 ++ dist/Puyaubreau_Russac.jar | Bin 0 -> 27456 bytes dist/Puyaubreau_Russac.tgz | Bin 0 -> 52138 bytes dist/Puyaubreau_Russac/Puyaubreau_Russac.jar | Bin 0 -> 27456 bytes dist/Puyaubreau_Russac/mainClass | 3 + .../Puyaubreau_Russac/src/escampe/Applet.java | 298 ++++++ dist/Puyaubreau_Russac/src/escampe/Bench.java | 30 + .../src/escampe/Branching.java | 58 ++ .../src/escampe/ClientJeu.java | 151 +++ .../src/escampe/EscampeBoard.java | 862 ++++++++++++++++++ .../src/escampe/IJoueur.java | 65 ++ .../src/escampe/JoueurPuyaubreauRussac.java | 117 +++ .../Puyaubreau_Russac/src/escampe/Moteur.java | 137 +++ .../src/escampe/Partie1.java | 45 + .../src/escampe/RulesTest.java | 143 +++ dist/Puyaubreau_Russac/src/escampe/Solo.java | 183 ++++ .../src/escampe/VerifMoves.java | 121 +++ dist/Puyaubreau_Russac_rapport.pdf | Bin 0 -> 691017 bytes dist/mainClass | 3 + escampe_save.txt | 12 + jouer-vs-IA.bat | 29 + jouer-vs-pote.bat | 26 + lib/escampeobf.jar | Bin 0 -> 22783 bytes main-polytech.pdf | Bin 0 -> 193925 bytes partie1.md | 9 + report/rapport.html | 447 +++++++++ scripts/bench_vs_random.sh | 41 + scripts/match.sh | 51 ++ src/EscampeBoard.java | 743 +++++++++++++++ src/Partie1.java | 43 + src/escampe/Applet.java | 298 ++++++ src/escampe/Bench.java | 30 + src/escampe/Branching.java | 58 ++ src/escampe/ClientJeu.java | 151 +++ src/escampe/EscampeBoard.java | 862 ++++++++++++++++++ src/escampe/IJoueur.java | 65 ++ src/escampe/JoueurPuyaubreauRussac.java | 117 +++ src/escampe/Moteur.java | 137 +++ src/escampe/Partie1.java | 45 + src/escampe/RulesTest.java | 143 +++ src/escampe/Solo.java | 183 ++++ src/escampe/VerifMoves.java | 121 +++ src/escampe_save.txt | 12 + tools/make_report_pdf.py | 125 +++ 50 files changed, 6521 insertions(+) create mode 100644 .gitignore create mode 100644 MULTIJOUEUR.md create mode 100644 Puyaubreau_Russac.pdf create mode 100644 Puyaubreau_Russac.tgz create mode 100644 RAPPORT.md create mode 100644 README.md create mode 100644 build.sh create mode 100644 dist/Puyaubreau_Russac.jar create mode 100644 dist/Puyaubreau_Russac.tgz create mode 100644 dist/Puyaubreau_Russac/Puyaubreau_Russac.jar create mode 100644 dist/Puyaubreau_Russac/mainClass create mode 100644 dist/Puyaubreau_Russac/src/escampe/Applet.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/Bench.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/Branching.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/ClientJeu.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/EscampeBoard.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/IJoueur.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/JoueurPuyaubreauRussac.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/Moteur.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/Partie1.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/RulesTest.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/Solo.java create mode 100644 dist/Puyaubreau_Russac/src/escampe/VerifMoves.java create mode 100644 dist/Puyaubreau_Russac_rapport.pdf create mode 100644 dist/mainClass create mode 100644 escampe_save.txt create mode 100644 jouer-vs-IA.bat create mode 100644 jouer-vs-pote.bat create mode 100644 lib/escampeobf.jar create mode 100644 main-polytech.pdf create mode 100644 partie1.md create mode 100644 report/rapport.html create mode 100644 scripts/bench_vs_random.sh create mode 100644 scripts/match.sh create mode 100644 src/EscampeBoard.java create mode 100644 src/Partie1.java create mode 100644 src/escampe/Applet.java create mode 100644 src/escampe/Bench.java create mode 100644 src/escampe/Branching.java create mode 100644 src/escampe/ClientJeu.java create mode 100644 src/escampe/EscampeBoard.java create mode 100644 src/escampe/IJoueur.java create mode 100644 src/escampe/JoueurPuyaubreauRussac.java create mode 100644 src/escampe/Moteur.java create mode 100644 src/escampe/Partie1.java create mode 100644 src/escampe/RulesTest.java create mode 100644 src/escampe/Solo.java create mode 100644 src/escampe/VerifMoves.java create mode 100644 src/escampe_save.txt create mode 100644 tools/make_report_pdf.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d84aa06 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# Artefacts de compilation (régénérables) +out/ +build/ +**/*.class + +# Logs de tests +scripts/logs/ + +# Brouillons / notes hors-sujet +tempo.md + +# OS / éditeurs +.DS_Store +Thumbs.db +*.swp + +# NB : dist/ est VOLONTAIREMENT versionné (livrables buildés demandés). diff --git a/MULTIJOUEUR.md b/MULTIJOUEUR.md new file mode 100644 index 0000000..b01272d --- /dev/null +++ b/MULTIJOUEUR.md @@ -0,0 +1,93 @@ +# 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 +``` diff --git a/Puyaubreau_Russac.pdf b/Puyaubreau_Russac.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2bbd9767bc8965f6bb1d5d5a8e13b6e75f26381a GIT binary patch literal 107914 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 literal 0 HcmV?d00001 diff --git a/RAPPORT.md b/RAPPORT.md new file mode 100644 index 0000000..ba159cf --- /dev/null +++ b/RAPPORT.md @@ -0,0 +1,331 @@ +# Escampe — Rapport (version finale) + +**Université Paris-Saclay — Polytech APP5 — Année 2025-2026 — « IA et contraintes »** +**Binôme : Ethan Puyaubreau & Antonin Russac — 30 mai 2026** +Joueur : `escampe.JoueurPuyaubreauRussac` + +> Ce fichier est le miroir Markdown du rapport. La version PDF mise en page +> (`dist/Puyaubreau_Russac_rapport.pdf`) est générée depuis `report/rapport.html` +> par `python tools/make_report_pdf.py` (PyMuPDF, sans dépendance externe). + +--- + +## 1. Présentation et règles + +Escampe se joue sur un plateau de 36 cases (6×6). Chaque case porte un liseré +*simple*, *double* ou *triple*. Chaque joueur dispose d'une **licorne** et de cinq +**paladins** (noirs ou blancs). Lignes numérotées de 1 à 6, colonnes de A à F. Le +but est de **prendre la licorne adverse**. + +Règle caractéristique — la **contrainte de liseré** : la pièce jouée doit partir +d'une case dont le liseré est *identique* à celui de la case d'arrivée du coup +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. + +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**. + +--- + +## 2. Analyse des caractéristiques du jeu (Q1–Q7) + +### Q1 — Modélisation d'un état +Plateau `int[6][6]` (`board[ligne][colonne]`, ligne 0 = ligne 1 en bas, colonne +0 = A). Chaque case : `EMPTY`, `WHITE_LICORNE`, `WHITE_PALADIN`, `BLACK_LICORNE`, +`BLACK_PALADIN`. État hors-plateau : `lastTileType` (liseré imposé, `-1` = libre), +`currentPlayer`, `blackPlaced`/`whitePlaced`, `blackRows` (bord de Noir). + +- **Avantages** : accès O(1), copie immédiate pour l'arbre de recherche, + sérialisation triviale, et surtout `make/unmake` sans allocation (clé de la + vitesse, §6). +- **Inconvénient** : la contrainte de liseré est un état séparé à maintenir + (encapsulé dans `play`). + +Carte des liserés `TILE_MAP` (figure 4, ligne 1 en bas) : + +``` + A B C D E F + 6 3 2 2 1 3 2 + 5 1 3 1 3 1 2 + 4 2 1 3 2 3 1 + 3 2 3 1 2 1 3 + 2 3 1 3 1 3 2 + 1 1 2 2 3 1 2 +``` + +> **Vérifié** : cette carte est identique, case pour case, à celle utilisée en +> interne par l'arbitre (extraite par réflexion de la classe de jeu du serveur), +> et cohérente avec l'exemple tactique de la figure 6. Point critique : une carte +> divergente aurait produit des coups jugés illégaux. + +### Q2 — Détection de fin de partie +Partie finie dès qu'une licorne disparaît (seul cas, pas de nul). Balayage O(1) +(`gameOver`) ; le moteur détecte la capture au moment où elle est jouée. + +### Q3 — Sources de difficulté et facteur de branchement +Difficultés : contrainte de liseré (mobilité variable), dépendance entre tours +(la case d'arrivée détermine les options adverses), asymétrie du plateau, risque +de blocage / pass forcé. + +**Facteur de branchement.** Borne théorique lâche estimée en partie 1 : ~120. La +mesure réelle (utilitaire `escampe.Branching`, 30 000 parties aléatoires) est bien +plus basse car la contrainte de liseré ne laisse jouables que les pièces du bon +liseré : + +| Situation | Branchement max observé | +|---|---| +| Coup contraint (un liseré imposé) | **45** | +| Coup libre (1er coup ou après pass) | **49** | +| Branchement moyen (toutes positions) | **≈ 8,9** | + +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. + +### Q5 — Critères pour l'heuristique +Cinq critères identifiés : distance à la licorne adverse, mobilité différentielle, +contrôle du liseré imposé, protection de sa licorne, avancée. Retenu en pratique +(§7) : proximité des paladins à la licorne adverse (attaque) et éloignement des +paladins adverses de notre licorne (défense) — le reste est largement pris en +charge par la recherche. + +### Q6 — Stratégie selon la phase +- **Début (placement)** : irréversible ; protéger la licorne, garantir de toujours + pouvoir jouer (§5). +- **Milieu** : manœuvrer pour menacer la licorne adverse en contrôlant le liseré + imposé ; chercher le zugzwang partiel. +- **Fin** : dès qu'une capture est à portée, le calcul tactique prime. + +### Q7 — Majorant du nombre de coups et gestion du temps +Aucune pièce ne disparaît avant la capture finale : borne raisonnable ~400–600 +demi-coups. Pour tenir les 300 s/joueur : approfondissement itératif, alpha-bêta, +budget par coup dérivé du temps restant (§8). + +--- + +## 3. Modélisation : la classe `EscampeBoard` + +`EscampeBoard` (~860 lignes) 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"`. + +**Format fichier** : 6 lignes de plateau (bas→haut), `N/n` `B/b` `-`, encadrées +d'un numéro ; lignes `%` = commentaires (où l'on stocke l'état hors-plateau pour +un rechargement fidèle). + +**Génération des coups** : DFS avec retour arrière (exactement N pas, intermédiaires +vides, dernière case vide ou licorne adverse). `possiblesMoves` filtre le bon +liseré et renvoie `["E"]` si bloqué. Une méthode `main` illustre placements, +liseré, pass, round-trip fichier, capture. + +> Bug latent corrigé en partie 3 : un placement légal sur une seule ligne faisait +> planter le calcul du bord de Noir (supposait deux lignes). Le bord est désormais +> déduit de la ligne de la licorne. + +--- + +## 4. Intégration au tournoi : protocole de l'arbitre + +`JoueurPuyaubreauRussac implements IJoueur` enveloppe un `EscampeBoard` tenu à jour +à chaque coup (le nôtre via `play`, l'adverse via `mouvementEnnemi`). Trois +adaptations, dont deux **vérifiées par analyse du jar obfusqué** : + +- **Couleurs** : `IJoueur` en entiers (`NOIR=1`, `BLANC=-1`), `EscampeBoard` en + `"noir"`/`"blanc"`. +- **Pass = `"E"`, pas `"PASSE"`** : le Javadoc d'`IJoueur` dit `"PASSE"`, mais la + classe serveur teste `move.equals("E")` (et `"PASSE"` est absent du jar). + Envoyer `"PASSE"` = défaite sur coup illégal. +- **Carte des liserés** identique au serveur (cf. Q1). + +**Machine à états** : placement et coups passent par le même canal. Premier +`choixMouvement` = placement, suivants = coups ; phase détectée via +`blackPlaced`/`whitePlaced`. Séquence (déduite de `Solo`) : + +``` +Noir : choixMouvement(placement) -> mvtEnnemi(placement Blanc) + -> mvtEnnemi(1er coup Blanc) -> choixMouvement(coup) -> ... +Blanc : mvtEnnemi(placement Noir) -> choixMouvement(placement) + -> choixMouvement(1er coup, Blanc rejoue) -> mvtEnnemi(coup Noir) -> ... +``` + +**Exécution** (3 processus) : +``` +java -cp escampeobf.jar escampe.ServeurJeu 1234 1 +java -cp Puyaubreau_Russac.jar escampe.ClientJeu escampe.JoueurPuyaubreauRussac localhost 1234 +java -cp escampeobf.jar escampe.ClientJeu escampe.JoueurAleatoire localhost 1234 +``` + +--- + +## 5. Placement d'ouverture + +Constat issu de l'auto-jeu : une licorne mal placée peut se retrouver seule pièce +jouable et bloquée sur le liseré imposé → passes successifs → perte d'initiative. +Trois principes : + +1. **Licorne dans un coin** — un coin n'a que 2 voisines, donc 2 cases d'attaque. +2. **Murs** — on occupe ces 2 voisines par des paladins : licorne incapturable + tant que les murs tiennent. +3. **Couverture des liserés** — les 3 paladins restants sur des liserés 1, 2 et 3 + distincts : jamais de pass forcé, jamais besoin de bouger un mur ou la licorne. + +Dispositions retenues (Blanc joue le bord complémentaire de Noir) : + +``` +Bord bas A1/A2/B1/E1/F1/C2 Bord haut A6/A5/B6/C5/F5/E6 + licorne A1, murs A2/B1, licorne A6, murs A5/B6, + mobiles E1·F1·C2 = liserés 1·2·3 mobiles C5·F5·E6 = liserés 1·2·3 +``` + +--- + +## 6. Moteur de décision + +Negamax + élagage alpha-bêta + approfondissement itératif (`Moteur`), sur une +**copie** du plateau. Capture de licorne = nœud terminal `WIN - ply` (gagner vite). + +**Astuces de performance :** +- **Coups en entier** (case = `ligne*6+colonne`, coup = `départ*36+arrivée`) : pas + de chaîne dans la boucle chaude. +- **DFS sur masque de bits `long`** (36 cases ⊂ 64 bits) : ensembles visité/ + atteignable en masques, sans allocation par appel. +- **`make`/`unmake` sans allocation** : un petit jeton d'annulation → millions de + nœuds sans pression GC. +- **Buffers de coups pré-alloués**, un par profondeur. +- **Ordonnancement** : capture de licorne essayée en premier ; meilleur coup + d'une itération replacé en tête de la suivante. + +> Cohérence : le chemin « entier » du moteur double le chemin « chaîne » vérifié. +> `VerifMoves` (§9) prouve qu'ils produisent les mêmes coups et états — optimiser +> n'a pas changé les règles. + +**Performance mesurée** : ~4–5 M nœuds/s ; profondeur 12–15 demi-coups en 6 s +(plus dans les positions étroites). Les gains forcés annoncés se concrétisent par +une capture. + +--- + +## 7. Heuristique d'évaluation + +Matériel constant → évaluation purement positionnelle, du point de vue du joueur +au trait, à partir des distances de Manhattan : + +- **Attaque** : proximité de nos paladins à la licorne adverse — terme *somme* + (pression globale) + terme *minimum* (l'attaquant le plus proche pèse plus) ; +- **Défense** : éloignement des paladins adverses de notre licorne — mêmes termes, + signe opposé. + +Avec les poids retenus (somme = 2, minimum = 8) : +``` +eval = 2·Σ(10−d_attaque) − 2·Σ(10−d_défense) + + 8·(10−min d_attaque) − 8·(10−min d_défense) +``` + +**Heuristiques testées et choix** (réglage par auto-jeu déterministe + matchs vs +aléatoire) : (a) somme seule → jeu trop diffus ; (b) **somme + minimum (retenue)** +→ le terme minimum fortement pondéré oriente les paladins vers la licorne adverse +et améliore le taux de capture ; (c) terme défensif symétrique conservé (évite +d'exposer notre licorne). Le fort poids du minimum reflète que c'est l'attaquant +le plus avancé qui décide d'une prise. + +> Limite assumée : poids validés contre l'aléatoire et en auto-jeu, faute +> d'adversaires IA tiers. Les tactiques à court terme sont gérées par la recherche, +> ce qui rend le joueur robuste malgré une évaluation simple. + +--- + +## 8. Gestion du temps réel + +Limite arbitre 300 s/joueur/partie → **enveloppe interne 280 s** (~20 s de marge). +Budget par coup : +``` +tranche = clamp( temps_restant / 12 , 120 ms , 6000 ms ) +``` +La division par le temps restant décroît géométriquement : budget **jamais +épuisable**. Plafond 6 s (pas de surinvestissement en ouverture), plancher 120 ms, +mode « panique » pour les dernières secondes. L'approfondissement itératif rend le +meilleur coup déjà trouvé dès l'expiration de la tranche (temps contrôlé toutes les +2048 explorations de nœuds). + +**Mesures** (auto-jeu équilibré, plein budget) : max ≈ 6,0 s/coup (le plafond), +cumul max ≈ 36 s/joueur sur une partie complète — très loin des 300 s. Réglage +conservateur, augmentable sans risque. + +--- + +## 9. Performances et tests + +| Test | Garantit | Résultat | +|---|---|---| +| `VerifMoves` | chemin entier ≡ chemin chaîne (coups + make/unmake) | 3 000 parties · 142 165 positions · 1 281 985 contrôles · **0 divergence** | +| `RulesTest` | règles directes (pas/liseré, capture, imprenabilité, non-traversée, pass, fin, placement) | **21 / 21** | +| Matchs arbitrés vs `JoueurAleatoire` | protocole de bout en bout, légalité | **7 / 7 victoires**, 0 illégal, 0 exception (2 couleurs) | +| Démo IA vs IA (serveur réel) | partie complète moteur vs moteur, pass | 21 coups, fin propre par capture | +| `Bench` / `Branching` | vitesse, profondeur, branchement | ~4–5 M nœuds/s ; prof. 12–15 ; branchement max 49 / moyen ≈ 8,9 | + +Séparation des rôles : `VerifMoves` (moteur ≡ `EscampeBoard`), `RulesTest` +(`EscampeBoard` ≡ règles), parties arbitrées (dialogue correct avec l'arbitre +réel). Aucun coup illégal sur l'ensemble des parties jouées. + +--- + +## 10. Compilation, exécution et livrables + +`build.sh` produit dans `dist/` les trois livrables de la version finale : + +``` +Puyaubreau_Russac.jar jar exécutable (Main-Class : escampe.ClientJeu) +mainClass jar:Puyaubreau_Russac.jar + clientClass:escampe.ClientJeu + mainClass:escampe.JoueurPuyaubreauRussac +Puyaubreau_Russac.tgz archive : Puyaubreau_Russac/ { src/escampe/*.java, mainClass, jar } +``` + +Seules les classes de production entrent dans le jar ; les utilitaires de test +(`VerifMoves`, `RulesTest`, `Bench`, `Branching`) en sont exclus. Le multijoueur +(humain vs humain, humain vs IA, local ou distant) est documenté dans +`MULTIJOUEUR.md`. + +--- + +## 11. Sources et bibliographie + +- **Énoncé du cours** (Université Paris-Saclay, Polytech APP5, 2025-2026) : règles, + carte des liserés (figure 4), interface `Partie1`, classes fournies (`IJoueur`, + `ClientJeu`, `Solo`, `Applet`, serveur). +- **Algorithmes classiques**, pour inspiration sans copie de code : alpha-bêta + (Knuth & Moore, 1975) ; minimax/negamax/approfondissement itératif (Russell & + Norvig, *AIMA*) ; masques de bits et ordonnancement de coups (*Chess Programming + Wiki*). +- **Déclaration** : aucun programme d'Escampe externe recopié. La seule + rétro-ingénierie porte sur le jar d'arbitre *fourni avec le sujet*, pour confirmer + le protocole (pass `"E"`) et la carte des liserés (documentation ambiguë). + +--- + +## 12. Conclusion et difficultés rencontrées + +Le joueur conduit une partie de façon autonome, dialogue correctement avec +l'arbitre, ne produit jamais de coup illégal et respecte très confortablement la +contrainte de temps. Difficultés principales : + +- **Obfuscation du serveur** : lever l'ambiguïté du pass (`"E"` vs `"PASSE"`) et + confirmer la carte des liserés a nécessité l'analyse du jar — décisif pour ne pas + perdre sur coup illégal. +- **Interface obfusquée vs nos sources** : le joueur aléatoire du jar n'implémente + pas notre `IJoueur` ; les tests contre lui passent par le réseau. +- **Avantage du trait** : en miroir, Blanc garde l'initiative via la contrainte de + liseré — propriété du jeu. +- **Réglage de l'heuristique sans adversaires** : validé contre l'aléatoire et en + auto-jeu. + +**Pistes d'amélioration** : table de transposition (Zobrist), bibliothèque +d'ouvertures de placement, terme de mobilité différentielle, recherche de +quiescence sur les menaces de capture. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8ad5b7c --- /dev/null +++ b/README.md @@ -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 +``` diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..9de5a99 --- /dev/null +++ b/build.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Build reproductible du joueur Escampe (partie 3). +# Produit dans dist/ : +# - Puyaubreau_Russac.jar : jar exécutable (point d'entrée escampe.ClientJeu) +# - mainClass : descripteur attendu par le tournoi +# - Puyaubreau_Russac.tgz : archive de rendu (Puyaubreau_Russac/src + mainClass + jar) +# - Puyaubreau_Russac_rapport.pdf : rapport (via PyMuPDF ; sauter avec --no-report) +set -e +ROOT="$(cd "$(dirname "$0")" && pwd)"; cd "$ROOT" +WITH_REPORT=1; [ "${1:-}" = "--no-report" ] && WITH_REPORT=0 + +NAME="Puyaubreau_Russac" +JAR="$NAME.jar" +PLAYER="escampe.JoueurPuyaubreauRussac" +CLIENT="escampe.ClientJeu" + +# Classes de PRODUCTION (on exclut les utilitaires de test : VerifMoves, RulesTest, Bench). +RUNTIME="IJoueur ClientJeu Solo Applet Partie1 EscampeBoard Moteur JoueurPuyaubreauRussac" + +echo "[1/4] Compilation des classes de production…" +rm -rf build dist +mkdir -p build dist +SRCS="" +for c in $RUNTIME; do SRCS="$SRCS src/escampe/$c.java"; done +javac -d build $SRCS + +echo "[2/4] Création du jar exécutable ($JAR)…" +jar --create --file "dist/$JAR" --main-class "$CLIENT" -C build escampe + +echo "[3/4] Écriture du fichier mainClass…" +printf 'jar:%s\nclientClass:%s\nmainClass:%s\n' "$JAR" "$CLIENT" "$PLAYER" > dist/mainClass + +echo "[4/4] Assemblage de l'archive de rendu…" +rm -rf "dist/$NAME" +mkdir -p "dist/$NAME/src/escampe" +cp src/escampe/*.java "dist/$NAME/src/escampe/" +cp dist/mainClass "dist/$NAME/mainClass" +cp "dist/$JAR" "dist/$NAME/$JAR" +( cd dist && tar czf "$NAME.tgz" "$NAME" ) + +REPORT="" +if [ "$WITH_REPORT" = "1" ]; then + echo "[5/5] Génération du rapport PDF…" + if python tools/make_report_pdf.py >/dev/null 2>&1; then + REPORT=" dist/${NAME}_rapport.pdf" + else + echo " (PDF non généré : PyMuPDF indisponible — relancer 'python tools/make_report_pdf.py')" + fi +fi + +echo "----------------------------------------------------" +echo "OK :" +echo " dist/$JAR" +echo " dist/mainClass" +echo " dist/$NAME.tgz" +[ -n "$REPORT" ] && echo "$REPORT" +echo "Lancement tournoi (rappel) :" +echo " java -cp $JAR $CLIENT $PLAYER " diff --git a/dist/Puyaubreau_Russac.jar b/dist/Puyaubreau_Russac.jar new file mode 100644 index 0000000000000000000000000000000000000000..ecce87266a6324ddc46a0ecaf76c8cc06b7e0121 GIT binary patch literal 27456 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 ISo}Krf0WB&sI0#N&=@ER0wK|dp){T3q_;< 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 ISo}Krf0WB 0) + displayBoard = (Board) listModel.getElementAt(index - 1); + + if (e.getKeyCode() == KeyEvent.VK_DOWN && index < (listModel.getSize() - 1)) + displayBoard = (Board) listModel.getElementAt(index + 1); + + update(myFrame.getGraphics(), myFrame.getInsets()); + } + + void brdList_mouseClicked(MouseEvent e) { + displayBoard = (Board) listModel.getElementAt(brdList.getSelectedIndex()); + update(myFrame.getGraphics(), myFrame.getInsets()); + } + + public Dimension getDimension() { + return FRAMEDIMENSION; + } + + // Sous classe qui dessine le plateau de jeu + class Board extends JPanel { + + private static final long serialVersionUID = 1L; + private int[][] boardState; + String move; + int depCol = -1; + int depLin = -1; + int arvCol = -1; + int arvLin = -1; + + // The string will be the move details + // and the array the details of the board after the move has been applied. + public Board(String mv, int[][] bs) { + boardState = bs; + move = mv; + if (mv.length() == 5) { + String[] positions = mv.split("-"); + depCol = (int) positions[0].charAt(0) - (int) 'A'; + depLin = Integer.parseInt(positions[0].substring(1)) - 1; + arvCol = (int) positions[1].charAt(0) - (int) 'A'; + arvLin = Integer.parseInt(positions[1].substring(1)) - 1; + } + } + + public void drawBoard(Graphics g) { + // First draw the lines + // Board + int bx = 30; + int by = 30; + + // axis labels + g.setColor(new Color(0, 0, 0)); + for (int i = 1; i <= LARGEUR; i++) { + g.drawString("" + (char) ('A' + i - 1), bx + (int) ((i - 0.5)*TAILLECASE), 20); + } + for (int i = 1; i <= HAUTEUR; i++) { + g.drawString("" + i, 10, by + (int) ((i - 0.5)*TAILLECASE)); + } + + // Draw the circles + Color c1 = DARK; + Color c2 = LIGHT; + + int casex; + int casey; + int lisere; + + // fond des cases + g.setColor(c1); + g.fillRect(bx, by, LARGEUR*TAILLECASE, HAUTEUR*TAILLECASE); + + for (int j = 0; j < LARGEUR; j++) { + for (int i = 0; i < HAUTEUR; i++) { + casex = bx + j*TAILLECASE; + casey = by + i*TAILLECASE; + lisere = lisereCase[i][j]; + c2 = (i == depLin && j == depCol) ? HIGHLIGHT : LIGHT; + + // 1er cercle + g.setColor(c2); + g.fillOval(casex + m1e, casey + m1e , diametre1e, diametre1e); + g.setColor(c1); + g.fillOval(casex + m1i, casey + m1i, diametre1i, diametre1i); + if (lisere > 1) { + // 2eme cercle + g.setColor(c2); + g.fillOval(casex + m2e, casey + m2e, diametre2e, diametre2e); + g.setColor(c1); + g.fillOval(casex + m2i, casey + m2i, diametre2i, diametre2i); + if (lisere > 2) { + // 3eme cercle + g.setColor(c2); + g.fillOval(casex + m3e, casey + m3e, diametre3e, diametre3e); + g.setColor(c1); + g.fillOval(casex + m3i, casey + m3i, diametre3i, diametre3i); + } + } + } + } + + // Draw the pieces by referencing boardState array + c1 = BLACK; + c2 = WHITE; + + for (int j = 0; j < LARGEUR; j++) { + for (int i = 0; i < HAUTEUR; i++) { + casex = mpiece + bx + j*TAILLECASE; + casey = mpiece + by + i*TAILLECASE; + + switch (boardState[i][j]) { + case (LICORNEBLANCHE): + g.setColor(c1); + g.fillRect(casex, casey, TAILLEPION, TAILLEPION); + break; + case (PALADINBLANC): + g.setColor(c1); + g.fillOval(casex, casey, TAILLEPION, TAILLEPION); + break; + case (LICORNENOIRE): + g.setColor(c2); + g.fillRect(casex, casey, TAILLEPION, TAILLEPION); + break; + case (PALADINNOIR): + g.setColor(c2); + g.fillOval(casex, casey, TAILLEPION, TAILLEPION); + break; + } + + if (i == arvLin && j == arvCol) { + g.setColor(HIGHLIGHT); + g.fillOval(casex + 20, casey + 20, TAILLEPION - 40, TAILLEPION - 40); + } + } + } + } + + public void paint(Graphics g) { + drawBoard(g); + } + + public void update(Graphics g) { + drawBoard(g); + } + + public String toString() { + return move; + } + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/Bench.java b/dist/Puyaubreau_Russac/src/escampe/Bench.java new file mode 100644 index 0000000..c18fa58 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/Bench.java @@ -0,0 +1,30 @@ +package escampe; + +/** + * Banc d'essai du moteur : joue quelques coups depuis l'ouverture et affiche + * profondeur, score, nœuds et vitesse. java -cp out escampe.Bench [msParCoup] [nbCoups] + */ +public class Bench { + public static void main(String[] args) { + long budget = args.length > 0 ? Long.parseLong(args[0]) : 3000; + int coups = args.length > 1 ? Integer.parseInt(args[1]) : 8; + + EscampeBoard b = new EscampeBoard(); + b.play("C1/A1/E1/B2/C2/D2", "noir"); + b.play("C6/A6/E6/B5/C5/D5", "blanc"); + + Moteur mo = new Moteur(); + boolean black = false; // Blanc joue en premier après les placements + for (int i = 0; i < coups && !b.gameOver(); i++) { + long t0 = System.currentTimeMillis(); + int m = mo.bestMove(b, black, budget); + long dt = System.currentTimeMillis() - t0; + System.out.printf("coup %d (%s) : %-6s prof=%2d score=%7d noeuds=%9d %5dms %6.0f kN/s%n", + i, black ? "noir" : "blanc", b.moveToString(m), + mo.reachedDepth, mo.lastScore, mo.nodes, dt, mo.nodes / (dt + 1.0)); + b.play(b.moveToString(m), black ? "noir" : "blanc"); + black = !black; + } + System.out.println(b.gameOver() ? "Partie terminée (capture)." : "Fin du banc."); + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/Branching.java b/dist/Puyaubreau_Russac/src/escampe/Branching.java new file mode 100644 index 0000000..8e95811 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/Branching.java @@ -0,0 +1,58 @@ +package escampe; + +import java.util.*; + +/** + * Mesure empirique du facteur de branchement (question Q3 du rapport) : explore + * des parties aléatoires et relève le nombre maximal de coups légaux rencontré, + * en distinguant le cas contraint (un liseré imposé) du cas libre (1er coup ou + * après un pass, lastTileType = -1). java -cp out escampe.Branching [parties] + */ +public class Branching { + public static void main(String[] args) { + int games = args.length > 0 ? Integer.parseInt(args[0]) : 20000; + Random rng = new Random(1L); + + int maxConstrained = 0, maxFree = 0; + long sum = 0, count = 0; + + for (int g = 0; g < games; g++) { + EscampeBoard b = new EscampeBoard(); + int[] nr = rng.nextBoolean() ? new int[]{0, 1} : new int[]{4, 5}; + b.play(rndPlace(b, "noir", nr, rng), "noir"); + int[] wr = nr[0] == 0 ? new int[]{4, 5} : new int[]{0, 1}; + b.play(rndPlace(b, "blanc", wr, rng), "blanc"); + + for (int ply = 0; ply < 120 && !b.gameOver(); ply++) { + String side = b.currentPlayer; + String[] mv = b.possiblesMoves(side); + int n = (mv.length == 1 && mv[0].equals("E")) ? 0 : mv.length; + if (b.lastTileType == -1) maxFree = Math.max(maxFree, n); + else maxConstrained = Math.max(maxConstrained, n); + sum += n; count++; + + if (n == 0) { b.play("E", side); } + else { b.play(mv[rng.nextInt(mv.length)], side); } + } + } + System.out.println("Parties simulées : " + games); + System.out.println("Branchement max CONTRAINT : " + maxConstrained + " (un liseré imposé)"); + System.out.println("Branchement max LIBRE : " + maxFree + " (1er coup / après pass)"); + System.out.printf ("Branchement moyen : %.1f%n", (double) sum / count); + } + + static String rndPlace(EscampeBoard b, String pl, int[] rows, Random rng) { + List cells = new ArrayList<>(); + for (int r : rows) for (int c = 0; c < 6; c++) cells.add(new int[]{r, c}); + for (int t = 0; t < 50; t++) { + Collections.shuffle(cells, rng); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 6; i++) { + if (i > 0) sb.append('/'); + sb.append((char) ('A' + cells.get(i)[1])).append((char) ('1' + cells.get(i)[0])); + } + if (b.isValidMove(sb.toString(), pl)) return sb.toString(); + } + throw new IllegalStateException("placement"); + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/ClientJeu.java b/dist/Puyaubreau_Russac/src/escampe/ClientJeu.java new file mode 100644 index 0000000..2c9f4c7 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/ClientJeu.java @@ -0,0 +1,151 @@ +package escampe; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.StringTokenizer; + +/** + * Cette classe permet de charger dynamiquement une classe de joueur, qui doit obligatoirement + * implanter l'interface IJoueur. Vous lui donnez aussi en argument le nom de la machine distante + * (ou "localhost") sur laquelle le serveur de jeu est lancé, ainsi que le port sur lequel la + * machine écoute. + * + * Exemple: >java -cp . frontieres.ClientJeu frontieres.joueurProf localhost 1234 + * + * Le client s'occupe alors de tout en lançant les méthodes implantées de l'interface IJoueur. Toute + * la gestion réseau est donc cachée. + * + * @author L. Simon (Univ. Paris-Sud)- 2006-2008 + * @see IJoueur + */ +public class ClientJeu { + + // Mais pas lors de la conversation avec l'arbitre + // Vous pouvez changer cela en interne si vous le souhaitez + static final int BLANC = -1; + static final int NOIR = 1; + static final int VIDE = 0; + + /** + * @param args + * Dans l'ordre : NomClasseJoueur MachineServeur PortEcoute + */ + public static void main(String[] args) { + + if (args.length < 3) { + System.err.println("ClientJeu Usage: NomClasseJoueur MachineServeur PortEcoute"); + System.exit(1); + } + + // Le nom de la classe joueur à charger dynamiquement + String classeJoueur = args[0]; + // Le nom de la machine serveur a été donné en ligne de commande + String serverMachine = args[1]; + // Le numéro du port sur lequel on se connecte a aussi été donné + int portNum = Integer.parseInt(args[2]); + + System.out.println("Le client se connectera sur " + serverMachine + ":" + portNum); + + Socket clientSocket = null; + IJoueur joueur; + String msg, firstToken; + // permet d'analyser les chaînes de caractères lues + StringTokenizer msgTokenizer; + // C'est la couleur qui doit jouer le prochain coup + int couleurAJouer; + // C'est ma couleur (quand je joue) + int maCouleur; + + boolean jeuTermine = false; + + try { + // initialise la socket + clientSocket = new Socket(serverMachine, portNum); + PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); + BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + + // ***************************************************** + System.out.print("Chargement de la classe joueur " + classeJoueur + "... "); + Class cjoueur = Class.forName(classeJoueur); + joueur = (IJoueur) cjoueur.newInstance(); + System.out.println("Ok"); + // **************************************************** + + // Envoie de l'identifiant de votre quadrinome. + out.println(joueur.binoName()); + System.out.println("Mon nom de quadrinome envoyé est " + joueur.binoName()); + + // Récupère le message sous forme de chaine de caractères + msg = in.readLine(); + System.out.println(msg); + + // Lit le contenu du message, toutes les infos du message + msgTokenizer = new StringTokenizer(msg, " \n\0"); + if ((msgTokenizer.nextToken()).equals("Blanc")) { + System.out.println("Je suis Blanc, j'attends le mouvement de Noir."); + maCouleur = BLANC; + } + else { // doit etre égal à "Noir" + System.out.println("Je suis Noir, c'est à moi de jouer."); + maCouleur = NOIR; + } + + // permet d'initialiser votre joueur avec sa couleur + joueur.initJoueur(maCouleur); + + // boucle générale de jeu + do { + // Lire le msg à partir du serveur + msg = in.readLine(); + + msgTokenizer = new StringTokenizer(msg, " \n\0"); + firstToken = msgTokenizer.nextToken(); + + if (firstToken.equals("FIN!")) { + jeuTermine = true; + String theWinnerIs = msgTokenizer.nextToken(); + + if (theWinnerIs.equals("Blanc")) { + couleurAJouer = BLANC; + } + else { + if (theWinnerIs.equals("Noir")) + couleurAJouer = NOIR; + else + couleurAJouer = VIDE; + } + + if (couleurAJouer == maCouleur) + System.out.println("J'ai gagné!"); + + joueur.declareLeVainqueur(couleurAJouer); + } + else if (firstToken.equals("JOUEUR")) { + // On demande au joueur de jouer + if ((msgTokenizer.nextToken()).equals("Blanc")) { + couleurAJouer = BLANC; + } + else { + couleurAJouer = NOIR; + } + + if (couleurAJouer == maCouleur) { + // On appelle la classe du joueur pour choisir un mouvement + msg = joueur.choixMouvement(); + out.println(msg); + } + } + else if (firstToken.equals("MOUVEMENT")) { + // On lit ce que joue le joueur et on l'envoie à l'autre + joueur.mouvementEnnemi(msgTokenizer.nextToken()); + } + } while (!jeuTermine); + + } + catch (Exception e) { + System.out.println(e); + } + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/EscampeBoard.java b/dist/Puyaubreau_Russac/src/escampe/EscampeBoard.java new file mode 100644 index 0000000..b6b807d --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/EscampeBoard.java @@ -0,0 +1,862 @@ +package escampe; + +import java.io.*; +import java.util.*; + +/** + * Représentation d'un état du jeu Escampe. + * + *

Le plateau est un tableau {@code int[6][6]} : + *

    + *
  • {@code board[row][col]} avec row 0 = ligne 1 (bas), row 5 = ligne 6 (haut).
  • + *
  • col 0 = colonne A, col 5 = colonne F.
  • + *
+ * + *

Chaque case stocke l'une des constantes pièce : + * {@code EMPTY}, {@code WHITE_LICORNE}, {@code WHITE_PALADIN}, + * {@code BLACK_LICORNE}, {@code BLACK_PALADIN}. + * + *

L'état complémentaire mémorisé : + *

    + *
  • {@code lastTileType} : type de liseré (1, 2 ou 3) de la case d'arrivée du dernier coup ; + * -1 = pas de contrainte (premier coup ou après un pass).
  • + *
  • {@code currentPlayer} : "noir" ou "blanc", joueur dont c'est le tour.
  • + *
  • {@code blackPlaced}, {@code whitePlaced} : phases de placement terminées.
  • + *
  • {@code blackRows} : les deux lignes (index 0-5) choisies par noir lors du placement.
  • + *
+ * + *

Règles de déplacement : + *

    + *
  • Une pièce avance exactement N pas orthogonaux (N = liseré de la case de départ).
  • + *
  • Elle peut changer de direction à chaque pas.
  • + *
  • Elle ne peut pas passer par une case occupée ni repasser deux fois par la même case.
  • + *
  • Au dernier pas uniquement, elle peut se poser sur la licorne adverse (capture).
  • + *
+ */ +public class EscampeBoard implements Partie1 { + + // ── Constantes pièces ──────────────────────────────────────────────────── + + static final int EMPTY = 0; + static final int WHITE_LICORNE = 1; + static final int WHITE_PALADIN = 2; + static final int BLACK_LICORNE = 3; + static final int BLACK_PALADIN = 4; + + /** + * Carte des liserés : {@code TILE_MAP[row][col]}. + * row 0 = ligne 1 (bas), row 5 = ligne 6 (haut). col 0 = A, col 5 = F. + */ + static final int[][] TILE_MAP = { + {1, 2, 2, 3, 1, 2}, // ligne 1 + {3, 1, 3, 1, 3, 2}, // ligne 2 + {2, 3, 1, 2, 1, 3}, // ligne 3 + {2, 1, 3, 2, 3, 1}, // ligne 4 + {1, 3, 1, 3, 1, 2}, // ligne 5 + {3, 2, 2, 1, 3, 2}, // ligne 6 + }; + + // ── État ───────────────────────────────────────────────────────────────── + + int[][] board; + int lastTileType; // -1 = pas de contrainte + String currentPlayer; // "noir" ou "blanc" + boolean blackPlaced; + boolean whitePlaced; + int[] blackRows; // les 2 lignes (0-indexé) choisies par noir + + // ── Constructeur ───────────────────────────────────────────────────────── + + public EscampeBoard() { + board = new int[6][6]; + lastTileType = -1; + currentPlayer = "noir"; + blackPlaced = false; + whitePlaced = false; + blackRows = null; + } + + // ========================================================================= + // Fichier I/O + // ========================================================================= + + @Override + public void setFromFile(String fileName) { + board = new int[6][6]; + lastTileType = -1; + currentPlayer = "noir"; + blackPlaced = false; + whitePlaced = false; + blackRows = null; + + try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { + String line; + while ((line = br.readLine()) != null) { + line = line.trim(); + if (line.isEmpty()) continue; + + char first = line.charAt(0); + + // Commentaire / méta-donnée + if (first == '%') { + parseMeta(line); + continue; + } + + // Ligne de plateau : "1 XXXX 1" ou "01 XXXX 01" + int rowNum = -1; + int pos = 0; + if (first >= '1' && first <= '6') { + rowNum = first - '0'; + pos = 1; + } else if (first == '0' && line.length() > 1) { + char second = line.charAt(1); + if (second >= '1' && second <= '6') { + rowNum = second - '0'; + pos = 2; + } + } + if (rowNum != -1) { + int rowIdx = rowNum - 1; + while (pos < line.length() && line.charAt(pos) == ' ') pos++; + for (int c = 0; c < 6 && pos + c < line.length(); c++) { + board[rowIdx][c] = charToPiece(line.charAt(pos + c)); + } + } + } + } catch (IOException e) { + throw new RuntimeException("Erreur de lecture du fichier : " + fileName, e); + } + + // Si pas de méta-commentaires, on infère l'état à partir des pièces + inferState(); + } + + /** Parse une ligne de méta-commentaire "% clé: valeur". */ + private void parseMeta(String line) { + if (line.startsWith("% lastTileType:")) { + lastTileType = Integer.parseInt(line.substring(15).trim()); + } else if (line.startsWith("% currentPlayer:")) { + currentPlayer = line.substring(16).trim(); + } else if (line.startsWith("% blackPlaced:")) { + blackPlaced = Boolean.parseBoolean(line.substring(14).trim()); + } else if (line.startsWith("% whitePlaced:")) { + whitePlaced = Boolean.parseBoolean(line.substring(14).trim()); + } else if (line.startsWith("% blackRows:")) { + String s = line.substring(12).trim(); + String[] parts = s.split(","); + int r0 = Integer.parseInt(parts[0].trim()); + int r1 = Integer.parseInt(parts[1].trim()); + if (r0 >= 0) blackRows = new int[]{r0, r1}; + } + } + + /** + * Infère {@code blackPlaced}, {@code whitePlaced} et {@code blackRows} + * à partir des pièces présentes sur le plateau + * (utilisé quand le fichier ne contient pas de méta-commentaires). + */ + private void inferState() { + if (blackPlaced && whitePlaced) return; // méta déjà chargée + + int bc = 0, wc = 0; + Set bRowSet = new TreeSet<>(); + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + int p = board[r][c]; + if (p == BLACK_LICORNE || p == BLACK_PALADIN) { bc++; bRowSet.add(r); } + if (p == WHITE_LICORNE || p == WHITE_PALADIN) { wc++; } + } + } + if (!blackPlaced && bc == 6) { + blackPlaced = true; + // Bord de noir déduit d'une ligne occupée (robuste à 1 seule ligne). + int anyRow = bRowSet.iterator().next(); + blackRows = (anyRow <= 1) ? new int[]{0, 1} : new int[]{4, 5}; + } + if (!whitePlaced && wc == 6) { + whitePlaced = true; + } + } + + @Override + public void saveToFile(String fileName) { + try (PrintWriter pw = new PrintWriter(new FileWriter(fileName))) { + pw.println("% Escampe - sauvegarde du plateau"); + pw.println("% lastTileType: " + lastTileType); + pw.println("% currentPlayer: " + currentPlayer); + pw.println("% blackPlaced: " + blackPlaced); + pw.println("% whitePlaced: " + whitePlaced); + if (blackRows != null) { + pw.println("% blackRows: " + blackRows[0] + "," + blackRows[1]); + } else { + pw.println("% blackRows: -1,-1"); + } + // Lignes 6 à 1 (haut vers bas dans le fichier) + for (int rowIdx = 5; rowIdx >= 0; rowIdx--) { + int rowNum = rowIdx + 1; + StringBuilder sb = new StringBuilder(); + String rowLabel = String.format("%02d", rowNum); + sb.append(rowLabel).append(' '); + for (int c = 0; c < 6; c++) sb.append(pieceToChar(board[rowIdx][c])); + sb.append(' ').append(rowLabel); + pw.println(sb.toString()); + } + } catch (IOException e) { + throw new RuntimeException("Erreur d'écriture du fichier : " + fileName, e); + } + } + + // ========================================================================= + // Fin de partie + // ========================================================================= + + @Override + public boolean gameOver() { + if (!blackPlaced || !whitePlaced) return false; + boolean wl = false, bl = false; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + if (board[r][c] == WHITE_LICORNE) wl = true; + if (board[r][c] == BLACK_LICORNE) bl = true; + } + return !wl || !bl; + } + + // ========================================================================= + // Validation d'un coup + // ========================================================================= + + @Override + public boolean isValidMove(String move, String player) { + if (move == null || move.isEmpty()) return false; + if (!"noir".equals(player) && !"blanc".equals(player)) return false; + + if (move.contains("/")) return isValidPlacement(move, player); + if ("E".equals(move)) return isValidPass(player); + return isValidRegularMove(move, player); + } + + /** + * Valide un coup de placement "P1/P2/P3/P4/P5/P6" + * (P1 = licorne, P2-P6 = paladins). + */ + private boolean isValidPlacement(String move, String player) { + if ("noir".equals(player) && blackPlaced) return false; + if ("blanc".equals(player) && whitePlaced) return false; + if (!player.equals(currentPlayer)) return false; + if ("blanc".equals(player) && !blackPlaced) return false; + + String[] parts = move.split("/"); + if (parts.length != 6) return false; + + int[][] pos = new int[6][2]; + for (int i = 0; i < 6; i++) { + int[] cell = cellFromString(parts[i]); + if (cell == null) return false; + pos[i] = cell; + } + + // Zone autorisée + if ("noir".equals(player)) { + boolean allLow = true, allHigh = true; + for (int[] p : pos) { + if (p[0] != 0 && p[0] != 1) allLow = false; + if (p[0] != 4 && p[0] != 5) allHigh = false; + } + if (!allLow && !allHigh) return false; + } else { + if (blackRows == null) return false; + int[] wr = complementaryRows(blackRows); + for (int[] p : pos) { + if (p[0] != wr[0] && p[0] != wr[1]) return false; + } + } + + // Pas de doublons, cases vides + Set seen = new HashSet<>(); + for (int[] p : pos) { + if (!seen.add(p[0] + "," + p[1])) return false; + if (board[p[0]][p[1]] != EMPTY) return false; + } + return true; + } + + /** Valide un pass "E" : uniquement si aucun coup régulier n'est disponible. */ + private boolean isValidPass(String player) { + if (!player.equals(currentPlayer)) return false; + if (!blackPlaced || !whitePlaced) return false; + if (gameOver()) return false; + String[] m = possiblesMoves(player); + return m.length == 1 && "E".equals(m[0]); + } + + /** Valide un coup régulier "XX-YY". */ + private boolean isValidRegularMove(String move, String player) { + if (!blackPlaced || !whitePlaced) return false; + if (gameOver()) return false; + if (!player.equals(currentPlayer)) return false; + + int dash = move.indexOf('-'); + if (dash < 1 || dash >= move.length() - 1) return false; + + int[] from = cellFromString(move.substring(0, dash)); + int[] to = cellFromString(move.substring(dash + 1)); + if (from == null || to == null) return false; + + if (!belongsToPlayer(board[from[0]][from[1]], player)) return false; + if (lastTileType != -1 && TILE_MAP[from[0]][from[1]] != lastTileType) return false; + + return getReachableSquares(from[0], from[1], player).contains(to[0] + "," + to[1]); + } + + // ========================================================================= + // Génération de coups + // ========================================================================= + + @Override + public String[] possiblesMoves(String player) { + // Pendant le placement le nombre de combinaisons est trop grand pour être énuméré + if (!blackPlaced || !whitePlaced) return new String[0]; + if (gameOver()) return new String[0]; + + List moves = new ArrayList<>(); + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!belongsToPlayer(board[r][c], player)) continue; + if (lastTileType != -1 && TILE_MAP[r][c] != lastTileType) continue; + + for (String dest : getReachableSquares(r, c, player)) { + String[] d = dest.split(","); + moves.add(stringFromCell(r, c) + "-" + + stringFromCell(Integer.parseInt(d[0]), Integer.parseInt(d[1]))); + } + } + } + if (moves.isEmpty()) return new String[]{"E"}; + return moves.toArray(new String[0]); + } + + // ========================================================================= + // Jouer un coup + // ========================================================================= + + @Override + public void play(String move, String player) { + if (!isValidMove(move, player)) + throw new IllegalArgumentException("Coup invalide : '" + move + "' pour " + player); + + if (move.contains("/")) { + playPlacement(move, player); + } else if ("E".equals(move)) { + // Pass : supprime la contrainte de liseré (règle officielle) + lastTileType = -1; + currentPlayer = opponent(currentPlayer); + } else { + playRegular(move, player); + } + } + + private void playPlacement(String move, String player) { + String[] parts = move.split("/"); + int[][] pos = new int[6][2]; + for (int i = 0; i < 6; i++) pos[i] = cellFromString(parts[i]); + + int licorne = "noir".equals(player) ? BLACK_LICORNE : WHITE_LICORNE; + int paladin = "noir".equals(player) ? BLACK_PALADIN : WHITE_PALADIN; + + board[pos[0][0]][pos[0][1]] = licorne; + for (int i = 1; i < 6; i++) board[pos[i][0]][pos[i][1]] = paladin; + + if ("noir".equals(player)) { + blackPlaced = true; + // Bord de noir (bas {0,1} ou haut {4,5}), déduit de la ligne de la licorne. + blackRows = (pos[0][0] <= 1) ? new int[]{0, 1} : new int[]{4, 5}; + currentPlayer = "blanc"; + } else { + whitePlaced = true; + lastTileType = -1; // pas de contrainte pour le premier coup régulier + currentPlayer = "blanc"; // blanc joue en premier + } + } + + private void playRegular(String move, String player) { + int dash = move.indexOf('-'); + int[] from = cellFromString(move.substring(0, dash)); + int[] to = cellFromString(move.substring(dash + 1)); + + board[to[0]][to[1]] = board[from[0]][from[1]]; // capture si case adverse + board[from[0]][from[1]] = EMPTY; + lastTileType = TILE_MAP[to[0]][to[1]]; + currentPlayer = opponent(currentPlayer); + } + + // ========================================================================= + // Algorithme de déplacement (DFS) + // ========================================================================= + + /** + * Calcule l'ensemble des cases atteignables depuis (fromRow, fromCol). + * Résultats encodés sous forme "row,col". + */ + Set getReachableSquares(int fromRow, int fromCol, String player) { + Set result = new HashSet<>(); + boolean[][] visited = new boolean[6][6]; + visited[fromRow][fromCol] = true; + dfs(fromRow, fromCol, TILE_MAP[fromRow][fromCol], player, visited, result); + return result; + } + + /** + * DFS récursif pour le calcul des destinations. + * + *

À chaque appel, la pièce se trouve en (row, col) et doit encore effectuer + * {@code stepsLeft} pas. Les cases déjà visitées dans le chemin courant sont + * marquées dans {@code visited} (réinitialisation après backtrack). + * + *

Règles : + *

    + *
  • Pas intermédiaires (stepsLeft > 1) : la case suivante doit être vide.
  • + *
  • Dernier pas (stepsLeft == 1) : la case peut être vide ou contenir + * la licorne adverse (capture).
  • + *
+ */ + private void dfs(int row, int col, int stepsLeft, + String player, boolean[][] visited, Set result) { + if (stepsLeft == 0) { + result.add(row + "," + col); + return; + } + // Directions orthogonales : haut, bas, gauche, droite + int[] dr = {-1, 1, 0, 0}; + int[] dc = { 0, 0, -1, 1}; + + for (int d = 0; d < 4; d++) { + int nr = row + dr[d]; + int nc = col + dc[d]; + if (nr < 0 || nr >= 6 || nc < 0 || nc >= 6) continue; + if (visited[nr][nc]) continue; + + int occ = board[nr][nc]; + boolean canStep; + if (stepsLeft > 1) { + // Pas intermédiaire : case obligatoirement vide + canStep = (occ == EMPTY); + } else { + // Dernier pas : vide OU capture de la licorne adverse + canStep = (occ == EMPTY) + || ("blanc".equals(player) && occ == BLACK_LICORNE) + || ("noir".equals(player) && occ == WHITE_LICORNE); + } + if (!canStep) continue; + + visited[nr][nc] = true; + dfs(nr, nc, stepsLeft - 1, player, visited, result); + visited[nr][nc] = false; // backtrack + } + } + + // Chemin de génération « int » pour le moteur, sans allocation de String. + // Case = row*6+col (0..35) ; coup = from*36+to ; pass = MOVE_PASS ; black = noir. + // Équivalent au chemin String vérifié (contrôlé par VerifMoves). + + static final int MOVE_PASS = -1; + + record Undo(int move, int captured, int savedLastTile, String savedPlayer) {} + + /** Copie profonde de l'état (le moteur cherche sur une copie, jamais sur le live). */ + EscampeBoard copy() { + EscampeBoard b = new EscampeBoard(); + for (int r = 0; r < 6; r++) b.board[r] = board[r].clone(); + b.lastTileType = lastTileType; + b.currentPlayer = currentPlayer; + b.blackPlaced = blackPlaced; + b.whitePlaced = whitePlaced; + b.blackRows = (blackRows == null) ? null : blackRows.clone(); + return b; + } + + private boolean isSide(int piece, boolean black) { + return black ? (piece == BLACK_LICORNE || piece == BLACK_PALADIN) + : (piece == WHITE_LICORNE || piece == WHITE_PALADIN); + } + + /** Version allouante de {@link #genMovesIntInto}, pour les tests. */ + int[] genMovesInt(boolean black) { + int[] buf = new int[256]; + int n = genMovesIntInto(black, buf); + if (n == 0) return new int[0]; + return java.util.Arrays.copyOf(buf, n); + } + + /** + * Écrit les coups de la phase régulière de {@code black} dans {@code buf} et + * renvoie leur nombre : 0 hors phase régulière, ou {@code {MOVE_PASS}} si bloqué. + */ + int genMovesIntInto(boolean black, int[] buf) { + if (!blackPlaced || !whitePlaced) return 0; + if (gameOver()) return 0; + int n = 0; + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!isSide(board[r][c], black)) continue; + if (lastTileType != -1 && TILE_MAP[r][c] != lastTileType) continue; + int from = r * 6 + c; + long reach = dfsMask(r, c, TILE_MAP[r][c], black, 1L << from, 0L); + while (reach != 0L) { + int t = Long.numberOfTrailingZeros(reach); + reach &= reach - 1; + buf[n++] = from * 36 + t; + } + } + } + if (n == 0) { buf[0] = MOVE_PASS; return 1; } + return n; + } + + /** DFS sur masque de bits (équivalent de {@link #dfs}) : {@code visited}/{@code reach} = ensembles de cases. */ + private long dfsMask(int row, int col, int steps, boolean black, long visited, long reach) { + if (steps == 0) return reach | (1L << (row * 6 + col)); + final int[] dr = {-1, 1, 0, 0}; + final int[] dc = { 0, 0, -1, 1}; + for (int d = 0; d < 4; d++) { + int nr = row + dr[d], nc = col + dc[d]; + if (nr < 0 || nr >= 6 || nc < 0 || nc >= 6) continue; + int ncell = nr * 6 + nc; + if ((visited & (1L << ncell)) != 0) continue; + int occ = board[nr][nc]; + boolean canStep; + if (steps > 1) { + canStep = (occ == EMPTY); + } else { + canStep = (occ == EMPTY) + || (black && occ == WHITE_LICORNE) + || (!black && occ == BLACK_LICORNE); + } + if (!canStep) continue; + reach = dfsMask(nr, nc, steps - 1, black, visited | (1L << ncell), reach); + } + return reach; + } + + /** Applique un coup int (régulier ou {@code MOVE_PASS}) et renvoie le jeton d'annulation. */ + Undo makeInt(int move) { + int savedLast = lastTileType; + String savedPlayer = currentPlayer; + if (move == MOVE_PASS) { + lastTileType = -1; + currentPlayer = opponent(currentPlayer); + return new Undo(move, EMPTY, savedLast, savedPlayer); + } + int from = move / 36, to = move % 36; + int fr = from / 6, fc = from % 6, tr = to / 6, tc = to % 6; + int captured = board[tr][tc]; + board[tr][tc] = board[fr][fc]; + board[fr][fc] = EMPTY; + lastTileType = TILE_MAP[tr][tc]; + currentPlayer = opponent(currentPlayer); + return new Undo(move, captured, savedLast, savedPlayer); + } + + /** Annule l'effet de {@link #makeInt}. */ + void unmakeInt(Undo u) { + if (u.move() != MOVE_PASS) { + int from = u.move() / 36, to = u.move() % 36; + int fr = from / 6, fc = from % 6, tr = to / 6, tc = to % 6; + board[fr][fc] = board[tr][tc]; + board[tr][tc] = u.captured(); + } + lastTileType = u.savedLastTile(); + currentPlayer = u.savedPlayer(); + } + + /** Code int → notation "A1-B2" (ou "E" pour le pass). */ + String moveToString(int move) { + if (move == MOVE_PASS) return "E"; + int from = move / 36, to = move % 36; + return stringFromCell(from / 6, from % 6) + "-" + stringFromCell(to / 6, to % 6); + } + + // ========================================================================= + // Méthodes utilitaires + // ========================================================================= + + private int charToPiece(char c) { + switch (c) { + case 'B': return WHITE_LICORNE; + case 'b': return WHITE_PALADIN; + case 'N': return BLACK_LICORNE; + case 'n': return BLACK_PALADIN; + default: return EMPTY; + } + } + + private char pieceToChar(int piece) { + switch (piece) { + case WHITE_LICORNE: return 'B'; + case WHITE_PALADIN: return 'b'; + case BLACK_LICORNE: return 'N'; + case BLACK_PALADIN: return 'n'; + default: return '-'; + } + } + + /** + * Convertit une chaîne "A1"-"F6" en coordonnées {row, col} (0-indexé). + * Retourne null si le format est invalide. + */ + int[] cellFromString(String s) { + if (s == null || s.length() < 2) return null; + s = s.trim(); + char colC = Character.toUpperCase(s.charAt(0)); + char rowC = s.charAt(1); + if (colC < 'A' || colC > 'F') return null; + if (rowC < '1' || rowC > '6') return null; + return new int[]{rowC - '1', colC - 'A'}; + } + + /** Convertit des coordonnées internes en notation "A1"-"F6". */ + String stringFromCell(int row, int col) { + return "" + (char)('A' + col) + (char)('1' + row); + } + + private boolean belongsToPlayer(int piece, String player) { + if ("blanc".equals(player)) return piece == WHITE_LICORNE || piece == WHITE_PALADIN; + if ("noir".equals(player)) return piece == BLACK_LICORNE || piece == BLACK_PALADIN; + return false; + } + + private String opponent(String player) { + return "blanc".equals(player) ? "noir" : "blanc"; + } + + /** + * Retourne les deux lignes (0-indexé) que doit utiliser blanc, + * sachant que noir a choisi {@code bRows}. + * Noir sur {0,1} → blanc sur {4,5} ; noir sur {4,5} → blanc sur {0,1}. + */ + private int[] complementaryRows(int[] bRows) { + return (bRows[0] == 0) ? new int[]{4, 5} : new int[]{0, 1}; + } + + // ========================================================================= + // Affichage + // ========================================================================= + + /** Affiche le plateau en console (ligne 6 en haut). */ + public void printBoard() { + System.out.println(" A B C D E F liseré"); + for (int r = 5; r >= 0; r--) { + System.out.print((r + 1) + " [ "); + for (int c = 0; c < 6; c++) System.out.print(pieceToChar(board[r][c]) + " "); + System.out.print("] " + (r + 1) + " |"); + for (int c = 0; c < 6; c++) System.out.print(" " + TILE_MAP[r][c]); + System.out.println(); + } + System.out.println("lastTileType=" + lastTileType + + " currentPlayer=" + currentPlayer + "\n"); + } + + // ========================================================================= + // Main de démonstration + // ========================================================================= + + public static void main(String[] args) throws IOException { + System.out.println("========================================="); + System.out.println(" Demo EscampeBoard "); + System.out.println("=========================================\n"); + + // ── Placements utilisés dans plusieurs scenarios ────────────────── + // Noir : lignes 5-6 (rows 4-5) — licorne en A6, paladins en B6 C6 D5 E5 F5 + final String NOIR_PL = "A6/B6/C6/D5/E5/F5"; + // Blanc : lignes 1-2 (rows 0-1) — licorne en D2, paladins en A1 B1 C1 E1 F2 + final String BLANC_PL = "D2/A1/B1/C1/E1/F2"; + + // ───────────────────────────────────────────────────────────────── + // 1. PHASE DE PLACEMENT + // ───────────────────────────────────────────────────────────────── + System.out.println("=== 1. PHASE DE PLACEMENT ==="); + EscampeBoard b = new EscampeBoard(); + + // Tentatives invalides avant le placement normal + System.out.println("Blanc tente de placer avant noir : " + + b.isValidMove(BLANC_PL, "blanc") + " (attendu: false)"); + System.out.println("Noir placement au milieu du plateau : " + + b.isValidMove("A3/B3/C3/D3/E3/F3", "noir") + " (attendu: false)"); + System.out.println("Noir placement sur deux bords diff. : " + + b.isValidMove("A1/B1/C1/D5/E5/F5", "noir") + " (attendu: false)"); + + // Placement valide de noir + System.out.println("\nNoir place : " + NOIR_PL + + " valid=" + b.isValidMove(NOIR_PL, "noir")); + b.play(NOIR_PL, "noir"); + System.out.println(" blackPlaced=" + b.blackPlaced + + " blackRows=[" + b.blackRows[0] + "," + b.blackRows[1] + "]" + + " currentPlayer=" + b.currentPlayer); + + // Placement valide de blanc + System.out.println("Blanc place : " + BLANC_PL + + " valid=" + b.isValidMove(BLANC_PL, "blanc")); + b.play(BLANC_PL, "blanc"); + System.out.println(" whitePlaced=" + b.whitePlaced + + " currentPlayer=" + b.currentPlayer); + + b.printBoard(); + + // ───────────────────────────────────────────────────────────────── + // 2. PHASE REGULIERE — contrainte de liseré + // ───────────────────────────────────────────────────────────────── + System.out.println("=== 2. PHASE REGULIERE ==="); + System.out.println("lastTileType=" + b.lastTileType + + " (pas de contrainte pour le premier coup)\n"); + + // Blanc joue en premier, pas de contrainte + String[] bMoves = b.possiblesMoves("blanc"); + System.out.println("Coups possibles pour blanc : " + bMoves.length + " coups"); + System.out.printf("Exemples : %s %s %s%n", + bMoves[0], + bMoves.length > 1 ? bMoves[1] : "", + bMoves.length > 2 ? bMoves[2] : ""); + + String m1 = bMoves[0]; + System.out.println("\nBlanc joue : " + m1 + " valid=" + b.isValidMove(m1, "blanc")); + b.play(m1, "blanc"); + System.out.println(" lastTileType=" + b.lastTileType + + " (liseré de la case d'arrivée = contrainte pour noir)" + + " currentPlayer=" + b.currentPlayer); + + // Tentative invalide : blanc rejoue hors de son tour + System.out.println("\nBlanc rejoue hors tour : " + + b.isValidMove(m1, "blanc") + " (attendu: false)"); + + // Tentative invalide : noir joue depuis un mauvais liseré + String badNoirMove = findMoveFromWrongTile(b, "noir"); + if (badNoirMove != null) { + System.out.println("Noir depuis mauvais liseré (" + badNoirMove + ") : " + + b.isValidMove(badNoirMove, "noir") + " (attendu: false)"); + } + + // Coup valide de noir + String[] nMoves = b.possiblesMoves("noir"); + System.out.println("\nCoups possibles pour noir (liseré " + b.lastTileType + ") : " + + nMoves.length + " coups"); + String m2 = nMoves[0]; + System.out.println("Noir joue : " + m2 + " valid=" + b.isValidMove(m2, "noir")); + b.play(m2, "noir"); + System.out.println(" lastTileType=" + b.lastTileType + + " currentPlayer=" + b.currentPlayer); + + // ───────────────────────────────────────────────────────────────── + // 3. ROUND-TRIP FICHIER + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 3. ROUND-TRIP FICHIER ==="); + b.saveToFile("escampe_save.txt"); + System.out.println("Sauvegardé dans escampe_save.txt"); + + EscampeBoard b2 = new EscampeBoard(); + b2.setFromFile("escampe_save.txt"); + System.out.println("Rechargé : lastTileType=" + b2.lastTileType + + " currentPlayer=" + b2.currentPlayer); + System.out.println("Plateaux identiques : " + Arrays.deepEquals(b.board, b2.board)); + System.out.println("lastTileType identique : " + (b.lastTileType == b2.lastTileType)); + System.out.println("currentPlayer identique : " + b.currentPlayer.equals(b2.currentPlayer)); + + // ───────────────────────────────────────────────────────────────── + // 4. SCENARIO DE PASS (E) + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 4. SCENARIO DE PASS ==="); + EscampeBoard bPass = new EscampeBoard(); + bPass.play(NOIR_PL, "noir"); + bPass.play(BLANC_PL, "blanc"); + + // Forcer une situation où noir n'a aucun coup : + // lastTileType=2, mais toutes les pièces noires sont sur liseré 1 ou 3. + for (int r = 0; r < 6; r++) Arrays.fill(bPass.board[r], EMPTY); + bPass.board[0][3] = WHITE_LICORNE; // D1 liseré=3 + bPass.board[0][0] = WHITE_PALADIN; // A1 liseré=1 + bPass.board[0][4] = WHITE_PALADIN; // E1 liseré=1 + bPass.board[5][0] = BLACK_LICORNE; // A6 liseré=3 + bPass.board[4][4] = BLACK_PALADIN; // E5 liseré=1 + bPass.board[4][2] = BLACK_PALADIN; // C5 liseré=1 + bPass.lastTileType = 2; // blanc vient de poser sur liseré 2 + bPass.currentPlayer = "noir"; + + System.out.println("Pièces noires sur liserés 1 et 3, contrainte = 2"); + System.out.println("possiblesMoves(noir) = " + + Arrays.toString(bPass.possiblesMoves("noir")) + " (attendu: [E])"); + System.out.println("isValidMove(E, noir) = " + + bPass.isValidMove("E", "noir") + " (attendu: true)"); + System.out.println("isValidMove(E, blanc) = " + + bPass.isValidMove("E", "blanc") + " (attendu: false, pas son tour)"); + + bPass.play("E", "noir"); + System.out.println("Après pass : lastTileType=" + bPass.lastTileType + + " (attendu: -1) currentPlayer=" + bPass.currentPlayer); + + // ───────────────────────────────────────────────────────────────── + // 5. CAPTURE ET FIN DE PARTIE + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 5. CAPTURE ET FIN DE PARTIE ==="); + EscampeBoard bCap = new EscampeBoard(); + bCap.play(NOIR_PL, "noir"); + bCap.play(BLANC_PL, "blanc"); + + // Mise en scène : + // - Blanc paladin en B1 (row=0,col=1 ; liseré=2) + // → 2 pas orthogonaux : B1 -> B2 -> B3 + // - Licorne noire en B3 (row=2,col=1) ; case B2 vide + // - lastTileType=2 → blanc peut jouer depuis B1 + for (int r = 0; r < 6; r++) Arrays.fill(bCap.board[r], EMPTY); + bCap.board[0][1] = WHITE_PALADIN; // B1 liseré=2 + bCap.board[0][3] = WHITE_LICORNE; // D1 (garde-fou : licorne blanche présente) + bCap.board[2][1] = BLACK_LICORNE; // B3 + bCap.board[5][5] = BLACK_PALADIN; // F6 (présence de pièce noire restante) + bCap.lastTileType = 2; + bCap.currentPlayer = "blanc"; + + System.out.println("Avant capture :"); + bCap.printBoard(); + System.out.println("gameOver = " + bCap.gameOver() + " (attendu: false)"); + + // Coup invalide : un pas seulement (B1->B2), pas assez de cases + System.out.println("Coup B1-B2 (1 pas, manque 1) : " + + bCap.isValidMove("B1-B2", "blanc") + " (attendu: false)"); + + // Coup valide : deux pas (B1->B2->B3), B2 vide, B3 = licorne noire + System.out.println("Coup B1-B3 (2 pas, capture) : " + + bCap.isValidMove("B1-B3", "blanc") + " (attendu: true)"); + bCap.play("B1-B3", "blanc"); + + System.out.println("Après capture :"); + bCap.printBoard(); + System.out.println("gameOver = " + bCap.gameOver() + " (attendu: true)"); + System.out.println("Blanc gagne !"); + + System.out.println("\n========================================="); + System.out.println(" Demo terminee "); + System.out.println("========================================="); + } + + /** + * Utilitaire pour la démo : trouve un coup depuis une pièce + * de {@code player} dont le liseré est différent de {@code lastTileType}. + * Retourne null si aucune telle pièce n'a de destinations. + */ + private static String findMoveFromWrongTile(EscampeBoard b, String player) { + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!b.belongsToPlayer(b.board[r][c], player)) continue; + if (TILE_MAP[r][c] == b.lastTileType) continue; + Set reach = b.getReachableSquares(r, c, player); + if (!reach.isEmpty()) { + String dest = reach.iterator().next(); + String[] parts = dest.split(","); + return b.stringFromCell(r, c) + "-" + + b.stringFromCell(Integer.parseInt(parts[0]), + Integer.parseInt(parts[1])); + } + } + } + return null; + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/IJoueur.java b/dist/Puyaubreau_Russac/src/escampe/IJoueur.java new file mode 100644 index 0000000..c6e9143 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/IJoueur.java @@ -0,0 +1,65 @@ +package escampe; + + +/** + * Voici l'interface abstraite qu'il suffit d'implanter pour jouer. Ensuite, vous devez utiliser + * ClientJeu en lui donnant le nom de votre classe pour qu'il la charge et se connecte au serveur. + * + * @author L. Simon (Univ. Paris-Sud)- 2006-2013 + * + */ + +public interface IJoueur { + + // Mais pas lors de la conversation avec l'arbitre (méthodes initJoueur et getNumJoueur) + // Vous pouvez changer cela en interne si vous le souhaitez + static final int BLANC = -1; + static final int NOIR = 1; + + /** + * L'arbitre vient de lancer votre joueur. Il lui informe par cette méthode que vous devez jouer + * dans cette couleur. Vous pouvez utiliser cette m?thode abstraite, ou la méthode constructeur + * de votre classe, pour initialiser vos structures. + * + * @param mycolour + * La couleur dans laquelle vous allez jouer (-1=BLANC, 1=NOIR) + */ + public void initJoueur(int mycolour); + + // Doit retourner l'argument passé par la fonction ci-dessus (constantes BLANC ou NOIR) + public int getNumJoueur(); + + /** + * C'est ici que vous devez faire appel à votre IA pour trouver le meilleur coup à jouer sur le + * plateau courant. + * + * @return une chaine décrivant le mouvement. Cette chaine doit être décrite exactement comme + * sur l'exemple : String msg = "" + positionInitiale + "-" +positionFinale + ""; ou "PASSE"; + * Chaque position contient une lettre et un num?ro, par exemple:A1,B2 (coup "A1-B2") + */ + public String choixMouvement(); + + /** + * Méthode appelée par l'arbitre pour désigner le vainqueur. Vous pouvez en profiter pour + * imprimer une bannière de joie... Si vous gagnez... + * + * @param colour + * La couleur du gagnant (BLANC=-1, NOIR=1). + */ + public void declareLeVainqueur(int colour); + + /** + * On suppose que l'arbitre a vérifié que le mouvement ennemi était bien légal. Il vous informe + * du mouvement ennemi. A vous de répercuter ce mouvement dans vos structures. Comme par exemple + * éliminer les pions que ennemi vient de vous prendre par ce mouvement. Il n'est pas nécessaire + * de réfléchir déjà à votre prochain coup à jouer : pour cela l'arbitre appelera ensuite + * choixMouvement(). + * + * @param coup + * une chaine décrivant le mouvement: par exemple: "A1-B2" + */ + public void mouvementEnnemi(String coup); + + public String binoName(); + +} diff --git a/dist/Puyaubreau_Russac/src/escampe/JoueurPuyaubreauRussac.java b/dist/Puyaubreau_Russac/src/escampe/JoueurPuyaubreauRussac.java new file mode 100644 index 0000000..d04c3f4 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/JoueurPuyaubreauRussac.java @@ -0,0 +1,117 @@ +package escampe; + +/** + * Joueur du tournoi (Puyaubreau / Russac). Enveloppe un {@link EscampeBoard} + * tenu à jour à chaque coup et délègue la décision à {@link Moteur}. + * + * L'interface {@code IJoueur} parle en entiers ({@code NOIR=1}, {@code BLANC=-1}) + * et place les pièces via le même canal que les coups : le premier + * {@code choixMouvement} renvoie un placement, les suivants des coups. Le pass + * se note {@code "E"} (et non {@code "PASSE"}, contrairement au Javadoc d'IJoueur). + */ +public class JoueurPuyaubreauRussac implements IJoueur { + + private int couleur = NOIR; + private EscampeBoard board; + private final Moteur moteur = new Moteur(); + + // Budget de temps : enveloppe sous la limite arbitre de 300 s, fraction du + // temps restant par coup. Surchargeable par -Descampe.* pour les tests. + private static final long BUDGET_MS = Long.getLong("escampe.budgetMs", 280_000); + private static final long MAX_SLICE_MS = Long.getLong("escampe.maxSliceMs", 6_000); + private static final long MIN_SLICE_MS = 120; + private static final int TIME_DIVISOR = 12; + private static final boolean DEBUG = Boolean.getBoolean("escampe.debug"); + private long usedMs = 0; + + @Override + public void initJoueur(int mycolour) { + couleur = mycolour; + board = new EscampeBoard(); + } + + @Override + public int getNumJoueur() { + return couleur; + } + + @Override + public String binoName() { + return "Puyaubreau_Russac"; + } + + private String myStr() { return couleur == NOIR ? "noir" : "blanc"; } + private String oppStr() { return couleur == NOIR ? "blanc" : "noir"; } + + @Override + public String choixMouvement() { + if (board.gameOver()) return "xxxxx"; // fin de partie sous Solo ; l'arbitre, lui, n'appelle plus + + if (couleur == NOIR && !board.blackPlaced) { + String pl = placement(new int[]{0, 1}); + board.play(pl, "noir"); + return pl; + } + if (couleur == BLANC && !board.whitePlaced) { + String pl = placement(complementaryRows(board.blackRows)); + board.play(pl, "blanc"); + return pl; + } + + String move = chooseMove(); + board.play(move, myStr()); + return move; + } + + @Override + public void mouvementEnnemi(String coup) { + if (coup == null) return; + coup = coup.trim(); + if (coup.isEmpty() || coup.equals("xxxxx")) return; + try { + board.play(coup, oppStr()); + } catch (RuntimeException e) { + // L'arbitre garantit la légalité ; on ne plante pas sur une désync. + System.err.println("[" + binoName() + "] coup ennemi rejeté : " + coup); + } + } + + @Override + public void declareLeVainqueur(int colour) { + if (colour == couleur) System.out.println("[" + binoName() + "] Victoire !"); + else if (colour == -couleur) System.out.println("[" + binoName() + "] Défaite."); + } + + /** Temps alloué au moteur pour ce coup, puis appel de la recherche. */ + private String chooseMove() { + long remaining = BUDGET_MS - usedMs; + long slice = Math.max(MIN_SLICE_MS, Math.min(remaining / TIME_DIVISOR, MAX_SLICE_MS)); + if (remaining < 1500) slice = Math.max(40, remaining - 300); + + long t0 = System.currentTimeMillis(); + int m = moteur.bestMove(board, couleur == NOIR, slice); + usedMs += System.currentTimeMillis() - t0; + + if (DEBUG) { + System.err.printf("[%s] %s prof=%d score=%d noeuds=%d cumul=%ds%n", + binoName(), board.moveToString(m), moteur.reachedDepth, moteur.lastScore, + moteur.nodes, usedMs / 1000); + } + return board.moveToString(m); + } + + private int[] complementaryRows(int[] blackRows) { + return blackRows[0] == 0 ? new int[]{4, 5} : new int[]{0, 1}; + } + + /** + * Placement : licorne dans un coin, ses deux voisines occupées par des + * paladins (la licorne devient incapturable), les trois autres paladins sur + * des liserés 1/2/3 distincts pour ne jamais être contraint de passer. + */ + private String placement(int[] rows) { + boolean bottom = Math.min(rows[0], rows[1]) == 0; + return bottom ? "A1/A2/B1/E1/F1/C2" // coin A1, murs A2/B1, mobiles E1(1)/F1(2)/C2(3) + : "A6/A5/B6/C5/F5/E6"; // coin A6, murs A5/B6, mobiles C5(1)/F5(2)/E6(3) + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/Moteur.java b/dist/Puyaubreau_Russac/src/escampe/Moteur.java new file mode 100644 index 0000000..52e7926 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/Moteur.java @@ -0,0 +1,137 @@ +package escampe; + +/** + * Recherche du meilleur coup : negamax + élagage alpha-bêta + approfondissement + * itératif sous limite de temps. La recherche se fait sur une copie du plateau, + * via makeInt/unmakeInt (sans allocation). Capturer la licorne adverse vaut + * {@code WIN - ply} (gagner vite plutôt que tard). + */ +final class Moteur { + + static final int WIN = 1_000_000; + static final int INF = 2_000_000; + static final int MAX_DEPTH = 40; + private static final int MAX_PLY = MAX_DEPTH + 8; + + // Poids de l'évaluation (proximité paladins/licornes : attaque vs défense). + int wAtkSum = 2, wDefSum = 2, wAtkMin = 8, wDefMin = 8; + + private long deadline; + private boolean timedOut; + long nodes; + int reachedDepth; + int lastScore; + + private final int[][] buf = new int[MAX_PLY][256]; // un buffer de coups par profondeur + + int bestMove(EscampeBoard root, boolean black, long budgetMs) { + EscampeBoard pos = root.copy(); + deadline = System.currentTimeMillis() + Math.max(1, budgetMs); + nodes = 0; timedOut = false; reachedDepth = 0; lastScore = 0; + + int[] moves = new int[256]; + int n = pos.genMovesIntInto(black, moves); + if (n == 0 || moves[0] == EscampeBoard.MOVE_PASS) return EscampeBoard.MOVE_PASS; + orderCapturesFirst(pos, moves, n, black); + + int best = moves[0]; + for (int depth = 1; depth <= MAX_DEPTH; depth++) { + int alpha = -INF, bestScore = -INF, bestThis = moves[0]; + boolean complete = true; + for (int i = 0; i < n; i++) { + EscampeBoard.Undo u = pos.makeInt(moves[i]); + int sc = isCapture(u, black) ? WIN - 1 : -negamax(pos, depth - 1, -INF, -alpha, !black, 1); + pos.unmakeInt(u); + if (timedOut) { complete = false; break; } + if (sc > bestScore) { bestScore = sc; bestThis = moves[i]; } + if (sc > alpha) alpha = sc; + } + if (!complete) break; // profondeur interrompue : on garde la précédente + best = bestThis; + reachedDepth = depth; + lastScore = bestScore; + moveToFront(moves, n, best); // ordonne l'itération suivante + if (bestScore >= WIN - 64) break; + } + return best; + } + + private int negamax(EscampeBoard pos, int depth, int alpha, int beta, boolean black, int ply) { + if ((++nodes & 2047) == 0 && System.currentTimeMillis() >= deadline) { timedOut = true; return 0; } + if (depth <= 0) return eval(pos, black); + + int[] moves = buf[ply]; + int n = pos.genMovesIntInto(black, moves); + if (n == 0) return eval(pos, black); + orderCapturesFirst(pos, moves, n, black); + + int bestScore = -INF; + for (int i = 0; i < n; i++) { + EscampeBoard.Undo u = pos.makeInt(moves[i]); + int sc = isCapture(u, black) ? WIN - ply : -negamax(pos, depth - 1, -beta, -alpha, !black, ply + 1); + pos.unmakeInt(u); + if (timedOut) return 0; + if (sc > bestScore) bestScore = sc; + if (bestScore > alpha) alpha = bestScore; + if (alpha >= beta) break; + } + return bestScore; + } + + private boolean isCapture(EscampeBoard.Undo u, boolean black) { + return u.captured() == (black ? EscampeBoard.WHITE_LICORNE : EscampeBoard.BLACK_LICORNE); + } + + /** Place en tête un coup capturant la licorne adverse, pour une coupure immédiate. */ + private void orderCapturesFirst(EscampeBoard pos, int[] moves, int n, boolean black) { + int enemy = black ? EscampeBoard.WHITE_LICORNE : EscampeBoard.BLACK_LICORNE; + for (int i = 0; i < n; i++) { + int to = moves[i] % 36; + if (moves[i] != EscampeBoard.MOVE_PASS && pos.board[to / 6][to % 6] == enemy) { + int t = moves[0]; moves[0] = moves[i]; moves[i] = t; + return; + } + } + } + + private void moveToFront(int[] moves, int n, int target) { + for (int i = 0; i < n; i++) { + if (moves[i] == target) { int t = moves[0]; moves[0] = moves[i]; moves[i] = t; return; } + } + } + + private int eval(EscampeBoard pos, boolean black) { + int adv = evalBlackAdvantage(pos); + return black ? adv : -adv; + } + + /** Avantage de Noir : nos paladins proches de la licorne adverse, les leurs loin de la nôtre. */ + private int evalBlackAdvantage(EscampeBoard pos) { + int[][] b = pos.board; + int blr = -1, blc = -1, wlr = -1, wlc = -1; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + int p = b[r][c]; + if (p == EscampeBoard.BLACK_LICORNE) { blr = r; blc = c; } + else if (p == EscampeBoard.WHITE_LICORNE) { wlr = r; wlc = c; } + } + if (wlr < 0) return WIN; + if (blr < 0) return -WIN; + + int atkSum = 0, defSum = 0, atkMin = 99, defMin = 99; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + int p = b[r][c]; + if (p == EscampeBoard.BLACK_PALADIN) { + int d = Math.abs(r - wlr) + Math.abs(c - wlc); + atkSum += 10 - d; + if (d < atkMin) atkMin = d; + } else if (p == EscampeBoard.WHITE_PALADIN) { + int d = Math.abs(r - blr) + Math.abs(c - blc); + defSum += 10 - d; + if (d < defMin) defMin = d; + } + } + return wAtkSum * atkSum - wDefSum * defSum + wAtkMin * (10 - atkMin) - wDefMin * (10 - defMin); + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/Partie1.java b/dist/Puyaubreau_Russac/src/escampe/Partie1.java new file mode 100644 index 0000000..972d1f2 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/Partie1.java @@ -0,0 +1,45 @@ +package escampe; + +public interface Partie1 { + + /** + * Initialise un plateau à partir d'un fichier texte. + * @param fileName le nom du fichier à lire + */ + public void setFromFile(String fileName); + + /** + * Sauve la configuration de l'état courant (plateau et pièces restantes) dans un fichier. + * @param fileName le nom du fichier à sauvegarder + * Le format doit être compatible avec celui utilisé pour la lecture. + */ + public void saveToFile(String fileName); + + /** + * Indique si le coup {@code move} est valide pour le joueur {@code player} sur le plateau courant. + * @param move le coup à jouer, + * sous la forme "B1-D1" en général, + * sous la forme "C6/A6/B5/D5/E6/F5" pour le coup qui place les pièces, + * ou "E" pour passer son tour. + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public boolean isValidMove(String move, String player); + + /** + * Calcule les coups possibles pour le joueur {@code player} sur le plateau courant. + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public String[] possiblesMoves(String player); + + /** + * Modifie le plateau en jouant le coup {@code move} pour le joueur {@code player}. + * @param move le coup à jouer, sous la forme "C1-D1" ou "C6/A6/B5/D5/E6/F5" + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public void play(String move, String player); + + /** + * Retourne vrai lorsque le plateau correspond à une fin de partie. + */ + public boolean gameOver(); +} diff --git a/dist/Puyaubreau_Russac/src/escampe/RulesTest.java b/dist/Puyaubreau_Russac/src/escampe/RulesTest.java new file mode 100644 index 0000000..7e5fa32 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/RulesTest.java @@ -0,0 +1,143 @@ +package escampe; + +import java.util.*; + +/** + * Tests directs des règles du jeu : compte de pas selon le liseré, capture au + * dernier pas uniquement, paladins imprenables, interdiction de traverser une + * case occupée, contrainte de liseré, pass forcé, fin de partie, zones de placement. + */ +public class RulesTest { + + static int pass = 0, fail = 0; + static void check(boolean cond, String name) { + if (cond) pass++; + else { fail++; System.out.println(" ÉCHEC : " + name); } + } + static boolean has(Set s, int r, int c) { return s.contains(r + "," + c); } + + public static void main(String[] args) { + stepCount(); + captureAndBlocking(); + lisereConstraint(); + forcedPass(); + gameOver(); + placementZones(); + + System.out.println("\nRulesTest : " + pass + " OK, " + fail + " échec(s)."); + if (fail > 0) System.exit(1); + } + + /** Le nombre de pas est exactement le liseré de la case de départ. */ + static void stepCount() { + EscampeBoard b = new EscampeBoard(); + b.board[2][2] = EscampeBoard.WHITE_PALADIN; // C3, liseré 1 + Set r = b.getReachableSquares(2, 2, "blanc"); + check(r.size() == 4 && has(r,1,2) && has(r,3,2) && has(r,2,1) && has(r,2,3), + "liseré 1 (centre) → exactement les 4 voisins orthogonaux"); + + b = new EscampeBoard(); + b.board[2][3] = EscampeBoard.WHITE_PALADIN; // D3, liseré 2 + r = b.getReachableSquares(2, 3, "blanc"); + check(r.size() == 8 + && has(r,0,3) && has(r,4,3) && has(r,2,1) && has(r,2,5) + && has(r,1,2) && has(r,1,4) && has(r,3,2) && has(r,3,4), + "liseré 2 (centre) → les 8 cases à distance 2"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; // C4, liseré 3 + r = b.getReachableSquares(3, 2, "blanc"); + check(has(r,0,2), "liseré 3 atteint (0,2) à 3 pas en ligne droite"); + check(!has(r,1,2), "liseré 3 n'atteint PAS (1,2) (mauvaise parité : 3 pas)"); + check(has(r,2,2) && has(r,3,3), "liseré 3 atteint des cases à distance 1 (zigzag)"); + } + + /** Capture au dernier pas uniquement ; paladins imprenables ; pas de traversée. */ + static void captureAndBlocking() { + EscampeBoard b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; // C4 liseré 3 + b.board[0][2] = EscampeBoard.BLACK_LICORNE; // cible à 3 pas (droit) + Set r = b.getReachableSquares(3, 2, "blanc"); + check(has(r,0,2), "capture de la licorne adverse au dernier pas : autorisée"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; + b.board[0][2] = EscampeBoard.BLACK_PALADIN; // paladin sur la case finale + r = b.getReachableSquares(3, 2, "blanc"); + check(!has(r,0,2), "paladin imprenable : pas d'arrivée dessus"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; + b.board[1][2] = EscampeBoard.BLACK_PALADIN; // bloque l'unique chemin vers (0,2) + r = b.getReachableSquares(3, 2, "blanc"); + check(!has(r,0,2), "interdit de traverser une case occupée"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; + b.board[1][2] = EscampeBoard.BLACK_LICORNE; // licorne à distance 2 (parité ≠) + r = b.getReachableSquares(3, 2, "blanc"); + check(!has(r,1,2), "licorne à mauvaise distance : non capturable (compte de pas exact)"); + } + + /** On ne peut jouer que depuis une case du liseré imposé. */ + static void lisereConstraint() { + EscampeBoard b = inPlay(); + b.board[2][2] = EscampeBoard.WHITE_LICORNE; // C3 liseré 1 + b.board[5][5] = EscampeBoard.BLACK_LICORNE; + b.board[2][3] = EscampeBoard.WHITE_PALADIN; // D3 liseré 2 + b.board[0][0] = EscampeBoard.WHITE_PALADIN; // A1 liseré 1 + b.lastTileType = 2; // seules les pièces liseré 2 bougent + boolean allLis2 = true; + for (String m : b.possiblesMoves("blanc")) { + int[] from = b.cellFromString(m.substring(0, m.indexOf('-'))); + if (EscampeBoard.TILE_MAP[from[0]][from[1]] != 2) allLis2 = false; + } + check(allLis2, "contrainte de liseré : tous les coups partent d'une case liseré 2"); + } + + /** Pass autorisé seulement si aucune pièce ne peut jouer le liseré imposé. */ + static void forcedPass() { + EscampeBoard b = inPlay(); + b.board[0][0] = EscampeBoard.WHITE_LICORNE; // A1 liseré 1 + b.board[5][5] = EscampeBoard.BLACK_LICORNE; + b.lastTileType = 3; // blanc n'a aucune pièce liseré 3 + String[] mv = b.possiblesMoves("blanc"); + check(mv.length == 1 && mv[0].equals("E"), "aucune pièce sur le liseré → pass forcé"); + check(b.isValidMove("E", "blanc"), "E valide quand bloqué"); + + b.lastTileType = 1; // la licorne A1 (liseré 1) peut bouger + String[] mv2 = b.possiblesMoves("blanc"); + check(mv2.length >= 1 && !mv2[0].equals("E"), "des coups existent → pas de pass"); + check(!b.isValidMove("E", "blanc"), "E invalide si des coups existent"); + } + + static void gameOver() { + EscampeBoard b = inPlay(); + b.board[0][0] = EscampeBoard.WHITE_LICORNE; + b.board[5][5] = EscampeBoard.BLACK_LICORNE; + check(!b.gameOver(), "deux licornes présentes → partie en cours"); + b.board[5][5] = EscampeBoard.EMPTY; + check(b.gameOver(), "une licorne manquante → fin de partie"); + check(!new EscampeBoard().gameOver(), "avant placement → jamais fini"); + } + + /** Placement : zones autorisées et complémentarité noir/blanc. */ + static void placementZones() { + EscampeBoard b = new EscampeBoard(); + check(!b.isValidMove("A3/B3/C3/D3/E3/F3", "noir"), "placement noir au centre : refusé"); + check(b.isValidMove("A1/A2/B1/E1/F1/C2", "noir"), "placement noir sur 2 lignes du bord : accepté"); + b.play("A1/A2/B1/E1/F1/C2", "noir"); + check(b.isValidMove("A6/A5/B6/C5/F5/E6", "blanc"), "placement blanc complémentaire (haut) : accepté"); + check(!b.isValidMove("A1/A2/B1/E1/F1/D1", "blanc"), "placement blanc du même côté que noir : refusé"); + } + + /** Plateau vide « en jeu » (les deux placements faits), à remplir à la main. */ + static EscampeBoard inPlay() { + EscampeBoard b = new EscampeBoard(); + b.blackPlaced = true; + b.whitePlaced = true; + b.currentPlayer = "blanc"; + b.lastTileType = -1; + return b; + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/Solo.java b/dist/Puyaubreau_Russac/src/escampe/Solo.java new file mode 100644 index 0000000..ae4eba9 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/Solo.java @@ -0,0 +1,183 @@ +package escampe; + + +import java.util.Date; + +import javax.swing.JFrame; + +/** + * Petite Classe toute simple qui vous montre comment on peut lancer une partie sur deux IJoueurs... + * Cela vous servira a debugger facilement votre projet en conditions presque reelles de tournoi + * + * Attention, l'arbitre n'est pas lancé dessus, mais comme il s'agit de deux IJoueur à vous il n'est + * pas nécessaire de vérifier la validité des coups (bien entendu) + * + * Par contre, comme rien ne vérifie la fin de partie (pas d'arbitre), vos IJoueur devront renvoyer + * la chaine "xxxxx" pour dire que la partie est finie. + * + * Cette classe n'affiche rien : elle se contente de donner la main alternativement aux deux + * joueurs. + * + * 2008-2012 + */ +public class Solo { + private static IJoueur joueurBlanc; + private static IJoueur joueurNoir; + + // Ne pas modifier ces constantes, elles seront utilisees par l'arbitre + private final static int BLANC = -1; + private final static int NOIR = 1; + + private static int nbCoups = 0; + + /*// Par défaut, on a une applet graphique + static boolean APPLETGRAPHIQUE = true; + + // applet game viewer + static private Applet vueDuJeu; + static private JFrame f = null;*/ + + + /** + * Pour éviter de toujours envoyer des lignes de commandes, vous pouvez renvoyer automatiquement + * dans cette méthode votre joueur par défaut. Attention, il faut bien remplir le return new + * VOTREJOUEUR() pour que cela fonctionne la classe implantee renvoyee doit implanter + * l'interface IJoueur... + * + * @param s + * @return Ijoueur un joueur demande + */ + private static IJoueur getDefaultPlayer(String s) { + System.out.println(s + " : defaultPlayer"); + // vous devez faire qq chose comme return new MonMeilleurJoueur(); + // JoueurAleatoire vit dans escampeobf.jar (interface obfusquée) : on ne peut + // pas le référencer ici à la compilation. On renvoie donc notre propre joueur. + return new JoueurPuyaubreauRussac(); + } + + /** + * Juste pour rendre le tout plus generique, et vous donner une idee de comment le tournoi sera + * lance automatiquement, voici une methode permettant de charger une certaine classe implantant + * un IJoueur + * + * @param classeJoueur + * @param s + * @return la classe chargee dynamiquement + */ + private static IJoueur loadNamedPlayer(String classeJoueur, String s) { + IJoueur joueur; + System.out.print(s + " : Chargement de la classe joueur " + classeJoueur + "... "); + try { + Class cjoueur = Class.forName(classeJoueur); + joueur = (IJoueur) cjoueur.newInstance(); + } + catch (Exception e) { + System.out.println("Erreur de chargement"); + System.out.println(e); + return null; + } + System.out.println("Ok"); + return joueur; + } + + /** + * Boucle principale du jeu, en utilisant une version de l'arbitre identique a celle du tournoi + * L'arbitre sera le garant de la validite des coups, et de leur affichage standard pour la + * publication via le site web. + * + * @param joueurBlanc + * @param joueurNoir + */ + public static void gameLoop(IJoueur joueurBlanc, IJoueur joueurNoir) { + String coup; + boolean partieFinie = false; + IJoueur joueurCourant = joueurNoir; // Dans Escampe le joueur Noir commence + + while (!partieFinie) { + nbCoups++; + + System.out.println("\n*********\nOn demande à " + joueurCourant.binoName() + " de jouer..."); + long waitingTime1 = new Date().getTime(); + + coup = joueurCourant.choixMouvement(); + + long waitingTime2 = new Date().getTime(); + // On rajoute 1 pour eliminer les temps infinis + long waitingTime = waitingTime2 - waitingTime1 + 1; + System.out.println("Le joueur " + joueurCourant.binoName() + " a joué le coup " + coup + " en " + waitingTime + "s."); + try { + Thread.sleep(1); // Juste pour attendre un peu + } + catch (InterruptedException e) { + } + + if (coup.compareTo("xxxxx") == 0) + partieFinie = true; + else if (nbCoups == 2) { // Dans Escampe le joueur Blanc rejoue après avoir posé ses pièces + // On avertit le joueur Noir du placement des pièces + joueurNoir.mouvementEnnemi(coup); + } + else { + if (joueurCourant.getNumJoueur() == BLANC) + joueurCourant = joueurNoir; + else + joueurCourant = joueurBlanc; + + // On avertit le second joueur du coup calcule par le precedent + joueurCourant.mouvementEnnemi(coup); + // Ce sera ensuite à lui de jouer de nouveau en haut de la boucle + } + } + + System.out.println("Partie finie en " + nbCoups + " coups.\n"); + } + + /** + * On charge eventuellement les classes demandee pour les joueurs, et on lance la boucle + * principale + * + * @param args + */ + public static void main(String args[]) { + /*// S'il le faut, on initialise l'applet graphique + if (APPLETGRAPHIQUE) { + f = new JFrame("Vue du jeu"); + vueDuJeu = new Applet(); + vueDuJeu.buildUI(f.getContentPane()); + f.setSize(vueDuJeu.getDimension()); + vueDuJeu.setMyFrame(f); + f.setVisible(true); + vueDuJeu.addBoard("Départ ", plateau); + vueDuJeu.update(f.getGraphics(), f.getInsets()); + }*/ + + System.out.println("Partie solo ..."); + + if (args.length == 0) { // On a deux classes à charger + joueurBlanc = getDefaultPlayer("Blanc"); + joueurNoir = getDefaultPlayer("Noir"); + } + else if (args.length == 2) { // On a deux classes à charger + joueurBlanc = getDefaultPlayer("Blanc"); + joueurNoir = getDefaultPlayer("Noir"); + } + else if (args.length == 3) { + joueurBlanc = loadNamedPlayer(args[0], "Blanc"); + joueurNoir = loadNamedPlayer(args[0], "Noir"); + } + else if (args.length == 4) { + joueurBlanc = loadNamedPlayer(args[0], "Blanc"); + joueurNoir = loadNamedPlayer(args[1], "Noir"); + } + + joueurBlanc.initJoueur(BLANC); + System.out.println("Joueur Blanc : " + joueurBlanc.binoName()); + + joueurNoir.initJoueur(NOIR); + System.out.println("Joueur Noir : " + joueurNoir.binoName()); + + System.out.println("Initialisation des deux joueurs ok."); + + gameLoop(joueurBlanc, joueurNoir); + } +} diff --git a/dist/Puyaubreau_Russac/src/escampe/VerifMoves.java b/dist/Puyaubreau_Russac/src/escampe/VerifMoves.java new file mode 100644 index 0000000..83175b2 --- /dev/null +++ b/dist/Puyaubreau_Russac/src/escampe/VerifMoves.java @@ -0,0 +1,121 @@ +package escampe; + +import java.util.*; + +/** + * Cross-vérifie le chemin « int » du moteur contre le chemin « String » vérifié, + * sur des milliers de parties aléatoires : mêmes coups que possiblesMoves, makeInt + * équivalent à play, unmakeInt qui restaure l'état. Échoue à la moindre divergence. + */ +public class VerifMoves { + + static int mismatches = 0; + + public static void main(String[] args) { + int games = args.length > 0 ? Integer.parseInt(args[0]) : 3000; + Random rng = new Random(20260530L); + + long positions = 0, makeChecks = 0; + for (int g = 0; g < games; g++) { + EscampeBoard b = new EscampeBoard(); + // Placements aléatoires légaux. + int[] noirRows = rng.nextBoolean() ? new int[]{0, 1} : new int[]{4, 5}; + b.play(randomPlacement(b, "noir", noirRows, rng), "noir"); + int[] blancRows = (noirRows[0] == 0) ? new int[]{4, 5} : new int[]{0, 1}; + b.play(randomPlacement(b, "blanc", blancRows, rng), "blanc"); + + for (int ply = 0; ply < 200 && !b.gameOver(); ply++) { + positions++; + // (1) égalité des ensembles de coups, pour les deux couleurs. + checkMoveSets(b, true); + checkMoveSets(b, false); + + // Côté au trait : (2) make==play et (3) unmake, sur chaque coup. + boolean black = "noir".equals(b.currentPlayer); + String side = b.currentPlayer; + int[] moves = b.genMovesInt(black); + for (int m : moves) { + makeChecks++; + EscampeBoard after = b.copy(); + EscampeBoard.Undo u = after.makeInt(m); + EscampeBoard ref = b.copy(); + ref.play(b.moveToString(m), side); + if (!sameState(after, ref)) { + report(b, "make!=play pour " + b.moveToString(m) + " (" + side + ")"); + } + after.unmakeInt(u); + if (!sameState(after, b)) { + report(b, "unmake ne restaure pas pour " + b.moveToString(m)); + } + } + if (mismatches > 0) { dumpAndExit(); } + + // Avance la partie d'un coup aléatoire (chemin String vérifié). + if (moves.length == 1 && moves[0] == EscampeBoard.MOVE_PASS) { + b.play("E", side); + } else { + int m = moves[rng.nextInt(moves.length)]; + b.play(b.moveToString(m), side); + } + } + } + System.out.println("Parties : " + games); + System.out.println("Positions testées : " + positions); + System.out.println("make/unmake testés: " + makeChecks); + System.out.println(mismatches == 0 + ? "RÉSULTAT : OK — chemin int ≡ chemin String vérifié (0 divergence)." + : "RÉSULTAT : " + mismatches + " DIVERGENCES !"); + if (mismatches != 0) System.exit(1); + } + + /** Compare genMovesInt(black) et possiblesMoves(player) comme ensembles. */ + static void checkMoveSets(EscampeBoard b, boolean black) { + String player = black ? "noir" : "blanc"; + Set fromInt = new TreeSet<>(); + for (int m : b.genMovesInt(black)) fromInt.add(b.moveToString(m)); + Set fromStr = new TreeSet<>(Arrays.asList(b.possiblesMoves(player))); + if (!fromInt.equals(fromStr)) { + report(b, "ensembles différents pour " + player + + "\n int = " + fromInt + "\n str = " + fromStr); + } + } + + static boolean sameState(EscampeBoard a, EscampeBoard c) { + if (a.lastTileType != c.lastTileType) return false; + if (!a.currentPlayer.equals(c.currentPlayer)) return false; + for (int r = 0; r < 6; r++) + for (int col = 0; col < 6; col++) + if (a.board[r][col] != c.board[r][col]) return false; + return true; + } + + static void report(EscampeBoard b, String msg) { + if (mismatches < 5) { + System.out.println("DIVERGENCE : " + msg); + System.out.println(" lastTileType=" + b.lastTileType + " currentPlayer=" + b.currentPlayer); + } + mismatches++; + } + + static void dumpAndExit() { + System.out.println(">>> arrêt sur première divergence."); + System.exit(1); + } + + /** Placement aléatoire légal : 6 cases distinctes sur les 2 lignes, licorne en tête. */ + static String randomPlacement(EscampeBoard b, String player, int[] rows, Random rng) { + List cells = new ArrayList<>(); + for (int r : rows) for (int c = 0; c < 6; c++) cells.add(new int[]{r, c}); + for (int tries = 0; tries < 100; tries++) { + Collections.shuffle(cells, rng); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 6; i++) { + if (i > 0) sb.append('/'); + sb.append((char) ('A' + cells.get(i)[1])).append((char) ('1' + cells.get(i)[0])); + } + String pl = sb.toString(); + if (b.isValidMove(pl, player)) return pl; + } + throw new IllegalStateException("aucun placement légal trouvé"); + } +} diff --git a/dist/Puyaubreau_Russac_rapport.pdf b/dist/Puyaubreau_Russac_rapport.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b5a9f7c827937d23df7035ef20738cc016ab6bc GIT binary patch literal 691017 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

uUy9Gm|ebxrR&&J!8cA<`7 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 Gqx%1L7-^gU literal 0 HcmV?d00001 diff --git a/dist/mainClass b/dist/mainClass new file mode 100644 index 0000000..b03f3f0 --- /dev/null +++ b/dist/mainClass @@ -0,0 +1,3 @@ +jar:Puyaubreau_Russac.jar +clientClass:escampe.ClientJeu +mainClass:escampe.JoueurPuyaubreauRussac diff --git a/escampe_save.txt b/escampe_save.txt new file mode 100644 index 0000000..aa6fbdd --- /dev/null +++ b/escampe_save.txt @@ -0,0 +1,12 @@ +% Escampe - sauvegarde du plateau +% lastTileType: 1 +% currentPlayer: blanc +% blackPlaced: true +% whitePlaced: true +% blackRows: 4,5 +06 Nnn--- 06 +05 ----nn 05 +04 ------ 04 +03 ------ 03 +02 b--n-b 02 +01 -bb-b- 01 diff --git a/jouer-vs-IA.bat b/jouer-vs-IA.bat new file mode 100644 index 0000000..ec9c72b --- /dev/null +++ b/jouer-vs-IA.bat @@ -0,0 +1,29 @@ +@echo off +REM ========================================================================== +REM Escampe — jouer (humain) contre notre IA, en local, sur cette machine. +REM Ouvre 3 fenetres : serveur, IA, et VOUS. Jouez dans la fenetre "VOUS". +REM ========================================================================== + +REM Jar du serveur : dans le repo (lib\) en priorite, sinon dans Downloads. +set "SERVEUR=%~dp0lib\escampeobf.jar" +if not exist "%SERVEUR%" set "SERVEUR=C:\Users\Kerboul\Downloads\escampeobf.jar" +REM Jar de notre IA (genere par build.sh, chemin relatif a ce .bat) : +set "IA=%~dp0dist\Puyaubreau_Russac.jar" + +if not exist "%SERVEUR%" echo [ERREUR] Introuvable : %SERVEUR% & pause & exit /b 1 +if not exist "%IA%" echo [ERREUR] Introuvable : %IA% (lancez d'abord build.sh) & pause & exit /b 1 + +echo Lancement du serveur... +start "Escampe - Serveur" cmd /k java -cp "%SERVEUR%" escampe.ServeurJeu 1234 1 +timeout /t 2 >nul + +echo Lancement de l'IA (Puyaubreau_Russac)... +start "Escampe - IA" cmd /k java -cp "%IA%" escampe.ClientJeu escampe.JoueurPuyaubreauRussac localhost 1234 +timeout /t 1 >nul + +echo Lancement de votre client humain... +start "Escampe - VOUS" cmd /k java -cp "%SERVEUR%" escampe.ClientJeu escampe.JoueurHumain localhost 1234 + +echo. +echo C'est parti ! Jouez dans la fenetre "Escampe - VOUS". +echo (Le serveur ouvre aussi une fenetre graphique du plateau.) diff --git a/jouer-vs-pote.bat b/jouer-vs-pote.bat new file mode 100644 index 0000000..68adca2 --- /dev/null +++ b/jouer-vs-pote.bat @@ -0,0 +1,26 @@ +@echo off +REM ========================================================================== +REM Escampe — deux HUMAINS sur la MEME machine (3 fenetres). +REM Chaque joueur joue dans sa fenetre "Joueur 1" / "Joueur 2". +REM +REM Pour jouer a DISTANCE avec un pote (2 PC), voir MULTIJOUEUR.md : +REM l'hote lance le serveur, le pote se connecte sur l'IP de l'hote. +REM ========================================================================== + +set "SERVEUR=%~dp0lib\escampeobf.jar" +if not exist "%SERVEUR%" set "SERVEUR=C:\Users\Kerboul\Downloads\escampeobf.jar" +if not exist "%SERVEUR%" echo [ERREUR] Introuvable : %SERVEUR% & pause & exit /b 1 + +echo Lancement du serveur... +start "Escampe - Serveur" cmd /k java -cp "%SERVEUR%" escampe.ServeurJeu 1234 1 +timeout /t 2 >nul + +echo Lancement du Joueur 1... +start "Escampe - Joueur 1" cmd /k java -cp "%SERVEUR%" escampe.ClientJeu escampe.JoueurHumain localhost 1234 +timeout /t 1 >nul + +echo Lancement du Joueur 2... +start "Escampe - Joueur 2" cmd /k java -cp "%SERVEUR%" escampe.ClientJeu escampe.JoueurHumain localhost 1234 + +echo. +echo A vous deux ! Chacun joue dans sa fenetre. diff --git a/lib/escampeobf.jar b/lib/escampeobf.jar new file mode 100644 index 0000000000000000000000000000000000000000..4205313fdb64121eb449465309283f44c6b66abf GIT binary patch literal 22783 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 ~4n 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 RdlZ*<=}Yftnf_m|{s$um0?q&c literal 0 HcmV?d00001 diff --git a/main-polytech.pdf b/main-polytech.pdf new file mode 100644 index 0000000000000000000000000000000000000000..37069aecb128d6b52100170d014ccf20759189eb GIT binary patch literal 193925 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

gRBI!r!rJVPW?~pO`~` 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%0A&p^Uadn$C?$=2FWY`Q-enPvxrXL%Zxx7$ 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 KC7~pV^uGY*eRw+n literal 0 HcmV?d00001 diff --git a/partie1.md b/partie1.md new file mode 100644 index 0000000..0299fd6 --- /dev/null +++ b/partie1.md @@ -0,0 +1,9 @@ +# Analyse des caract eristiques du jeu +## Ethan PUYAUBREAU & Antonin RUSSAC + +1. + +2. Une configuration peut être considérée comme une fin de partie si : +- Il ne reste qu'un licorne sur le terrain + +3. \ No newline at end of file diff --git a/report/rapport.html b/report/rapport.html new file mode 100644 index 0000000..c3ecbfa --- /dev/null +++ b/report/rapport.html @@ -0,0 +1,447 @@ + + + + +Escampe — Rapport (version finale) + + + + +

+ + +

1. Présentation et règles

+ +

Escampe se joue sur un plateau de 36 cases (6×6). Chaque case porte un +liseré simple, double ou triple. Chaque joueur dispose +d'une licorne et de cinq paladins (couleur noire +ou blanche). Les lignes sont numérotées de 1 à 6, les colonnes de A à F. Le but +est de prendre la licorne adverse.

+ +

La règle caractéristique du jeu est une contrainte de liseré : +la pièce que l'on joue doit partir d'une case dont le liseré est identique +à celui de la case d'arrivée du coup adverse précédent. Le liseré de la case de +départ fixe en outre 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 — les paladins sont imprenables. Si un joueur ne peut rien jouer, il passe +son tour.

+ +

Le déroulement : Noir place ses six pièces sur les deux lignes d'un bord +(haut ou bas) ; Blanc fait de même sur le bord opposé ; Blanc joue le +premier coup. Ce rapport décrit nos choix de modélisation (parties 1 +et 2) puis la conception du joueur artificiel pour le tournoi (partie 3), +avec les mesures qui justifient nos choix.

+ + +

2. Analyse des caractéristiques du jeu

+ +

Nous reprenons ici les sept questions de la première partie, en les étayant +par l'implémentation finalement réalisée.

+ +

Q1 — Modélisation d'un état

+

Le plateau est un tableau int[6][6] : board[ligne][colonne] +avec ligne 0 = ligne 1 (bas) et colonne 0 = A. +Chaque case contient une constante de pièce (EMPTY, +WHITE_LICORNE, WHITE_PALADIN, BLACK_LICORNE, +BLACK_PALADIN). L'état complémentaire, indispensable à la règle, est +maintenu hors du plateau :

+
    +
  • lastTileType : liseré imposé au coup suivant (-1 = aucune contrainte) ;
  • +
  • currentPlayer : joueur au trait ;
  • +
  • blackPlaced, whitePlaced : fin des phases de placement ;
  • +
  • blackRows : le bord choisi par Noir (en déduit celui de Blanc).
  • +
+

Avantages. Accès O(1) à toute case ; copie immédiate de l'état +pour l'arbre de recherche ; sérialisation triviale ; surtout, un schéma +make/unmake sans aucune allocation (essentiel pour la vitesse, §6). +Inconvénient. La contrainte de liseré est un état séparé qu'il +faut maintenir explicitement à chaque coup ; nous l'encapsulons dans play.

+ +

La carte des liserés est une constante TILE_MAP reproduisant la +figure 4 de l'énoncé (ligne 1 en bas) :

+
       A  B  C  D  E  F
+ 6     3  2  2  1  3  2
+ 5     1  3  1  3  1  2
+ 4     2  1  3  2  3  1
+ 3     2  3  1  2  1  3
+ 2     3  1  3  1  3  2
+ 1     1  2  2  3  1  2
+

Fait vérifié : cette carte est identique, case pour case, +à celle utilisée en interne par l'arbitre du tournoi — nous l'avons extraite par +réflexion de la classe de jeu du serveur fourni. Elle est aussi cohérente avec +l'exemple tactique de la figure 6 de l'énoncé. Une carte divergente aurait +produit des coups jugés illégaux : ce point était critique.

+ +

Q2 — Détection de fin de partie

+

La partie est finie dès qu'une des deux licornes a disparu du plateau (seul cas +de fin, pas de match nul). La vérification est un simple balayage O(1) du plateau +(gameOver) ; le moteur, lui, détecte la capture directement au moment +où elle est jouée (§6).

+ +

Q3 — Sources de difficulté et facteur de branchement

+

Les principales sources de difficulté sont :

+
    +
  • la contrainte de liseré, qui limite fortement et variablement la mobilité ;
  • +
  • la dépendance entre tours : la case d'arrivée choisie détermine les pièces que l'adversaire pourra jouer ;
  • +
  • l'asymétrie du plateau (zones riches en liserés triples, donc mobiles, vs zones simples) ;
  • +
  • le risque de blocage d'une pièce, voire d'un joueur (pass forcé).
  • +
+

Facteur de branchement. En première partie nous avions estimé +une borne théorique de l'ordre de 120 (6 pièces × jusqu'à ~20 destinations +sur liseré triple). La mesure réelle est bien plus basse, car la contrainte de +liseré ne laisse jouables que les pièces du bon liseré. Sur 30 000 parties +aléatoires simulées (utilitaire escampe.Branching) :

+ + + + + +
SituationBranchement maximal observé
Coup contraint (un liseré imposé)45
Coup libre (1er coup ou après un pass, aucune contrainte)49
Branchement moyen (toutes positions)≈ 8,9
+

Le branchement effectif modeste (moyenne < 10) explique qu'une recherche +alpha-bêta atteigne des profondeurs élevées en quelques secondes (§6).

+ +

Q4 — Coups imparables

+

Il n'existe pas de coup « imparable » universel garanti dès le départ : la +contrainte de liseré peut toujours empêcher l'exécution d'une menace au mauvais +moment. En revanche, certaines configurations créent un zugzwang +partiel où l'adversaire ne peut éviter d'imposer le liseré qui nous +arrange — l'énoncé en donne l'exemple (figure 6 : le paladin blanc en C2 prend +la licorne en C1 dès que Noir est forcé d'imposer un liseré double). Construire de +tels pièges est un axe stratégique ; notre recherche les exploite implicitement +quand ils sont à portée d'horizon.

+ +

Q5 — Critères pour l'heuristique

+

Nous avions identifié cinq critères : distance à la licorne adverse, mobilité +différentielle, contrôle du liseré imposé, protection de sa propre licorne, et +avancée sur le plateau. L'heuristique finalement retenue (§7) s'appuie sur la +proximité des paladins à la licorne adverse (pression d'attaque) +et l'éloignement des paladins adverses de notre licorne +(sécurité) — les autres critères sont, en pratique, largement pris en charge par +la recherche elle-même.

+ +

Q6 — Stratégie selon la phase

+
    +
  • Début (placement) : irréversible et déterminant. On protège + la licorne et on garantit de toujours pouvoir jouer (§5).
  • +
  • Milieu : manœuvre pour construire des menaces sur la licorne + adverse tout en contrôlant le liseré imposé ; recherche de zugzwang partiel.
  • +
  • Fin : dès qu'une capture est à portée, le calcul tactique + (recherche profonde) prime.
  • +
+ +

Q7 — Majorant du nombre de coups et gestion du temps

+

Aucune pièce ne disparaît avant la capture finale ; une partie peut donc +théoriquement s'étirer. En bornant le branchement par tour et en comptant quelques +dizaines de tours, une borne raisonnable se situe vers 400–600 demi-coups. Pour +tenir la contrainte de temps (300 s par joueur et par partie), nous combinons +approfondissement itératif, élagage alpha-bêta et +un budget par coup dérivé du temps restant (§8).

+ + +

3. Modélisation : la classe EscampeBoard

+ +

EscampeBoard (≈ 860 lignes) implémente l'interface fournie +Partie1 : setFromFile / saveToFile, +isValidMove, possiblesMoves, play, +gameOver. Les conventions de l'arbitre sont respectées à la lettre :

+
    +
  • coup régulier "B1-D1" ;
  • +
  • placement "C6/A6/B5/D5/E6/F5" (licorne en tête, puis les 5 paladins) ;
  • +
  • pass "E".
  • +
+ +

Format de fichier. Six lignes de plateau (bas vers haut), +caractères N/n (licorne/paladin noir), B/b (blanc), +- (vide), chaque ligne encadrée d'un numéro ; toute autre ligne +commence par % (commentaire). Nous y ajoutons en commentaires l'état +hors-plateau (liseré courant, joueur, bord de Noir) afin que la sauvegarde soit +fidèlement rechargeable.

+ +

Génération des coups. Depuis une case, on énumère les +destinations par un parcours en profondeur (DFS) avec retour arrière : exactement +N pas (N = liseré de départ), cases intermédiaires vides, dernière case vide ou +occupée par la licorne adverse (capture). possiblesMoves filtre les +pièces sur le bon liseré et renvoie ["E"] si aucun coup n'est possible. +Une méthode main illustre placements, contrainte de liseré, pass, +round-trip fichier et capture.

+ +

Bug latent corrigé en partie 3 : un placement légal mais +disposé sur une seule ligne faisait planter le calcul du bord de Noir +(il supposait deux lignes distinctes). Le bord est désormais déduit de façon +robuste à partir de la ligne de la licorne.

+ + +

4. Intégration au tournoi : le protocole de l'arbitre

+ +

Le joueur escampe.JoueurPuyaubreauRussac implémente l'interface +fournie IJoueur et enveloppe un EscampeBoard tenu à jour +à chaque coup (le nôtre comme celui de l'adversaire, via mouvementEnnemi). +Trois points d'adaptation, dont deux vérifiés par analyse du jar de +l'arbitre car l'infrastructure fournie est obfusquée :

+
    +
  • Couleurs. IJoueur parle en entiers + (NOIR = 1, BLANC = -1) ; + EscampeBoard en chaînes "noir"/"blanc".
  • +
  • Pass = "E", et non "PASSE". Le + Javadoc d'IJoueur indique "PASSE", mais la classe de + jeu du serveur teste move.equals("E") (et "PASSE" + n'apparaît nulle part dans le jar). Envoyer "PASSE" aurait valu une + défaite sur coup illégal.
  • +
  • Carte des liserés identique à celle du serveur (cf. Q1).
  • +
+ +

Machine à états. Le placement et les coups transitent par le +même canal choixMouvement/mouvementEnnemi. Le premier +appel à choixMouvement renvoie donc un placement, les suivants +des coups ; la phase est détectée via blackPlaced/whitePlaced. +La séquence (déduite de la classe Solo fournie) est :

+
Noir  : choixMouvement(placement) → mvtEnnemi(placement Blanc)
+        → mvtEnnemi(1er coup Blanc) → choixMouvement(coup) → ...
+Blanc : mvtEnnemi(placement Noir) → choixMouvement(placement)
+        → choixMouvement(1er coup, Blanc rejoue) → mvtEnnemi(coup Noir) → ...
+

En appliquant chaque coup à l'EscampeBoard interne dans cet ordre, +le joueur au trait reste naturellement synchronisé avec l'arbitre.

+ +

Exécution. Trois processus (serveur + deux clients) :

+
java -cp escampeobf.jar        escampe.ServeurJeu 1234 1
+java -cp Puyaubreau_Russac.jar escampe.ClientJeu escampe.JoueurPuyaubreauRussac localhost 1234
+java -cp escampeobf.jar        escampe.ClientJeu escampe.JoueurAleatoire        localhost 1234
+ + +

5. Placement d'ouverture

+ +

Le placement est irréversible : nous l'avons conçu à partir d'un constat issu de +l'auto-jeu — une licorne mal placée peut se retrouver seule pièce jouable et +bloquée sur le liseré imposé, forçant des passes successifs qui livrent +l'initiative à l'adversaire. Trois principes y répondent :

+
    +
  1. Licorne dans un coin. Un coin n'a que deux cases voisines : + seulement deux cases d'où l'adversaire peut l'atteindre.
  2. +
  3. Murs. On occupe ces deux voisines par des paladins. La + licorne devient incapturable tant que les murs tiennent (impossible de + franchir le dernier pas sur une case occupée).
  4. +
  5. Couverture des liserés. Les trois paladins restants sont + placés sur des cases de liserés 1, 2 et 3 distincts : quel que + soit le liseré imposé, on dispose toujours d'une pièce mobile — jamais de pass + forcé, jamais besoin de déplacer un mur ou la licorne.
  6. +
+ +

Dispositions retenues (légalité et propriétés vérifiées) ; pour Blanc, on joue +le bord complémentaire de celui de Noir :

+
Bord bas  A1/A2/B1/E1/F1/C2          Bord haut  A6/A5/B6/C5/F5/E6
+   A B C D E F                          A B C D E F
+ 2 n . . . . .                        6 N b . . b .
+ 1 N n . n n n                        5 b . b . . b
+ (licorne A1, murs A2/B1,             (licorne A6, murs A5/B6,
+  mobiles E1·F1·C2 = liserés 1·2·3)    mobiles C5·F5·E6 = liserés 1·2·3)
+ + +

6. Moteur de décision

+ +

La décision repose sur un negamax avec élagage +alpha-bêta et approfondissement itératif (classe +Moteur). La recherche s'effectue sur une copie du plateau, +jamais sur l'état réel. Capturer la licorne adverse est traité comme un nœud +terminal de valeur WIN - ply (gagner vite plutôt que tard).

+ +

Astuces de performance.

+
    +
  • Coups encodés en entier (case = ligne×6+colonne, + coup = départ×36+arrivée) : aucune chaîne manipulée dans la boucle + chaude.
  • +
  • DFS sur masque de bits long : les 36 cases + tiennent dans un long ; les ensembles « visité » et « atteignable » + sont des masques — pas d'allocation de tableau par appel.
  • +
  • make/unmake sans allocation : un + petit jeton d'annulation suffit à défaire un coup, ce qui permet d'explorer des + millions de nœuds sans pression sur le ramasse-miettes.
  • +
  • Buffers de coups pré-alloués, un par profondeur.
  • +
  • Ordonnancement : tout coup capturant la licorne est essayé + en premier (coupure immédiate) ; le meilleur coup d'une itération est replacé en + tête à l'itération suivante.
  • +
+ +

Cohérence des deux chemins. Le chemin « entier » du moteur double +le chemin « chaîne » vérifié de EscampeBoard. Pour exclure toute +divergence silencieuse entre ces deux implémentations des règles, un test croisé +(VerifMoves, §9) vérifie qu'ils produisent exactement les mêmes coups +et les mêmes états — c'est la garantie qu'optimiser n'a pas changé les règles.

+ +

Performance mesurée. Environ 4 à 5 millions de +nœuds par seconde. En milieu de partie, l'approfondissement itératif +atteint une profondeur de 12 à 15 demi-coups en 6 s (davantage +dans les positions étroites). Les annonces de gain forcé du moteur se matérialisent +bien par une capture effective lors des parties de contrôle.

+ + +

7. Heuristique d'évaluation

+ +

Le matériel étant constant (paladins imprenables, licornes présentes jusqu'à la +capture), l'évaluation d'une position non terminale est purement positionnelle, +exprimée du point de vue du joueur au trait. Elle somme, à partir des distances de +Manhattan :

+
    +
  • Pression d'attaque : proximité de nos paladins à la licorne + adverse — un terme de somme (pression globale) et un terme de + minimum (l'attaquant le plus proche pèse davantage) ;
  • +
  • Sécurité : éloignement des paladins adverses de notre + licorne — mêmes deux termes, de signe opposé.
  • +
+

Concrètement, avec les poids retenus (somme = 2, minimum = 8) :

+
eval = 2·Σ(10−d_attaque) − 2·Σ(10−d_défense)
+       + 8·(10−min d_attaque) − 8·(10−min d_défense)
+ +

Heuristiques testées et choix. Le réglage s'est fait par +auto-jeu déterministe et matchs arbitrés contre le joueur aléatoire fourni. Nous +avons comparé : (a) somme seule — jeu trop diffus, le moteur tarde à +concentrer une menace ; (b) somme + minimum (retenue) — le terme minimum, +fortement pondéré, oriente nettement les paladins vers la licorne adverse et +améliore le taux de capture ; (c) ajout d'un terme défensif symétrique — conservé, +il évite d'exposer notre licorne sans nuire à l'attaque. Le fort poids du terme +minimum reflète que, dans ce jeu, c'est l'attaquant le plus avancé qui +décide d'une prise.

+ +

Limite assumée. Faute d'adversaires IA tiers disponibles avant le +tournoi, ces poids sont validés contre l'aléatoire et en auto-jeu, non contre +d'autres joueurs forts. Les tactiques de capture à court terme sont, elles, +gérées par la recherche, ce qui rend le joueur robuste même avec une évaluation +positionnelle simple.

+ + +

8. Gestion du temps réel

+ +

La limite de l'arbitre est de 300 s par joueur et par partie. Nous nous +fixons une enveloppe interne de 280 s (≈ 20 s de marge). +Le budget alloué à un coup est une fraction du temps restant, bornée :

+
tranche = clamp( temps_restant / 12 , 120 ms , 6000 ms )
+

La division par le temps restant décroît géométriquement : le budget ne peut +jamais être épuisé, même sur une partie très longue. Le plafond de +6 s évite de surinvestir en ouverture ; un plancher de 120 ms garantit un +minimum de réflexion ; un mode « panique » sécurise les toutes dernières secondes. +L'approfondissement itératif rend le meilleur coup déjà trouvé dès que la tranche +expire (le temps est contrôlé toutes les 2048 explorations de nœuds).

+ +

Mesures (auto-jeu équilibré, plein budget) : temps +maximal par coup ≈ 6,0 s (le plafond), cumul maximal +≈ 36 s par joueur sur une partie complète — très loin des 300 s. +Le réglage est volontairement conservateur et pourrait être augmenté sans risque.

+ + +

9. Performances et tests

+ +

Notre démarche de validation est empirique et redondante : chaque maillon est +contrôlé contre une référence indépendante.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestCe qu'il garantitRésultat
VerifMovesChemin entier (moteur) ≡ chemin chaîne (vérifié) : mêmes coups, même + make/unmake3 000 parties · 142 165 positions · 1 281 985 contrôles · 0 divergence
RulesTestRègles directes : pas = liseré, capture au dernier pas, paladins + imprenables, non-traversée, contrainte de liseré, pass forcé, fin, zones de placement21 / 21
Matchs arbitrés vs JoueurAleatoireProtocole de bout en bout (placement, liseré, pass, couleurs), légalité7 / 7 victoires, 0 coup illégal, 0 exception (les deux couleurs)
Démo IA vs IA (serveur réel)Partie complète moteur contre moteur, gestion des pass21 coups, fin propre par capture
Bench / BranchingVitesse, profondeur, facteur de branchement≈ 4–5 M nœuds/s ; profondeur 12–15 ; branchement max 49 / moyen ≈ 8,9
+ +

La séparation des rôles est délibérée : VerifMoves prouve que le +moteur ≡ EscampeBoard ; RulesTest prouve que +EscampeBoard respecte les règles ; les parties arbitrées prouvent que +le tout dialogue correctement avec l'arbitre réel. Aucun coup illégal n'a été +produit sur l'ensemble des parties jouées.

+ + +

10. Compilation, exécution et livrables

+ +

Le script build.sh produit dans dist/ les trois +livrables de la version finale :

+
Puyaubreau_Russac.jar    jar exécutable (Main-Class : escampe.ClientJeu)
+mainClass                jar:Puyaubreau_Russac.jar
+                         clientClass:escampe.ClientJeu
+                         mainClass:escampe.JoueurPuyaubreauRussac
+Puyaubreau_Russac.tgz    archive de rendu : répertoire Puyaubreau_Russac/
+                         contenant src/escampe/*.java + mainClass + le jar
+

Seules les classes de production entrent dans le jar (le joueur, le moteur, le +plateau et les classes fournies) ; les utilitaires de test (VerifMoves, +RulesTest, Bench, Branching) en sont exclus. +Le jeu en multijoueur (humain contre humain, ou humain contre notre IA, en local +ou à distance) est documenté à part dans MULTIJOUEUR.md.

+ + +

11. Sources et bibliographie

+
    +
  • Énoncé du cours (Université Paris-Saclay, Polytech APP5, + 2025-2026) : règles d'Escampe, carte des liserés (figure 4), interface + Partie1, et classes d'infrastructure fournies + (IJoueur, ClientJeu, Solo, + Applet, serveur).
  • +
  • Algorithmes classiques, à titre d'inspiration et sans copie + de code : élagage alpha-bêta (Knuth & Moore, An Analysis of Alpha-Beta + Pruning, 1975) ; minimax, negamax et approfondissement itératif + (Russell & Norvig, Artificial Intelligence: A Modern Approach) ; + techniques de représentation par masques de bits et d'ordonnancement de coups + (Chess Programming Wiki).
  • +
  • Déclaration. Aucun programme d'Escampe externe n'a été + recopié. La seule rétro-ingénierie effectuée porte sur le jar d'arbitre + fourni avec le sujet, dans le seul but de confirmer le protocole (pass + "E") et la carte des liserés — points sur lesquels la documentation + était ambiguë.
  • +
+ + +

12. Conclusion et difficultés rencontrées

+

Le joueur conduit une partie de façon autonome, dialogue correctement avec +l'arbitre, ne produit jamais de coup illégal et respecte très confortablement la +contrainte de temps. Les principales difficultés ont été :

+
    +
  • L'obfuscation du serveur : lever l'ambiguïté du pass + ("E" vs "PASSE") et confirmer la carte des liserés a + demandé une analyse du jar — étape décisive pour ne pas perdre sur coup illégal.
  • +
  • L'interface obfusquée vs nos sources : le joueur aléatoire du + jar n'implémente pas notre IJoueur ; les tests contre lui passent + donc par le réseau (seules des chaînes circulent).
  • +
  • L'avantage du trait : en miroir, Blanc (premier à jouer) + conserve l'initiative via la contrainte de liseré — propriété du jeu, indépendante + de la force du moteur.
  • +
  • Le réglage de l'heuristique sans adversaires : validé contre + l'aléatoire et en auto-jeu.
  • +
+

Pistes d'amélioration : table de transposition (hachage de +Zobrist), bibliothèque d'ouvertures de placement, terme de mobilité différentielle +dans l'évaluation, et recherche de quiescence sur les menaces de capture.

+ + + diff --git a/scripts/bench_vs_random.sh b/scripts/bench_vs_random.sh new file mode 100644 index 0000000..c9d3d8f --- /dev/null +++ b/scripts/bench_vs_random.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# Lot de parties arbitrées contre JoueurAleatoire, alternant les couleurs. +# Convention observée : le 1er connecté = JOUEUR 1 = Blanc, le 2e = JOUEUR 2 = Noir. +# Donc : moi en joueur A => je suis Blanc ; moi en joueur B => je suis Noir. +# +# usage: bench_vs_random.sh [N_par_couleur] [sliceMs] +set -u +ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT" +N="${1:-3}"; SLICE="${2:-300}" +JAR="$ROOT/lib/escampeobf.jar"; [ -f "$JAR" ] || JAR="C:/Users/Kerboul/Downloads/escampeobf.jar" +ME="escampe.JoueurPuyaubreauRussac"; RND="escampe.JoueurAleatoire" +LOG="$ROOT/scripts/logs" +port=1300; wins=0; losses=0; illegal=0; exc=0; games=0 + +play() { # $1 = ma couleur attendue (Blanc|Noir) + port=$((port+1)); games=$((games+1)) + if [ "$1" = "Blanc" ]; then + OPTS_A="-Descampe.maxSliceMs=$SLICE" OPTS_B="" \ + bash scripts/match.sh "$ME" out "$RND" "$JAR" "$port" 45 >/dev/null 2>&1 + else + OPTS_A="" OPTS_B="-Descampe.maxSliceMs=$SLICE" \ + bash scripts/match.sh "$RND" "$JAR" "$ME" out "$port" 45 >/dev/null 2>&1 + fi + local winner; winner=$(grep -aoE "FIN! (Blanc|Noir)" "$LOG/server.log" | tail -1 | awk '{print $2}') + local il; il=$(grep -ac "illegal" "$LOG/server.log"); il=${il//[^0-9]/}; il=${il:-0} + illegal=$((illegal + il)) + # exception côté MON client (A si Blanc, B si Noir) + local mylog; [ "$1" = "Blanc" ] && mylog="$LOG/playerA.log" || mylog="$LOG/playerB.log" + if grep -aqiE "exception|\bat escampe\." "$mylog" 2>/dev/null; then exc=$((exc+1)); fi + if [ "$winner" = "$1" ]; then wins=$((wins+1)); R=GAGNE; else losses=$((losses+1)); R=perdu; fi + echo " partie $games : moi=$1 vainqueur=$winner -> $R" +} + +echo "=== $N parties en Blanc, $N en Noir (slice ${SLICE}ms) ===" +for i in $(seq 1 "$N"); do play Blanc; done +for i in $(seq 1 "$N"); do play Noir; done +echo "-------------------------------------------" +echo "Victoires : $wins / $games" +echo "Défaites : $losses" +echo "Coups illégaux (arbitre) : $illegal" +echo "Exceptions dans mon client : $exc" diff --git a/scripts/match.sh b/scripts/match.sh new file mode 100644 index 0000000..2ea7427 --- /dev/null +++ b/scripts/match.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# Lance une partie ARBITRÉE entre deux IJoueur via le serveur réseau fourni. +# +# usage: match.sh [CLASS_A] [CP_A] [CLASS_B] [CP_B] [PORT] [TIMEOUT_S] +# +# Par défaut : notre joueur (depuis out/) contre escampe.JoueurAleatoire (jar). +# Le serveur (escampe.ServeurJeu) et les adversaires de référence vivent dans +# escampeobf.jar, fourni séparément (hors livrable). Seules des chaînes de +# caractères circulent sur le réseau : la divergence d'interface obfusquée +# entre le jar et nos sources est donc sans effet. +set -u + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +# Jar arbitre : dans le repo (lib/) en priorité, sinon dans Downloads. +JAR="$ROOT/lib/escampeobf.jar" +[ -f "$JAR" ] || JAR="C:/Users/Kerboul/Downloads/escampeobf.jar" +CLA="${1:-escampe.JoueurPuyaubreauRussac}"; CPA="${2:-out}" +CLB="${3:-escampe.JoueurAleatoire}"; CPB="${4:-$JAR}" +PORT="${5:-1234}"; TMO="${6:-60}" +OPTS_A="${OPTS_A:-}" # options JVM pour le joueur A (ex: -Descampe.debug=true) +OPTS_B="${OPTS_B:-}" + +LOG="$ROOT/scripts/logs"; mkdir -p "$LOG"; rm -f "$LOG"/*.log + +echo "Serveur : ServeurJeu $PORT 1" +echo "Joueur A : $CLA (cp=$CPA)" +echo "Joueur B : $CLB (cp=$CPB)" +echo "----------------------------------------" + +java -cp "$JAR" escampe.ServeurJeu "$PORT" 1 > "$LOG/server.log" 2>&1 & +SRV=$! +sleep 2 +java $OPTS_A -cp "$CPA" escampe.ClientJeu "$CLA" localhost "$PORT" > "$LOG/playerA.log" 2>&1 & +A=$! +sleep 1 +java $OPTS_B -cp "$CPB" escampe.ClientJeu "$CLB" localhost "$PORT" > "$LOG/playerB.log" 2>&1 & +B=$! + +# Chien de garde : tue tout après TMO secondes si la partie ne se termine pas. +( sleep "$TMO"; kill $A $B $SRV 2>/dev/null ) & WATCH=$! + +wait $A 2>/dev/null +wait $B 2>/dev/null +kill $SRV 2>/dev/null +kill $WATCH 2>/dev/null + +echo "=== SERVER ==="; cat "$LOG/server.log" +echo; echo "=== PLAYER A ($CLA) ==="; cat "$LOG/playerA.log" +echo; echo "=== PLAYER B ($CLB) ==="; cat "$LOG/playerB.log" diff --git a/src/EscampeBoard.java b/src/EscampeBoard.java new file mode 100644 index 0000000..0bb51a3 --- /dev/null +++ b/src/EscampeBoard.java @@ -0,0 +1,743 @@ +import java.io.*; +import java.util.*; + +/** + * Représentation d'un état du jeu Escampe. + * + *

Le plateau est un tableau {@code int[6][6]} : + *

    + *
  • {@code board[row][col]} avec row 0 = ligne 1 (bas), row 5 = ligne 6 (haut).
  • + *
  • col 0 = colonne A, col 5 = colonne F.
  • + *
+ * + *

Chaque case stocke l'une des constantes pièce : + * {@code EMPTY}, {@code WHITE_LICORNE}, {@code WHITE_PALADIN}, + * {@code BLACK_LICORNE}, {@code BLACK_PALADIN}. + * + *

L'état complémentaire mémorisé : + *

    + *
  • {@code lastTileType} : type de liseré (1, 2 ou 3) de la case d'arrivée du dernier coup ; + * -1 = pas de contrainte (premier coup ou après un pass).
  • + *
  • {@code currentPlayer} : "noir" ou "blanc", joueur dont c'est le tour.
  • + *
  • {@code blackPlaced}, {@code whitePlaced} : phases de placement terminées.
  • + *
  • {@code blackRows} : les deux lignes (index 0-5) choisies par noir lors du placement.
  • + *
+ * + *

Règles de déplacement : + *

    + *
  • Une pièce avance exactement N pas orthogonaux (N = liseré de la case de départ).
  • + *
  • Elle peut changer de direction à chaque pas.
  • + *
  • Elle ne peut pas passer par une case occupée ni repasser deux fois par la même case.
  • + *
  • Au dernier pas uniquement, elle peut se poser sur la licorne adverse (capture).
  • + *
+ */ +public class EscampeBoard implements Partie1 { + + // ── Constantes pièces ──────────────────────────────────────────────────── + + static final int EMPTY = 0; + static final int WHITE_LICORNE = 1; + static final int WHITE_PALADIN = 2; + static final int BLACK_LICORNE = 3; + static final int BLACK_PALADIN = 4; + + /** + * Carte des liserés : {@code TILE_MAP[row][col]}. + * row 0 = ligne 1 (bas), row 5 = ligne 6 (haut). col 0 = A, col 5 = F. + */ + static final int[][] TILE_MAP = { + {1, 2, 2, 3, 1, 2}, // ligne 1 + {3, 1, 3, 1, 3, 2}, // ligne 2 + {2, 3, 1, 2, 1, 3}, // ligne 3 + {2, 1, 3, 2, 3, 1}, // ligne 4 + {1, 3, 1, 3, 1, 2}, // ligne 5 + {3, 2, 2, 1, 3, 2}, // ligne 6 + }; + + // ── État ───────────────────────────────────────────────────────────────── + + int[][] board; + int lastTileType; // -1 = pas de contrainte + String currentPlayer; // "noir" ou "blanc" + boolean blackPlaced; + boolean whitePlaced; + int[] blackRows; // les 2 lignes (0-indexé) choisies par noir + + // ── Constructeur ───────────────────────────────────────────────────────── + + public EscampeBoard() { + board = new int[6][6]; + lastTileType = -1; + currentPlayer = "noir"; + blackPlaced = false; + whitePlaced = false; + blackRows = null; + } + + // ========================================================================= + // Fichier I/O + // ========================================================================= + + @Override + public void setFromFile(String fileName) { + board = new int[6][6]; + lastTileType = -1; + currentPlayer = "noir"; + blackPlaced = false; + whitePlaced = false; + blackRows = null; + + try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { + String line; + while ((line = br.readLine()) != null) { + line = line.trim(); + if (line.isEmpty()) continue; + + char first = line.charAt(0); + + // Commentaire / méta-donnée + if (first == '%') { + parseMeta(line); + continue; + } + + // Ligne de plateau : "1 XXXX 1" ou "01 XXXX 01" + int rowNum = -1; + int pos = 0; + if (first >= '1' && first <= '6') { + rowNum = first - '0'; + pos = 1; + } else if (first == '0' && line.length() > 1) { + char second = line.charAt(1); + if (second >= '1' && second <= '6') { + rowNum = second - '0'; + pos = 2; + } + } + if (rowNum != -1) { + int rowIdx = rowNum - 1; + while (pos < line.length() && line.charAt(pos) == ' ') pos++; + for (int c = 0; c < 6 && pos + c < line.length(); c++) { + board[rowIdx][c] = charToPiece(line.charAt(pos + c)); + } + } + } + } catch (IOException e) { + throw new RuntimeException("Erreur de lecture du fichier : " + fileName, e); + } + + // Si pas de méta-commentaires, on infère l'état à partir des pièces + inferState(); + } + + /** Parse une ligne de méta-commentaire "% clé: valeur". */ + private void parseMeta(String line) { + if (line.startsWith("% lastTileType:")) { + lastTileType = Integer.parseInt(line.substring(15).trim()); + } else if (line.startsWith("% currentPlayer:")) { + currentPlayer = line.substring(16).trim(); + } else if (line.startsWith("% blackPlaced:")) { + blackPlaced = Boolean.parseBoolean(line.substring(14).trim()); + } else if (line.startsWith("% whitePlaced:")) { + whitePlaced = Boolean.parseBoolean(line.substring(14).trim()); + } else if (line.startsWith("% blackRows:")) { + String s = line.substring(12).trim(); + String[] parts = s.split(","); + int r0 = Integer.parseInt(parts[0].trim()); + int r1 = Integer.parseInt(parts[1].trim()); + if (r0 >= 0) blackRows = new int[]{r0, r1}; + } + } + + /** + * Infère {@code blackPlaced}, {@code whitePlaced} et {@code blackRows} + * à partir des pièces présentes sur le plateau + * (utilisé quand le fichier ne contient pas de méta-commentaires). + */ + private void inferState() { + if (blackPlaced && whitePlaced) return; // méta déjà chargée + + int bc = 0, wc = 0; + Set bRowSet = new TreeSet<>(); + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + int p = board[r][c]; + if (p == BLACK_LICORNE || p == BLACK_PALADIN) { bc++; bRowSet.add(r); } + if (p == WHITE_LICORNE || p == WHITE_PALADIN) { wc++; } + } + } + if (!blackPlaced && bc == 6) { + blackPlaced = true; + if (bRowSet.size() == 2) { + Iterator it = bRowSet.iterator(); + blackRows = new int[]{it.next(), it.next()}; + } + } + if (!whitePlaced && wc == 6) { + whitePlaced = true; + } + } + + @Override + public void saveToFile(String fileName) { + try (PrintWriter pw = new PrintWriter(new FileWriter(fileName))) { + pw.println("% Escampe - sauvegarde du plateau"); + pw.println("% lastTileType: " + lastTileType); + pw.println("% currentPlayer: " + currentPlayer); + pw.println("% blackPlaced: " + blackPlaced); + pw.println("% whitePlaced: " + whitePlaced); + if (blackRows != null) { + pw.println("% blackRows: " + blackRows[0] + "," + blackRows[1]); + } else { + pw.println("% blackRows: -1,-1"); + } + // Lignes 6 à 1 (haut vers bas dans le fichier) + for (int rowIdx = 5; rowIdx >= 0; rowIdx--) { + int rowNum = rowIdx + 1; + StringBuilder sb = new StringBuilder(); + String rowLabel = String.format("%02d", rowNum); + sb.append(rowLabel).append(' '); + for (int c = 0; c < 6; c++) sb.append(pieceToChar(board[rowIdx][c])); + sb.append(' ').append(rowLabel); + pw.println(sb.toString()); + } + } catch (IOException e) { + throw new RuntimeException("Erreur d'écriture du fichier : " + fileName, e); + } + } + + // ========================================================================= + // Fin de partie + // ========================================================================= + + @Override + public boolean gameOver() { + if (!blackPlaced || !whitePlaced) return false; + boolean wl = false, bl = false; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + if (board[r][c] == WHITE_LICORNE) wl = true; + if (board[r][c] == BLACK_LICORNE) bl = true; + } + return !wl || !bl; + } + + // ========================================================================= + // Validation d'un coup + // ========================================================================= + + @Override + public boolean isValidMove(String move, String player) { + if (move == null || move.isEmpty()) return false; + if (!"noir".equals(player) && !"blanc".equals(player)) return false; + + if (move.contains("/")) return isValidPlacement(move, player); + if ("E".equals(move)) return isValidPass(player); + return isValidRegularMove(move, player); + } + + /** + * Valide un coup de placement "P1/P2/P3/P4/P5/P6" + * (P1 = licorne, P2-P6 = paladins). + */ + private boolean isValidPlacement(String move, String player) { + if ("noir".equals(player) && blackPlaced) return false; + if ("blanc".equals(player) && whitePlaced) return false; + if (!player.equals(currentPlayer)) return false; + if ("blanc".equals(player) && !blackPlaced) return false; + + String[] parts = move.split("/"); + if (parts.length != 6) return false; + + int[][] pos = new int[6][2]; + for (int i = 0; i < 6; i++) { + int[] cell = cellFromString(parts[i]); + if (cell == null) return false; + pos[i] = cell; + } + + // Zone autorisée + if ("noir".equals(player)) { + boolean allLow = true, allHigh = true; + for (int[] p : pos) { + if (p[0] != 0 && p[0] != 1) allLow = false; + if (p[0] != 4 && p[0] != 5) allHigh = false; + } + if (!allLow && !allHigh) return false; + } else { + if (blackRows == null) return false; + int[] wr = complementaryRows(blackRows); + for (int[] p : pos) { + if (p[0] != wr[0] && p[0] != wr[1]) return false; + } + } + + // Pas de doublons, cases vides + Set seen = new HashSet<>(); + for (int[] p : pos) { + if (!seen.add(p[0] + "," + p[1])) return false; + if (board[p[0]][p[1]] != EMPTY) return false; + } + return true; + } + + /** Valide un pass "E" : uniquement si aucun coup régulier n'est disponible. */ + private boolean isValidPass(String player) { + if (!player.equals(currentPlayer)) return false; + if (!blackPlaced || !whitePlaced) return false; + if (gameOver()) return false; + String[] m = possiblesMoves(player); + return m.length == 1 && "E".equals(m[0]); + } + + /** Valide un coup régulier "XX-YY". */ + private boolean isValidRegularMove(String move, String player) { + if (!blackPlaced || !whitePlaced) return false; + if (gameOver()) return false; + if (!player.equals(currentPlayer)) return false; + + int dash = move.indexOf('-'); + if (dash < 1 || dash >= move.length() - 1) return false; + + int[] from = cellFromString(move.substring(0, dash)); + int[] to = cellFromString(move.substring(dash + 1)); + if (from == null || to == null) return false; + + if (!belongsToPlayer(board[from[0]][from[1]], player)) return false; + if (lastTileType != -1 && TILE_MAP[from[0]][from[1]] != lastTileType) return false; + + return getReachableSquares(from[0], from[1], player).contains(to[0] + "," + to[1]); + } + + // ========================================================================= + // Génération de coups + // ========================================================================= + + @Override + public String[] possiblesMoves(String player) { + // Pendant le placement le nombre de combinaisons est trop grand pour être énuméré + if (!blackPlaced || !whitePlaced) return new String[0]; + if (gameOver()) return new String[0]; + + List moves = new ArrayList<>(); + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!belongsToPlayer(board[r][c], player)) continue; + if (lastTileType != -1 && TILE_MAP[r][c] != lastTileType) continue; + + for (String dest : getReachableSquares(r, c, player)) { + String[] d = dest.split(","); + moves.add(stringFromCell(r, c) + "-" + + stringFromCell(Integer.parseInt(d[0]), Integer.parseInt(d[1]))); + } + } + } + if (moves.isEmpty()) return new String[]{"E"}; + return moves.toArray(new String[0]); + } + + // ========================================================================= + // Jouer un coup + // ========================================================================= + + @Override + public void play(String move, String player) { + if (!isValidMove(move, player)) + throw new IllegalArgumentException("Coup invalide : '" + move + "' pour " + player); + + if (move.contains("/")) { + playPlacement(move, player); + } else if ("E".equals(move)) { + // Pass : supprime la contrainte de liseré (règle officielle) + lastTileType = -1; + currentPlayer = opponent(currentPlayer); + } else { + playRegular(move, player); + } + } + + private void playPlacement(String move, String player) { + String[] parts = move.split("/"); + int[][] pos = new int[6][2]; + for (int i = 0; i < 6; i++) pos[i] = cellFromString(parts[i]); + + int licorne = "noir".equals(player) ? BLACK_LICORNE : WHITE_LICORNE; + int paladin = "noir".equals(player) ? BLACK_PALADIN : WHITE_PALADIN; + + board[pos[0][0]][pos[0][1]] = licorne; + for (int i = 1; i < 6; i++) board[pos[i][0]][pos[i][1]] = paladin; + + if ("noir".equals(player)) { + blackPlaced = true; + // Enregistrer les deux lignes choisies par noir + Set rows = new TreeSet<>(); + for (int[] p : pos) rows.add(p[0]); + Iterator it = rows.iterator(); + blackRows = new int[]{it.next(), it.next()}; + currentPlayer = "blanc"; + } else { + whitePlaced = true; + lastTileType = -1; // pas de contrainte pour le premier coup régulier + currentPlayer = "blanc"; // blanc joue en premier + } + } + + private void playRegular(String move, String player) { + int dash = move.indexOf('-'); + int[] from = cellFromString(move.substring(0, dash)); + int[] to = cellFromString(move.substring(dash + 1)); + + board[to[0]][to[1]] = board[from[0]][from[1]]; // capture si case adverse + board[from[0]][from[1]] = EMPTY; + lastTileType = TILE_MAP[to[0]][to[1]]; + currentPlayer = opponent(currentPlayer); + } + + // ========================================================================= + // Algorithme de déplacement (DFS) + // ========================================================================= + + /** + * Calcule l'ensemble des cases atteignables depuis (fromRow, fromCol). + * Résultats encodés sous forme "row,col". + */ + Set getReachableSquares(int fromRow, int fromCol, String player) { + Set result = new HashSet<>(); + boolean[][] visited = new boolean[6][6]; + visited[fromRow][fromCol] = true; + dfs(fromRow, fromCol, TILE_MAP[fromRow][fromCol], player, visited, result); + return result; + } + + /** + * DFS récursif pour le calcul des destinations. + * + *

À chaque appel, la pièce se trouve en (row, col) et doit encore effectuer + * {@code stepsLeft} pas. Les cases déjà visitées dans le chemin courant sont + * marquées dans {@code visited} (réinitialisation après backtrack). + * + *

Règles : + *

    + *
  • Pas intermédiaires (stepsLeft > 1) : la case suivante doit être vide.
  • + *
  • Dernier pas (stepsLeft == 1) : la case peut être vide ou contenir + * la licorne adverse (capture).
  • + *
+ */ + private void dfs(int row, int col, int stepsLeft, + String player, boolean[][] visited, Set result) { + if (stepsLeft == 0) { + result.add(row + "," + col); + return; + } + // Directions orthogonales : haut, bas, gauche, droite + int[] dr = {-1, 1, 0, 0}; + int[] dc = { 0, 0, -1, 1}; + + for (int d = 0; d < 4; d++) { + int nr = row + dr[d]; + int nc = col + dc[d]; + if (nr < 0 || nr >= 6 || nc < 0 || nc >= 6) continue; + if (visited[nr][nc]) continue; + + int occ = board[nr][nc]; + boolean canStep; + if (stepsLeft > 1) { + // Pas intermédiaire : case obligatoirement vide + canStep = (occ == EMPTY); + } else { + // Dernier pas : vide OU capture de la licorne adverse + canStep = (occ == EMPTY) + || ("blanc".equals(player) && occ == BLACK_LICORNE) + || ("noir".equals(player) && occ == WHITE_LICORNE); + } + if (!canStep) continue; + + visited[nr][nc] = true; + dfs(nr, nc, stepsLeft - 1, player, visited, result); + visited[nr][nc] = false; // backtrack + } + } + + // ========================================================================= + // Méthodes utilitaires + // ========================================================================= + + private int charToPiece(char c) { + switch (c) { + case 'B': return WHITE_LICORNE; + case 'b': return WHITE_PALADIN; + case 'N': return BLACK_LICORNE; + case 'n': return BLACK_PALADIN; + default: return EMPTY; + } + } + + private char pieceToChar(int piece) { + switch (piece) { + case WHITE_LICORNE: return 'B'; + case WHITE_PALADIN: return 'b'; + case BLACK_LICORNE: return 'N'; + case BLACK_PALADIN: return 'n'; + default: return '-'; + } + } + + /** + * Convertit une chaîne "A1"-"F6" en coordonnées {row, col} (0-indexé). + * Retourne null si le format est invalide. + */ + int[] cellFromString(String s) { + if (s == null || s.length() < 2) return null; + s = s.trim(); + char colC = Character.toUpperCase(s.charAt(0)); + char rowC = s.charAt(1); + if (colC < 'A' || colC > 'F') return null; + if (rowC < '1' || rowC > '6') return null; + return new int[]{rowC - '1', colC - 'A'}; + } + + /** Convertit des coordonnées internes en notation "A1"-"F6". */ + String stringFromCell(int row, int col) { + return "" + (char)('A' + col) + (char)('1' + row); + } + + private boolean belongsToPlayer(int piece, String player) { + if ("blanc".equals(player)) return piece == WHITE_LICORNE || piece == WHITE_PALADIN; + if ("noir".equals(player)) return piece == BLACK_LICORNE || piece == BLACK_PALADIN; + return false; + } + + private String opponent(String player) { + return "blanc".equals(player) ? "noir" : "blanc"; + } + + /** + * Retourne les deux lignes (0-indexé) que doit utiliser blanc, + * sachant que noir a choisi {@code bRows}. + * Noir sur {0,1} → blanc sur {4,5} ; noir sur {4,5} → blanc sur {0,1}. + */ + private int[] complementaryRows(int[] bRows) { + return (bRows[0] == 0) ? new int[]{4, 5} : new int[]{0, 1}; + } + + // ========================================================================= + // Affichage + // ========================================================================= + + /** Affiche le plateau en console (ligne 6 en haut). */ + public void printBoard() { + System.out.println(" A B C D E F liseré"); + for (int r = 5; r >= 0; r--) { + System.out.print((r + 1) + " [ "); + for (int c = 0; c < 6; c++) System.out.print(pieceToChar(board[r][c]) + " "); + System.out.print("] " + (r + 1) + " |"); + for (int c = 0; c < 6; c++) System.out.print(" " + TILE_MAP[r][c]); + System.out.println(); + } + System.out.println("lastTileType=" + lastTileType + + " currentPlayer=" + currentPlayer + "\n"); + } + + // ========================================================================= + // Main de démonstration + // ========================================================================= + + public static void main(String[] args) throws IOException { + System.out.println("========================================="); + System.out.println(" Demo EscampeBoard "); + System.out.println("=========================================\n"); + + // ── Placements utilisés dans plusieurs scenarios ────────────────── + // Noir : lignes 5-6 (rows 4-5) — licorne en A6, paladins en B6 C6 D5 E5 F5 + final String NOIR_PL = "A6/B6/C6/D5/E5/F5"; + // Blanc : lignes 1-2 (rows 0-1) — licorne en D2, paladins en A1 B1 C1 E1 F2 + final String BLANC_PL = "D2/A1/B1/C1/E1/F2"; + + // ───────────────────────────────────────────────────────────────── + // 1. PHASE DE PLACEMENT + // ───────────────────────────────────────────────────────────────── + System.out.println("=== 1. PHASE DE PLACEMENT ==="); + EscampeBoard b = new EscampeBoard(); + + // Tentatives invalides avant le placement normal + System.out.println("Blanc tente de placer avant noir : " + + b.isValidMove(BLANC_PL, "blanc") + " (attendu: false)"); + System.out.println("Noir placement au milieu du plateau : " + + b.isValidMove("A3/B3/C3/D3/E3/F3", "noir") + " (attendu: false)"); + System.out.println("Noir placement sur deux bords diff. : " + + b.isValidMove("A1/B1/C1/D5/E5/F5", "noir") + " (attendu: false)"); + + // Placement valide de noir + System.out.println("\nNoir place : " + NOIR_PL + + " valid=" + b.isValidMove(NOIR_PL, "noir")); + b.play(NOIR_PL, "noir"); + System.out.println(" blackPlaced=" + b.blackPlaced + + " blackRows=[" + b.blackRows[0] + "," + b.blackRows[1] + "]" + + " currentPlayer=" + b.currentPlayer); + + // Placement valide de blanc + System.out.println("Blanc place : " + BLANC_PL + + " valid=" + b.isValidMove(BLANC_PL, "blanc")); + b.play(BLANC_PL, "blanc"); + System.out.println(" whitePlaced=" + b.whitePlaced + + " currentPlayer=" + b.currentPlayer); + + b.printBoard(); + + // ───────────────────────────────────────────────────────────────── + // 2. PHASE REGULIERE — contrainte de liseré + // ───────────────────────────────────────────────────────────────── + System.out.println("=== 2. PHASE REGULIERE ==="); + System.out.println("lastTileType=" + b.lastTileType + + " (pas de contrainte pour le premier coup)\n"); + + // Blanc joue en premier, pas de contrainte + String[] bMoves = b.possiblesMoves("blanc"); + System.out.println("Coups possibles pour blanc : " + bMoves.length + " coups"); + System.out.printf("Exemples : %s %s %s%n", + bMoves[0], + bMoves.length > 1 ? bMoves[1] : "", + bMoves.length > 2 ? bMoves[2] : ""); + + String m1 = bMoves[0]; + System.out.println("\nBlanc joue : " + m1 + " valid=" + b.isValidMove(m1, "blanc")); + b.play(m1, "blanc"); + System.out.println(" lastTileType=" + b.lastTileType + + " (liseré de la case d'arrivée = contrainte pour noir)" + + " currentPlayer=" + b.currentPlayer); + + // Tentative invalide : blanc rejoue hors de son tour + System.out.println("\nBlanc rejoue hors tour : " + + b.isValidMove(m1, "blanc") + " (attendu: false)"); + + // Tentative invalide : noir joue depuis un mauvais liseré + String badNoirMove = findMoveFromWrongTile(b, "noir"); + if (badNoirMove != null) { + System.out.println("Noir depuis mauvais liseré (" + badNoirMove + ") : " + + b.isValidMove(badNoirMove, "noir") + " (attendu: false)"); + } + + // Coup valide de noir + String[] nMoves = b.possiblesMoves("noir"); + System.out.println("\nCoups possibles pour noir (liseré " + b.lastTileType + ") : " + + nMoves.length + " coups"); + String m2 = nMoves[0]; + System.out.println("Noir joue : " + m2 + " valid=" + b.isValidMove(m2, "noir")); + b.play(m2, "noir"); + System.out.println(" lastTileType=" + b.lastTileType + + " currentPlayer=" + b.currentPlayer); + + // ───────────────────────────────────────────────────────────────── + // 3. ROUND-TRIP FICHIER + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 3. ROUND-TRIP FICHIER ==="); + b.saveToFile("escampe_save.txt"); + System.out.println("Sauvegardé dans escampe_save.txt"); + + EscampeBoard b2 = new EscampeBoard(); + b2.setFromFile("escampe_save.txt"); + System.out.println("Rechargé : lastTileType=" + b2.lastTileType + + " currentPlayer=" + b2.currentPlayer); + System.out.println("Plateaux identiques : " + Arrays.deepEquals(b.board, b2.board)); + System.out.println("lastTileType identique : " + (b.lastTileType == b2.lastTileType)); + System.out.println("currentPlayer identique : " + b.currentPlayer.equals(b2.currentPlayer)); + + // ───────────────────────────────────────────────────────────────── + // 4. SCENARIO DE PASS (E) + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 4. SCENARIO DE PASS ==="); + EscampeBoard bPass = new EscampeBoard(); + bPass.play(NOIR_PL, "noir"); + bPass.play(BLANC_PL, "blanc"); + + // Forcer une situation où noir n'a aucun coup : + // lastTileType=2, mais toutes les pièces noires sont sur liseré 1 ou 3. + for (int r = 0; r < 6; r++) Arrays.fill(bPass.board[r], EMPTY); + bPass.board[0][3] = WHITE_LICORNE; // D1 liseré=3 + bPass.board[0][0] = WHITE_PALADIN; // A1 liseré=1 + bPass.board[0][4] = WHITE_PALADIN; // E1 liseré=1 + bPass.board[5][0] = BLACK_LICORNE; // A6 liseré=3 + bPass.board[4][4] = BLACK_PALADIN; // E5 liseré=1 + bPass.board[4][2] = BLACK_PALADIN; // C5 liseré=1 + bPass.lastTileType = 2; // blanc vient de poser sur liseré 2 + bPass.currentPlayer = "noir"; + + System.out.println("Pièces noires sur liserés 1 et 3, contrainte = 2"); + System.out.println("possiblesMoves(noir) = " + + Arrays.toString(bPass.possiblesMoves("noir")) + " (attendu: [E])"); + System.out.println("isValidMove(E, noir) = " + + bPass.isValidMove("E", "noir") + " (attendu: true)"); + System.out.println("isValidMove(E, blanc) = " + + bPass.isValidMove("E", "blanc") + " (attendu: false, pas son tour)"); + + bPass.play("E", "noir"); + System.out.println("Après pass : lastTileType=" + bPass.lastTileType + + " (attendu: -1) currentPlayer=" + bPass.currentPlayer); + + // ───────────────────────────────────────────────────────────────── + // 5. CAPTURE ET FIN DE PARTIE + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 5. CAPTURE ET FIN DE PARTIE ==="); + EscampeBoard bCap = new EscampeBoard(); + bCap.play(NOIR_PL, "noir"); + bCap.play(BLANC_PL, "blanc"); + + // Mise en scène : + // - Blanc paladin en B1 (row=0,col=1 ; liseré=2) + // → 2 pas orthogonaux : B1 -> B2 -> B3 + // - Licorne noire en B3 (row=2,col=1) ; case B2 vide + // - lastTileType=2 → blanc peut jouer depuis B1 + for (int r = 0; r < 6; r++) Arrays.fill(bCap.board[r], EMPTY); + bCap.board[0][1] = WHITE_PALADIN; // B1 liseré=2 + bCap.board[0][3] = WHITE_LICORNE; // D1 (garde-fou : licorne blanche présente) + bCap.board[2][1] = BLACK_LICORNE; // B3 + bCap.board[5][5] = BLACK_PALADIN; // F6 (présence de pièce noire restante) + bCap.lastTileType = 2; + bCap.currentPlayer = "blanc"; + + System.out.println("Avant capture :"); + bCap.printBoard(); + System.out.println("gameOver = " + bCap.gameOver() + " (attendu: false)"); + + // Coup invalide : un pas seulement (B1->B2), pas assez de cases + System.out.println("Coup B1-B2 (1 pas, manque 1) : " + + bCap.isValidMove("B1-B2", "blanc") + " (attendu: false)"); + + // Coup valide : deux pas (B1->B2->B3), B2 vide, B3 = licorne noire + System.out.println("Coup B1-B3 (2 pas, capture) : " + + bCap.isValidMove("B1-B3", "blanc") + " (attendu: true)"); + bCap.play("B1-B3", "blanc"); + + System.out.println("Après capture :"); + bCap.printBoard(); + System.out.println("gameOver = " + bCap.gameOver() + " (attendu: true)"); + System.out.println("Blanc gagne !"); + + System.out.println("\n========================================="); + System.out.println(" Demo terminee "); + System.out.println("========================================="); + } + + /** + * Utilitaire pour la démo : trouve un coup depuis une pièce + * de {@code player} dont le liseré est différent de {@code lastTileType}. + * Retourne null si aucune telle pièce n'a de destinations. + */ + private static String findMoveFromWrongTile(EscampeBoard b, String player) { + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!b.belongsToPlayer(b.board[r][c], player)) continue; + if (TILE_MAP[r][c] == b.lastTileType) continue; + Set reach = b.getReachableSquares(r, c, player); + if (!reach.isEmpty()) { + String dest = reach.iterator().next(); + String[] parts = dest.split(","); + return b.stringFromCell(r, c) + "-" + + b.stringFromCell(Integer.parseInt(parts[0]), + Integer.parseInt(parts[1])); + } + } + } + return null; + } +} diff --git a/src/Partie1.java b/src/Partie1.java new file mode 100644 index 0000000..0b73fb5 --- /dev/null +++ b/src/Partie1.java @@ -0,0 +1,43 @@ +public interface Partie1 { + + /** + * Initialise un plateau à partir d'un fichier texte. + * @param fileName le nom du fichier à lire + */ + public void setFromFile(String fileName); + + /** + * Sauve la configuration de l'état courant (plateau et pièces restantes) dans un fichier. + * @param fileName le nom du fichier à sauvegarder + * Le format doit être compatible avec celui utilisé pour la lecture. + */ + public void saveToFile(String fileName); + + /** + * Indique si le coup {@code move} est valide pour le joueur {@code player} sur le plateau courant. + * @param move le coup à jouer, + * sous la forme "B1-D1" en général, + * sous la forme "C6/A6/B5/D5/E6/F5" pour le coup qui place les pièces, + * ou "E" pour passer son tour. + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public boolean isValidMove(String move, String player); + + /** + * Calcule les coups possibles pour le joueur {@code player} sur le plateau courant. + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public String[] possiblesMoves(String player); + + /** + * Modifie le plateau en jouant le coup {@code move} pour le joueur {@code player}. + * @param move le coup à jouer, sous la forme "C1-D1" ou "C6/A6/B5/D5/E6/F5" + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public void play(String move, String player); + + /** + * Retourne vrai lorsque le plateau correspond à une fin de partie. + */ + public boolean gameOver(); +} diff --git a/src/escampe/Applet.java b/src/escampe/Applet.java new file mode 100644 index 0000000..e5269b6 --- /dev/null +++ b/src/escampe/Applet.java @@ -0,0 +1,298 @@ +package escampe; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Insets; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; + +import javax.swing.DefaultListModel; +import javax.swing.JApplet; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.ListSelectionModel; + +public class Applet extends JApplet { + // Constantes pour les pièces + final private static int LICORNEBLANCHE = -2; + final private static int PALADINBLANC = -1; + final private static int LICORNENOIRE = 2; + final private static int PALADINNOIR = 1; + final private static int VIDE = 0; + + // Constantes pour le plateau + final private static int LARGEUR = 6; + final private static int HAUTEUR = 6; + final private static int[][] lisereCase = { + {1, 2, 2, 3, 1, 2}, + + {3, 1, 3, 1, 3, 2}, + + {2, 3, 1, 2, 1, 3}, + + {2, 1, 3, 2, 3, 1}, + + {1, 3, 1, 3, 1, 2}, + + {3, 2, 2, 1, 3, 2} + }; + + // Constantes pour les couleurs + Color DARK = new Color(155, 102, 95); + Color LIGHT = new Color(239, 210, 158); + Color BLACK = new Color(255, 255, 255); + Color WHITE = new Color(0, 0, 0); + Color HIGHLIGHT = new Color(255, 0, 0); + + // Constantes pour l'affichage + final private static int TAILLECASE = 100; + final private static int TAILLEPION = 60; + final private static Dimension FRAMEDIMENSION = new Dimension(TAILLECASE*6 + 260,TAILLECASE*6 + 60); + + private static final long serialVersionUID = 1L; + private JList brdList; + private Board displayBoard; + private JScrollPane scrollPane; + private DefaultListModel listModel; + private Frame myFrame; + + static int cpt = 0; + + // Autres constantes utiles pour l'affichage du plateau d'Escampe + int mpiece = (int) (TAILLECASE - TAILLEPION)/2; + + int epaisseurCercle = (int) (TAILLECASE*0.1); + int epaisseurInterCercle = (int) (TAILLECASE*0.05); + + int diametre1e = TAILLECASE; // extérieur 1er cercle + int diametre1i = diametre1e - epaisseurCercle; // intérieur 1er cercle + int diametre2e = diametre1i - epaisseurInterCercle; // extérieur 2eme cercle + int diametre2i = diametre2e - epaisseurCercle; // intérieur 2eme cercle + int diametre3e = diametre2i - epaisseurInterCercle; // extérieur 3eme cercle + int diametre3i = diametre3e - epaisseurCercle; // intérieur 3eme cercle + + int m1e = 0; + int m1i = (int) (TAILLECASE - diametre1i)/2; + int m2e = (int) (TAILLECASE - diametre2e)/2; + int m2i = (int) (TAILLECASE - diametre2i)/2; + int m3e = (int) (TAILLECASE - diametre3e)/2; + int m3i = (int) (TAILLECASE - diametre3i)/2; + + public void init() { + System.out.println("Initialisation BoardApplet" + cpt++); + buildUI(getContentPane()); + } + + public void buildUI(Container container) { + setBackground(Color.white); + + int[][] temp = new int[HAUTEUR][LARGEUR]; + + for (int i = 0; i < HAUTEUR; i++) + for (int j = 0; j < LARGEUR; j++) + temp[i][j] = VIDE; + + displayBoard = new Board("Coups :", temp); + + listModel = new DefaultListModel(); + listModel.addElement(displayBoard); + + brdList = new JList(listModel); + brdList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + brdList.setSelectedIndex(0); + scrollPane = new JScrollPane(brdList); + Dimension d = scrollPane.getSize(); + scrollPane.setPreferredSize(new Dimension(200, d.height)); + + brdList.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyPressed(KeyEvent e) { + brdList_keyPressed(e); + } + }); + brdList.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(MouseEvent e) { + brdList_mouseClicked(e); + } + }); + container.add(displayBoard, BorderLayout.CENTER); + container.add(scrollPane, BorderLayout.EAST); + } + + public void update(Graphics g, Insets in) { + Insets tempIn = in; + g.translate(tempIn.left, tempIn.top); + paint(g); + } + + public void paint(Graphics g) { + displayBoard.paint(g); + } + + public void addBoard(String move, int[][] board) { + Board tempEntrop = new Board(move, board); + listModel.addElement(new Board(move, board)); + brdList.setSelectedIndex(listModel.getSize() - 1); + brdList.ensureIndexIsVisible(listModel.getSize() - 1); + displayBoard = tempEntrop; + update(myFrame.getGraphics(), myFrame.getInsets()); + } + + public void setMyFrame(Frame f) { + myFrame = f; + } + + void brdList_keyPressed(KeyEvent e) { + int index = brdList.getSelectedIndex(); + if (e.getKeyCode() == KeyEvent.VK_UP && index > 0) + displayBoard = (Board) listModel.getElementAt(index - 1); + + if (e.getKeyCode() == KeyEvent.VK_DOWN && index < (listModel.getSize() - 1)) + displayBoard = (Board) listModel.getElementAt(index + 1); + + update(myFrame.getGraphics(), myFrame.getInsets()); + } + + void brdList_mouseClicked(MouseEvent e) { + displayBoard = (Board) listModel.getElementAt(brdList.getSelectedIndex()); + update(myFrame.getGraphics(), myFrame.getInsets()); + } + + public Dimension getDimension() { + return FRAMEDIMENSION; + } + + // Sous classe qui dessine le plateau de jeu + class Board extends JPanel { + + private static final long serialVersionUID = 1L; + private int[][] boardState; + String move; + int depCol = -1; + int depLin = -1; + int arvCol = -1; + int arvLin = -1; + + // The string will be the move details + // and the array the details of the board after the move has been applied. + public Board(String mv, int[][] bs) { + boardState = bs; + move = mv; + if (mv.length() == 5) { + String[] positions = mv.split("-"); + depCol = (int) positions[0].charAt(0) - (int) 'A'; + depLin = Integer.parseInt(positions[0].substring(1)) - 1; + arvCol = (int) positions[1].charAt(0) - (int) 'A'; + arvLin = Integer.parseInt(positions[1].substring(1)) - 1; + } + } + + public void drawBoard(Graphics g) { + // First draw the lines + // Board + int bx = 30; + int by = 30; + + // axis labels + g.setColor(new Color(0, 0, 0)); + for (int i = 1; i <= LARGEUR; i++) { + g.drawString("" + (char) ('A' + i - 1), bx + (int) ((i - 0.5)*TAILLECASE), 20); + } + for (int i = 1; i <= HAUTEUR; i++) { + g.drawString("" + i, 10, by + (int) ((i - 0.5)*TAILLECASE)); + } + + // Draw the circles + Color c1 = DARK; + Color c2 = LIGHT; + + int casex; + int casey; + int lisere; + + // fond des cases + g.setColor(c1); + g.fillRect(bx, by, LARGEUR*TAILLECASE, HAUTEUR*TAILLECASE); + + for (int j = 0; j < LARGEUR; j++) { + for (int i = 0; i < HAUTEUR; i++) { + casex = bx + j*TAILLECASE; + casey = by + i*TAILLECASE; + lisere = lisereCase[i][j]; + c2 = (i == depLin && j == depCol) ? HIGHLIGHT : LIGHT; + + // 1er cercle + g.setColor(c2); + g.fillOval(casex + m1e, casey + m1e , diametre1e, diametre1e); + g.setColor(c1); + g.fillOval(casex + m1i, casey + m1i, diametre1i, diametre1i); + if (lisere > 1) { + // 2eme cercle + g.setColor(c2); + g.fillOval(casex + m2e, casey + m2e, diametre2e, diametre2e); + g.setColor(c1); + g.fillOval(casex + m2i, casey + m2i, diametre2i, diametre2i); + if (lisere > 2) { + // 3eme cercle + g.setColor(c2); + g.fillOval(casex + m3e, casey + m3e, diametre3e, diametre3e); + g.setColor(c1); + g.fillOval(casex + m3i, casey + m3i, diametre3i, diametre3i); + } + } + } + } + + // Draw the pieces by referencing boardState array + c1 = BLACK; + c2 = WHITE; + + for (int j = 0; j < LARGEUR; j++) { + for (int i = 0; i < HAUTEUR; i++) { + casex = mpiece + bx + j*TAILLECASE; + casey = mpiece + by + i*TAILLECASE; + + switch (boardState[i][j]) { + case (LICORNEBLANCHE): + g.setColor(c1); + g.fillRect(casex, casey, TAILLEPION, TAILLEPION); + break; + case (PALADINBLANC): + g.setColor(c1); + g.fillOval(casex, casey, TAILLEPION, TAILLEPION); + break; + case (LICORNENOIRE): + g.setColor(c2); + g.fillRect(casex, casey, TAILLEPION, TAILLEPION); + break; + case (PALADINNOIR): + g.setColor(c2); + g.fillOval(casex, casey, TAILLEPION, TAILLEPION); + break; + } + + if (i == arvLin && j == arvCol) { + g.setColor(HIGHLIGHT); + g.fillOval(casex + 20, casey + 20, TAILLEPION - 40, TAILLEPION - 40); + } + } + } + } + + public void paint(Graphics g) { + drawBoard(g); + } + + public void update(Graphics g) { + drawBoard(g); + } + + public String toString() { + return move; + } + } +} diff --git a/src/escampe/Bench.java b/src/escampe/Bench.java new file mode 100644 index 0000000..c18fa58 --- /dev/null +++ b/src/escampe/Bench.java @@ -0,0 +1,30 @@ +package escampe; + +/** + * Banc d'essai du moteur : joue quelques coups depuis l'ouverture et affiche + * profondeur, score, nœuds et vitesse. java -cp out escampe.Bench [msParCoup] [nbCoups] + */ +public class Bench { + public static void main(String[] args) { + long budget = args.length > 0 ? Long.parseLong(args[0]) : 3000; + int coups = args.length > 1 ? Integer.parseInt(args[1]) : 8; + + EscampeBoard b = new EscampeBoard(); + b.play("C1/A1/E1/B2/C2/D2", "noir"); + b.play("C6/A6/E6/B5/C5/D5", "blanc"); + + Moteur mo = new Moteur(); + boolean black = false; // Blanc joue en premier après les placements + for (int i = 0; i < coups && !b.gameOver(); i++) { + long t0 = System.currentTimeMillis(); + int m = mo.bestMove(b, black, budget); + long dt = System.currentTimeMillis() - t0; + System.out.printf("coup %d (%s) : %-6s prof=%2d score=%7d noeuds=%9d %5dms %6.0f kN/s%n", + i, black ? "noir" : "blanc", b.moveToString(m), + mo.reachedDepth, mo.lastScore, mo.nodes, dt, mo.nodes / (dt + 1.0)); + b.play(b.moveToString(m), black ? "noir" : "blanc"); + black = !black; + } + System.out.println(b.gameOver() ? "Partie terminée (capture)." : "Fin du banc."); + } +} diff --git a/src/escampe/Branching.java b/src/escampe/Branching.java new file mode 100644 index 0000000..8e95811 --- /dev/null +++ b/src/escampe/Branching.java @@ -0,0 +1,58 @@ +package escampe; + +import java.util.*; + +/** + * Mesure empirique du facteur de branchement (question Q3 du rapport) : explore + * des parties aléatoires et relève le nombre maximal de coups légaux rencontré, + * en distinguant le cas contraint (un liseré imposé) du cas libre (1er coup ou + * après un pass, lastTileType = -1). java -cp out escampe.Branching [parties] + */ +public class Branching { + public static void main(String[] args) { + int games = args.length > 0 ? Integer.parseInt(args[0]) : 20000; + Random rng = new Random(1L); + + int maxConstrained = 0, maxFree = 0; + long sum = 0, count = 0; + + for (int g = 0; g < games; g++) { + EscampeBoard b = new EscampeBoard(); + int[] nr = rng.nextBoolean() ? new int[]{0, 1} : new int[]{4, 5}; + b.play(rndPlace(b, "noir", nr, rng), "noir"); + int[] wr = nr[0] == 0 ? new int[]{4, 5} : new int[]{0, 1}; + b.play(rndPlace(b, "blanc", wr, rng), "blanc"); + + for (int ply = 0; ply < 120 && !b.gameOver(); ply++) { + String side = b.currentPlayer; + String[] mv = b.possiblesMoves(side); + int n = (mv.length == 1 && mv[0].equals("E")) ? 0 : mv.length; + if (b.lastTileType == -1) maxFree = Math.max(maxFree, n); + else maxConstrained = Math.max(maxConstrained, n); + sum += n; count++; + + if (n == 0) { b.play("E", side); } + else { b.play(mv[rng.nextInt(mv.length)], side); } + } + } + System.out.println("Parties simulées : " + games); + System.out.println("Branchement max CONTRAINT : " + maxConstrained + " (un liseré imposé)"); + System.out.println("Branchement max LIBRE : " + maxFree + " (1er coup / après pass)"); + System.out.printf ("Branchement moyen : %.1f%n", (double) sum / count); + } + + static String rndPlace(EscampeBoard b, String pl, int[] rows, Random rng) { + List cells = new ArrayList<>(); + for (int r : rows) for (int c = 0; c < 6; c++) cells.add(new int[]{r, c}); + for (int t = 0; t < 50; t++) { + Collections.shuffle(cells, rng); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 6; i++) { + if (i > 0) sb.append('/'); + sb.append((char) ('A' + cells.get(i)[1])).append((char) ('1' + cells.get(i)[0])); + } + if (b.isValidMove(sb.toString(), pl)) return sb.toString(); + } + throw new IllegalStateException("placement"); + } +} diff --git a/src/escampe/ClientJeu.java b/src/escampe/ClientJeu.java new file mode 100644 index 0000000..2c9f4c7 --- /dev/null +++ b/src/escampe/ClientJeu.java @@ -0,0 +1,151 @@ +package escampe; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.StringTokenizer; + +/** + * Cette classe permet de charger dynamiquement une classe de joueur, qui doit obligatoirement + * implanter l'interface IJoueur. Vous lui donnez aussi en argument le nom de la machine distante + * (ou "localhost") sur laquelle le serveur de jeu est lancé, ainsi que le port sur lequel la + * machine écoute. + * + * Exemple: >java -cp . frontieres.ClientJeu frontieres.joueurProf localhost 1234 + * + * Le client s'occupe alors de tout en lançant les méthodes implantées de l'interface IJoueur. Toute + * la gestion réseau est donc cachée. + * + * @author L. Simon (Univ. Paris-Sud)- 2006-2008 + * @see IJoueur + */ +public class ClientJeu { + + // Mais pas lors de la conversation avec l'arbitre + // Vous pouvez changer cela en interne si vous le souhaitez + static final int BLANC = -1; + static final int NOIR = 1; + static final int VIDE = 0; + + /** + * @param args + * Dans l'ordre : NomClasseJoueur MachineServeur PortEcoute + */ + public static void main(String[] args) { + + if (args.length < 3) { + System.err.println("ClientJeu Usage: NomClasseJoueur MachineServeur PortEcoute"); + System.exit(1); + } + + // Le nom de la classe joueur à charger dynamiquement + String classeJoueur = args[0]; + // Le nom de la machine serveur a été donné en ligne de commande + String serverMachine = args[1]; + // Le numéro du port sur lequel on se connecte a aussi été donné + int portNum = Integer.parseInt(args[2]); + + System.out.println("Le client se connectera sur " + serverMachine + ":" + portNum); + + Socket clientSocket = null; + IJoueur joueur; + String msg, firstToken; + // permet d'analyser les chaînes de caractères lues + StringTokenizer msgTokenizer; + // C'est la couleur qui doit jouer le prochain coup + int couleurAJouer; + // C'est ma couleur (quand je joue) + int maCouleur; + + boolean jeuTermine = false; + + try { + // initialise la socket + clientSocket = new Socket(serverMachine, portNum); + PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); + BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + + // ***************************************************** + System.out.print("Chargement de la classe joueur " + classeJoueur + "... "); + Class cjoueur = Class.forName(classeJoueur); + joueur = (IJoueur) cjoueur.newInstance(); + System.out.println("Ok"); + // **************************************************** + + // Envoie de l'identifiant de votre quadrinome. + out.println(joueur.binoName()); + System.out.println("Mon nom de quadrinome envoyé est " + joueur.binoName()); + + // Récupère le message sous forme de chaine de caractères + msg = in.readLine(); + System.out.println(msg); + + // Lit le contenu du message, toutes les infos du message + msgTokenizer = new StringTokenizer(msg, " \n\0"); + if ((msgTokenizer.nextToken()).equals("Blanc")) { + System.out.println("Je suis Blanc, j'attends le mouvement de Noir."); + maCouleur = BLANC; + } + else { // doit etre égal à "Noir" + System.out.println("Je suis Noir, c'est à moi de jouer."); + maCouleur = NOIR; + } + + // permet d'initialiser votre joueur avec sa couleur + joueur.initJoueur(maCouleur); + + // boucle générale de jeu + do { + // Lire le msg à partir du serveur + msg = in.readLine(); + + msgTokenizer = new StringTokenizer(msg, " \n\0"); + firstToken = msgTokenizer.nextToken(); + + if (firstToken.equals("FIN!")) { + jeuTermine = true; + String theWinnerIs = msgTokenizer.nextToken(); + + if (theWinnerIs.equals("Blanc")) { + couleurAJouer = BLANC; + } + else { + if (theWinnerIs.equals("Noir")) + couleurAJouer = NOIR; + else + couleurAJouer = VIDE; + } + + if (couleurAJouer == maCouleur) + System.out.println("J'ai gagné!"); + + joueur.declareLeVainqueur(couleurAJouer); + } + else if (firstToken.equals("JOUEUR")) { + // On demande au joueur de jouer + if ((msgTokenizer.nextToken()).equals("Blanc")) { + couleurAJouer = BLANC; + } + else { + couleurAJouer = NOIR; + } + + if (couleurAJouer == maCouleur) { + // On appelle la classe du joueur pour choisir un mouvement + msg = joueur.choixMouvement(); + out.println(msg); + } + } + else if (firstToken.equals("MOUVEMENT")) { + // On lit ce que joue le joueur et on l'envoie à l'autre + joueur.mouvementEnnemi(msgTokenizer.nextToken()); + } + } while (!jeuTermine); + + } + catch (Exception e) { + System.out.println(e); + } + } +} diff --git a/src/escampe/EscampeBoard.java b/src/escampe/EscampeBoard.java new file mode 100644 index 0000000..b6b807d --- /dev/null +++ b/src/escampe/EscampeBoard.java @@ -0,0 +1,862 @@ +package escampe; + +import java.io.*; +import java.util.*; + +/** + * Représentation d'un état du jeu Escampe. + * + *

Le plateau est un tableau {@code int[6][6]} : + *

    + *
  • {@code board[row][col]} avec row 0 = ligne 1 (bas), row 5 = ligne 6 (haut).
  • + *
  • col 0 = colonne A, col 5 = colonne F.
  • + *
+ * + *

Chaque case stocke l'une des constantes pièce : + * {@code EMPTY}, {@code WHITE_LICORNE}, {@code WHITE_PALADIN}, + * {@code BLACK_LICORNE}, {@code BLACK_PALADIN}. + * + *

L'état complémentaire mémorisé : + *

    + *
  • {@code lastTileType} : type de liseré (1, 2 ou 3) de la case d'arrivée du dernier coup ; + * -1 = pas de contrainte (premier coup ou après un pass).
  • + *
  • {@code currentPlayer} : "noir" ou "blanc", joueur dont c'est le tour.
  • + *
  • {@code blackPlaced}, {@code whitePlaced} : phases de placement terminées.
  • + *
  • {@code blackRows} : les deux lignes (index 0-5) choisies par noir lors du placement.
  • + *
+ * + *

Règles de déplacement : + *

    + *
  • Une pièce avance exactement N pas orthogonaux (N = liseré de la case de départ).
  • + *
  • Elle peut changer de direction à chaque pas.
  • + *
  • Elle ne peut pas passer par une case occupée ni repasser deux fois par la même case.
  • + *
  • Au dernier pas uniquement, elle peut se poser sur la licorne adverse (capture).
  • + *
+ */ +public class EscampeBoard implements Partie1 { + + // ── Constantes pièces ──────────────────────────────────────────────────── + + static final int EMPTY = 0; + static final int WHITE_LICORNE = 1; + static final int WHITE_PALADIN = 2; + static final int BLACK_LICORNE = 3; + static final int BLACK_PALADIN = 4; + + /** + * Carte des liserés : {@code TILE_MAP[row][col]}. + * row 0 = ligne 1 (bas), row 5 = ligne 6 (haut). col 0 = A, col 5 = F. + */ + static final int[][] TILE_MAP = { + {1, 2, 2, 3, 1, 2}, // ligne 1 + {3, 1, 3, 1, 3, 2}, // ligne 2 + {2, 3, 1, 2, 1, 3}, // ligne 3 + {2, 1, 3, 2, 3, 1}, // ligne 4 + {1, 3, 1, 3, 1, 2}, // ligne 5 + {3, 2, 2, 1, 3, 2}, // ligne 6 + }; + + // ── État ───────────────────────────────────────────────────────────────── + + int[][] board; + int lastTileType; // -1 = pas de contrainte + String currentPlayer; // "noir" ou "blanc" + boolean blackPlaced; + boolean whitePlaced; + int[] blackRows; // les 2 lignes (0-indexé) choisies par noir + + // ── Constructeur ───────────────────────────────────────────────────────── + + public EscampeBoard() { + board = new int[6][6]; + lastTileType = -1; + currentPlayer = "noir"; + blackPlaced = false; + whitePlaced = false; + blackRows = null; + } + + // ========================================================================= + // Fichier I/O + // ========================================================================= + + @Override + public void setFromFile(String fileName) { + board = new int[6][6]; + lastTileType = -1; + currentPlayer = "noir"; + blackPlaced = false; + whitePlaced = false; + blackRows = null; + + try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { + String line; + while ((line = br.readLine()) != null) { + line = line.trim(); + if (line.isEmpty()) continue; + + char first = line.charAt(0); + + // Commentaire / méta-donnée + if (first == '%') { + parseMeta(line); + continue; + } + + // Ligne de plateau : "1 XXXX 1" ou "01 XXXX 01" + int rowNum = -1; + int pos = 0; + if (first >= '1' && first <= '6') { + rowNum = first - '0'; + pos = 1; + } else if (first == '0' && line.length() > 1) { + char second = line.charAt(1); + if (second >= '1' && second <= '6') { + rowNum = second - '0'; + pos = 2; + } + } + if (rowNum != -1) { + int rowIdx = rowNum - 1; + while (pos < line.length() && line.charAt(pos) == ' ') pos++; + for (int c = 0; c < 6 && pos + c < line.length(); c++) { + board[rowIdx][c] = charToPiece(line.charAt(pos + c)); + } + } + } + } catch (IOException e) { + throw new RuntimeException("Erreur de lecture du fichier : " + fileName, e); + } + + // Si pas de méta-commentaires, on infère l'état à partir des pièces + inferState(); + } + + /** Parse une ligne de méta-commentaire "% clé: valeur". */ + private void parseMeta(String line) { + if (line.startsWith("% lastTileType:")) { + lastTileType = Integer.parseInt(line.substring(15).trim()); + } else if (line.startsWith("% currentPlayer:")) { + currentPlayer = line.substring(16).trim(); + } else if (line.startsWith("% blackPlaced:")) { + blackPlaced = Boolean.parseBoolean(line.substring(14).trim()); + } else if (line.startsWith("% whitePlaced:")) { + whitePlaced = Boolean.parseBoolean(line.substring(14).trim()); + } else if (line.startsWith("% blackRows:")) { + String s = line.substring(12).trim(); + String[] parts = s.split(","); + int r0 = Integer.parseInt(parts[0].trim()); + int r1 = Integer.parseInt(parts[1].trim()); + if (r0 >= 0) blackRows = new int[]{r0, r1}; + } + } + + /** + * Infère {@code blackPlaced}, {@code whitePlaced} et {@code blackRows} + * à partir des pièces présentes sur le plateau + * (utilisé quand le fichier ne contient pas de méta-commentaires). + */ + private void inferState() { + if (blackPlaced && whitePlaced) return; // méta déjà chargée + + int bc = 0, wc = 0; + Set bRowSet = new TreeSet<>(); + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + int p = board[r][c]; + if (p == BLACK_LICORNE || p == BLACK_PALADIN) { bc++; bRowSet.add(r); } + if (p == WHITE_LICORNE || p == WHITE_PALADIN) { wc++; } + } + } + if (!blackPlaced && bc == 6) { + blackPlaced = true; + // Bord de noir déduit d'une ligne occupée (robuste à 1 seule ligne). + int anyRow = bRowSet.iterator().next(); + blackRows = (anyRow <= 1) ? new int[]{0, 1} : new int[]{4, 5}; + } + if (!whitePlaced && wc == 6) { + whitePlaced = true; + } + } + + @Override + public void saveToFile(String fileName) { + try (PrintWriter pw = new PrintWriter(new FileWriter(fileName))) { + pw.println("% Escampe - sauvegarde du plateau"); + pw.println("% lastTileType: " + lastTileType); + pw.println("% currentPlayer: " + currentPlayer); + pw.println("% blackPlaced: " + blackPlaced); + pw.println("% whitePlaced: " + whitePlaced); + if (blackRows != null) { + pw.println("% blackRows: " + blackRows[0] + "," + blackRows[1]); + } else { + pw.println("% blackRows: -1,-1"); + } + // Lignes 6 à 1 (haut vers bas dans le fichier) + for (int rowIdx = 5; rowIdx >= 0; rowIdx--) { + int rowNum = rowIdx + 1; + StringBuilder sb = new StringBuilder(); + String rowLabel = String.format("%02d", rowNum); + sb.append(rowLabel).append(' '); + for (int c = 0; c < 6; c++) sb.append(pieceToChar(board[rowIdx][c])); + sb.append(' ').append(rowLabel); + pw.println(sb.toString()); + } + } catch (IOException e) { + throw new RuntimeException("Erreur d'écriture du fichier : " + fileName, e); + } + } + + // ========================================================================= + // Fin de partie + // ========================================================================= + + @Override + public boolean gameOver() { + if (!blackPlaced || !whitePlaced) return false; + boolean wl = false, bl = false; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + if (board[r][c] == WHITE_LICORNE) wl = true; + if (board[r][c] == BLACK_LICORNE) bl = true; + } + return !wl || !bl; + } + + // ========================================================================= + // Validation d'un coup + // ========================================================================= + + @Override + public boolean isValidMove(String move, String player) { + if (move == null || move.isEmpty()) return false; + if (!"noir".equals(player) && !"blanc".equals(player)) return false; + + if (move.contains("/")) return isValidPlacement(move, player); + if ("E".equals(move)) return isValidPass(player); + return isValidRegularMove(move, player); + } + + /** + * Valide un coup de placement "P1/P2/P3/P4/P5/P6" + * (P1 = licorne, P2-P6 = paladins). + */ + private boolean isValidPlacement(String move, String player) { + if ("noir".equals(player) && blackPlaced) return false; + if ("blanc".equals(player) && whitePlaced) return false; + if (!player.equals(currentPlayer)) return false; + if ("blanc".equals(player) && !blackPlaced) return false; + + String[] parts = move.split("/"); + if (parts.length != 6) return false; + + int[][] pos = new int[6][2]; + for (int i = 0; i < 6; i++) { + int[] cell = cellFromString(parts[i]); + if (cell == null) return false; + pos[i] = cell; + } + + // Zone autorisée + if ("noir".equals(player)) { + boolean allLow = true, allHigh = true; + for (int[] p : pos) { + if (p[0] != 0 && p[0] != 1) allLow = false; + if (p[0] != 4 && p[0] != 5) allHigh = false; + } + if (!allLow && !allHigh) return false; + } else { + if (blackRows == null) return false; + int[] wr = complementaryRows(blackRows); + for (int[] p : pos) { + if (p[0] != wr[0] && p[0] != wr[1]) return false; + } + } + + // Pas de doublons, cases vides + Set seen = new HashSet<>(); + for (int[] p : pos) { + if (!seen.add(p[0] + "," + p[1])) return false; + if (board[p[0]][p[1]] != EMPTY) return false; + } + return true; + } + + /** Valide un pass "E" : uniquement si aucun coup régulier n'est disponible. */ + private boolean isValidPass(String player) { + if (!player.equals(currentPlayer)) return false; + if (!blackPlaced || !whitePlaced) return false; + if (gameOver()) return false; + String[] m = possiblesMoves(player); + return m.length == 1 && "E".equals(m[0]); + } + + /** Valide un coup régulier "XX-YY". */ + private boolean isValidRegularMove(String move, String player) { + if (!blackPlaced || !whitePlaced) return false; + if (gameOver()) return false; + if (!player.equals(currentPlayer)) return false; + + int dash = move.indexOf('-'); + if (dash < 1 || dash >= move.length() - 1) return false; + + int[] from = cellFromString(move.substring(0, dash)); + int[] to = cellFromString(move.substring(dash + 1)); + if (from == null || to == null) return false; + + if (!belongsToPlayer(board[from[0]][from[1]], player)) return false; + if (lastTileType != -1 && TILE_MAP[from[0]][from[1]] != lastTileType) return false; + + return getReachableSquares(from[0], from[1], player).contains(to[0] + "," + to[1]); + } + + // ========================================================================= + // Génération de coups + // ========================================================================= + + @Override + public String[] possiblesMoves(String player) { + // Pendant le placement le nombre de combinaisons est trop grand pour être énuméré + if (!blackPlaced || !whitePlaced) return new String[0]; + if (gameOver()) return new String[0]; + + List moves = new ArrayList<>(); + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!belongsToPlayer(board[r][c], player)) continue; + if (lastTileType != -1 && TILE_MAP[r][c] != lastTileType) continue; + + for (String dest : getReachableSquares(r, c, player)) { + String[] d = dest.split(","); + moves.add(stringFromCell(r, c) + "-" + + stringFromCell(Integer.parseInt(d[0]), Integer.parseInt(d[1]))); + } + } + } + if (moves.isEmpty()) return new String[]{"E"}; + return moves.toArray(new String[0]); + } + + // ========================================================================= + // Jouer un coup + // ========================================================================= + + @Override + public void play(String move, String player) { + if (!isValidMove(move, player)) + throw new IllegalArgumentException("Coup invalide : '" + move + "' pour " + player); + + if (move.contains("/")) { + playPlacement(move, player); + } else if ("E".equals(move)) { + // Pass : supprime la contrainte de liseré (règle officielle) + lastTileType = -1; + currentPlayer = opponent(currentPlayer); + } else { + playRegular(move, player); + } + } + + private void playPlacement(String move, String player) { + String[] parts = move.split("/"); + int[][] pos = new int[6][2]; + for (int i = 0; i < 6; i++) pos[i] = cellFromString(parts[i]); + + int licorne = "noir".equals(player) ? BLACK_LICORNE : WHITE_LICORNE; + int paladin = "noir".equals(player) ? BLACK_PALADIN : WHITE_PALADIN; + + board[pos[0][0]][pos[0][1]] = licorne; + for (int i = 1; i < 6; i++) board[pos[i][0]][pos[i][1]] = paladin; + + if ("noir".equals(player)) { + blackPlaced = true; + // Bord de noir (bas {0,1} ou haut {4,5}), déduit de la ligne de la licorne. + blackRows = (pos[0][0] <= 1) ? new int[]{0, 1} : new int[]{4, 5}; + currentPlayer = "blanc"; + } else { + whitePlaced = true; + lastTileType = -1; // pas de contrainte pour le premier coup régulier + currentPlayer = "blanc"; // blanc joue en premier + } + } + + private void playRegular(String move, String player) { + int dash = move.indexOf('-'); + int[] from = cellFromString(move.substring(0, dash)); + int[] to = cellFromString(move.substring(dash + 1)); + + board[to[0]][to[1]] = board[from[0]][from[1]]; // capture si case adverse + board[from[0]][from[1]] = EMPTY; + lastTileType = TILE_MAP[to[0]][to[1]]; + currentPlayer = opponent(currentPlayer); + } + + // ========================================================================= + // Algorithme de déplacement (DFS) + // ========================================================================= + + /** + * Calcule l'ensemble des cases atteignables depuis (fromRow, fromCol). + * Résultats encodés sous forme "row,col". + */ + Set getReachableSquares(int fromRow, int fromCol, String player) { + Set result = new HashSet<>(); + boolean[][] visited = new boolean[6][6]; + visited[fromRow][fromCol] = true; + dfs(fromRow, fromCol, TILE_MAP[fromRow][fromCol], player, visited, result); + return result; + } + + /** + * DFS récursif pour le calcul des destinations. + * + *

À chaque appel, la pièce se trouve en (row, col) et doit encore effectuer + * {@code stepsLeft} pas. Les cases déjà visitées dans le chemin courant sont + * marquées dans {@code visited} (réinitialisation après backtrack). + * + *

Règles : + *

    + *
  • Pas intermédiaires (stepsLeft > 1) : la case suivante doit être vide.
  • + *
  • Dernier pas (stepsLeft == 1) : la case peut être vide ou contenir + * la licorne adverse (capture).
  • + *
+ */ + private void dfs(int row, int col, int stepsLeft, + String player, boolean[][] visited, Set result) { + if (stepsLeft == 0) { + result.add(row + "," + col); + return; + } + // Directions orthogonales : haut, bas, gauche, droite + int[] dr = {-1, 1, 0, 0}; + int[] dc = { 0, 0, -1, 1}; + + for (int d = 0; d < 4; d++) { + int nr = row + dr[d]; + int nc = col + dc[d]; + if (nr < 0 || nr >= 6 || nc < 0 || nc >= 6) continue; + if (visited[nr][nc]) continue; + + int occ = board[nr][nc]; + boolean canStep; + if (stepsLeft > 1) { + // Pas intermédiaire : case obligatoirement vide + canStep = (occ == EMPTY); + } else { + // Dernier pas : vide OU capture de la licorne adverse + canStep = (occ == EMPTY) + || ("blanc".equals(player) && occ == BLACK_LICORNE) + || ("noir".equals(player) && occ == WHITE_LICORNE); + } + if (!canStep) continue; + + visited[nr][nc] = true; + dfs(nr, nc, stepsLeft - 1, player, visited, result); + visited[nr][nc] = false; // backtrack + } + } + + // Chemin de génération « int » pour le moteur, sans allocation de String. + // Case = row*6+col (0..35) ; coup = from*36+to ; pass = MOVE_PASS ; black = noir. + // Équivalent au chemin String vérifié (contrôlé par VerifMoves). + + static final int MOVE_PASS = -1; + + record Undo(int move, int captured, int savedLastTile, String savedPlayer) {} + + /** Copie profonde de l'état (le moteur cherche sur une copie, jamais sur le live). */ + EscampeBoard copy() { + EscampeBoard b = new EscampeBoard(); + for (int r = 0; r < 6; r++) b.board[r] = board[r].clone(); + b.lastTileType = lastTileType; + b.currentPlayer = currentPlayer; + b.blackPlaced = blackPlaced; + b.whitePlaced = whitePlaced; + b.blackRows = (blackRows == null) ? null : blackRows.clone(); + return b; + } + + private boolean isSide(int piece, boolean black) { + return black ? (piece == BLACK_LICORNE || piece == BLACK_PALADIN) + : (piece == WHITE_LICORNE || piece == WHITE_PALADIN); + } + + /** Version allouante de {@link #genMovesIntInto}, pour les tests. */ + int[] genMovesInt(boolean black) { + int[] buf = new int[256]; + int n = genMovesIntInto(black, buf); + if (n == 0) return new int[0]; + return java.util.Arrays.copyOf(buf, n); + } + + /** + * Écrit les coups de la phase régulière de {@code black} dans {@code buf} et + * renvoie leur nombre : 0 hors phase régulière, ou {@code {MOVE_PASS}} si bloqué. + */ + int genMovesIntInto(boolean black, int[] buf) { + if (!blackPlaced || !whitePlaced) return 0; + if (gameOver()) return 0; + int n = 0; + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!isSide(board[r][c], black)) continue; + if (lastTileType != -1 && TILE_MAP[r][c] != lastTileType) continue; + int from = r * 6 + c; + long reach = dfsMask(r, c, TILE_MAP[r][c], black, 1L << from, 0L); + while (reach != 0L) { + int t = Long.numberOfTrailingZeros(reach); + reach &= reach - 1; + buf[n++] = from * 36 + t; + } + } + } + if (n == 0) { buf[0] = MOVE_PASS; return 1; } + return n; + } + + /** DFS sur masque de bits (équivalent de {@link #dfs}) : {@code visited}/{@code reach} = ensembles de cases. */ + private long dfsMask(int row, int col, int steps, boolean black, long visited, long reach) { + if (steps == 0) return reach | (1L << (row * 6 + col)); + final int[] dr = {-1, 1, 0, 0}; + final int[] dc = { 0, 0, -1, 1}; + for (int d = 0; d < 4; d++) { + int nr = row + dr[d], nc = col + dc[d]; + if (nr < 0 || nr >= 6 || nc < 0 || nc >= 6) continue; + int ncell = nr * 6 + nc; + if ((visited & (1L << ncell)) != 0) continue; + int occ = board[nr][nc]; + boolean canStep; + if (steps > 1) { + canStep = (occ == EMPTY); + } else { + canStep = (occ == EMPTY) + || (black && occ == WHITE_LICORNE) + || (!black && occ == BLACK_LICORNE); + } + if (!canStep) continue; + reach = dfsMask(nr, nc, steps - 1, black, visited | (1L << ncell), reach); + } + return reach; + } + + /** Applique un coup int (régulier ou {@code MOVE_PASS}) et renvoie le jeton d'annulation. */ + Undo makeInt(int move) { + int savedLast = lastTileType; + String savedPlayer = currentPlayer; + if (move == MOVE_PASS) { + lastTileType = -1; + currentPlayer = opponent(currentPlayer); + return new Undo(move, EMPTY, savedLast, savedPlayer); + } + int from = move / 36, to = move % 36; + int fr = from / 6, fc = from % 6, tr = to / 6, tc = to % 6; + int captured = board[tr][tc]; + board[tr][tc] = board[fr][fc]; + board[fr][fc] = EMPTY; + lastTileType = TILE_MAP[tr][tc]; + currentPlayer = opponent(currentPlayer); + return new Undo(move, captured, savedLast, savedPlayer); + } + + /** Annule l'effet de {@link #makeInt}. */ + void unmakeInt(Undo u) { + if (u.move() != MOVE_PASS) { + int from = u.move() / 36, to = u.move() % 36; + int fr = from / 6, fc = from % 6, tr = to / 6, tc = to % 6; + board[fr][fc] = board[tr][tc]; + board[tr][tc] = u.captured(); + } + lastTileType = u.savedLastTile(); + currentPlayer = u.savedPlayer(); + } + + /** Code int → notation "A1-B2" (ou "E" pour le pass). */ + String moveToString(int move) { + if (move == MOVE_PASS) return "E"; + int from = move / 36, to = move % 36; + return stringFromCell(from / 6, from % 6) + "-" + stringFromCell(to / 6, to % 6); + } + + // ========================================================================= + // Méthodes utilitaires + // ========================================================================= + + private int charToPiece(char c) { + switch (c) { + case 'B': return WHITE_LICORNE; + case 'b': return WHITE_PALADIN; + case 'N': return BLACK_LICORNE; + case 'n': return BLACK_PALADIN; + default: return EMPTY; + } + } + + private char pieceToChar(int piece) { + switch (piece) { + case WHITE_LICORNE: return 'B'; + case WHITE_PALADIN: return 'b'; + case BLACK_LICORNE: return 'N'; + case BLACK_PALADIN: return 'n'; + default: return '-'; + } + } + + /** + * Convertit une chaîne "A1"-"F6" en coordonnées {row, col} (0-indexé). + * Retourne null si le format est invalide. + */ + int[] cellFromString(String s) { + if (s == null || s.length() < 2) return null; + s = s.trim(); + char colC = Character.toUpperCase(s.charAt(0)); + char rowC = s.charAt(1); + if (colC < 'A' || colC > 'F') return null; + if (rowC < '1' || rowC > '6') return null; + return new int[]{rowC - '1', colC - 'A'}; + } + + /** Convertit des coordonnées internes en notation "A1"-"F6". */ + String stringFromCell(int row, int col) { + return "" + (char)('A' + col) + (char)('1' + row); + } + + private boolean belongsToPlayer(int piece, String player) { + if ("blanc".equals(player)) return piece == WHITE_LICORNE || piece == WHITE_PALADIN; + if ("noir".equals(player)) return piece == BLACK_LICORNE || piece == BLACK_PALADIN; + return false; + } + + private String opponent(String player) { + return "blanc".equals(player) ? "noir" : "blanc"; + } + + /** + * Retourne les deux lignes (0-indexé) que doit utiliser blanc, + * sachant que noir a choisi {@code bRows}. + * Noir sur {0,1} → blanc sur {4,5} ; noir sur {4,5} → blanc sur {0,1}. + */ + private int[] complementaryRows(int[] bRows) { + return (bRows[0] == 0) ? new int[]{4, 5} : new int[]{0, 1}; + } + + // ========================================================================= + // Affichage + // ========================================================================= + + /** Affiche le plateau en console (ligne 6 en haut). */ + public void printBoard() { + System.out.println(" A B C D E F liseré"); + for (int r = 5; r >= 0; r--) { + System.out.print((r + 1) + " [ "); + for (int c = 0; c < 6; c++) System.out.print(pieceToChar(board[r][c]) + " "); + System.out.print("] " + (r + 1) + " |"); + for (int c = 0; c < 6; c++) System.out.print(" " + TILE_MAP[r][c]); + System.out.println(); + } + System.out.println("lastTileType=" + lastTileType + + " currentPlayer=" + currentPlayer + "\n"); + } + + // ========================================================================= + // Main de démonstration + // ========================================================================= + + public static void main(String[] args) throws IOException { + System.out.println("========================================="); + System.out.println(" Demo EscampeBoard "); + System.out.println("=========================================\n"); + + // ── Placements utilisés dans plusieurs scenarios ────────────────── + // Noir : lignes 5-6 (rows 4-5) — licorne en A6, paladins en B6 C6 D5 E5 F5 + final String NOIR_PL = "A6/B6/C6/D5/E5/F5"; + // Blanc : lignes 1-2 (rows 0-1) — licorne en D2, paladins en A1 B1 C1 E1 F2 + final String BLANC_PL = "D2/A1/B1/C1/E1/F2"; + + // ───────────────────────────────────────────────────────────────── + // 1. PHASE DE PLACEMENT + // ───────────────────────────────────────────────────────────────── + System.out.println("=== 1. PHASE DE PLACEMENT ==="); + EscampeBoard b = new EscampeBoard(); + + // Tentatives invalides avant le placement normal + System.out.println("Blanc tente de placer avant noir : " + + b.isValidMove(BLANC_PL, "blanc") + " (attendu: false)"); + System.out.println("Noir placement au milieu du plateau : " + + b.isValidMove("A3/B3/C3/D3/E3/F3", "noir") + " (attendu: false)"); + System.out.println("Noir placement sur deux bords diff. : " + + b.isValidMove("A1/B1/C1/D5/E5/F5", "noir") + " (attendu: false)"); + + // Placement valide de noir + System.out.println("\nNoir place : " + NOIR_PL + + " valid=" + b.isValidMove(NOIR_PL, "noir")); + b.play(NOIR_PL, "noir"); + System.out.println(" blackPlaced=" + b.blackPlaced + + " blackRows=[" + b.blackRows[0] + "," + b.blackRows[1] + "]" + + " currentPlayer=" + b.currentPlayer); + + // Placement valide de blanc + System.out.println("Blanc place : " + BLANC_PL + + " valid=" + b.isValidMove(BLANC_PL, "blanc")); + b.play(BLANC_PL, "blanc"); + System.out.println(" whitePlaced=" + b.whitePlaced + + " currentPlayer=" + b.currentPlayer); + + b.printBoard(); + + // ───────────────────────────────────────────────────────────────── + // 2. PHASE REGULIERE — contrainte de liseré + // ───────────────────────────────────────────────────────────────── + System.out.println("=== 2. PHASE REGULIERE ==="); + System.out.println("lastTileType=" + b.lastTileType + + " (pas de contrainte pour le premier coup)\n"); + + // Blanc joue en premier, pas de contrainte + String[] bMoves = b.possiblesMoves("blanc"); + System.out.println("Coups possibles pour blanc : " + bMoves.length + " coups"); + System.out.printf("Exemples : %s %s %s%n", + bMoves[0], + bMoves.length > 1 ? bMoves[1] : "", + bMoves.length > 2 ? bMoves[2] : ""); + + String m1 = bMoves[0]; + System.out.println("\nBlanc joue : " + m1 + " valid=" + b.isValidMove(m1, "blanc")); + b.play(m1, "blanc"); + System.out.println(" lastTileType=" + b.lastTileType + + " (liseré de la case d'arrivée = contrainte pour noir)" + + " currentPlayer=" + b.currentPlayer); + + // Tentative invalide : blanc rejoue hors de son tour + System.out.println("\nBlanc rejoue hors tour : " + + b.isValidMove(m1, "blanc") + " (attendu: false)"); + + // Tentative invalide : noir joue depuis un mauvais liseré + String badNoirMove = findMoveFromWrongTile(b, "noir"); + if (badNoirMove != null) { + System.out.println("Noir depuis mauvais liseré (" + badNoirMove + ") : " + + b.isValidMove(badNoirMove, "noir") + " (attendu: false)"); + } + + // Coup valide de noir + String[] nMoves = b.possiblesMoves("noir"); + System.out.println("\nCoups possibles pour noir (liseré " + b.lastTileType + ") : " + + nMoves.length + " coups"); + String m2 = nMoves[0]; + System.out.println("Noir joue : " + m2 + " valid=" + b.isValidMove(m2, "noir")); + b.play(m2, "noir"); + System.out.println(" lastTileType=" + b.lastTileType + + " currentPlayer=" + b.currentPlayer); + + // ───────────────────────────────────────────────────────────────── + // 3. ROUND-TRIP FICHIER + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 3. ROUND-TRIP FICHIER ==="); + b.saveToFile("escampe_save.txt"); + System.out.println("Sauvegardé dans escampe_save.txt"); + + EscampeBoard b2 = new EscampeBoard(); + b2.setFromFile("escampe_save.txt"); + System.out.println("Rechargé : lastTileType=" + b2.lastTileType + + " currentPlayer=" + b2.currentPlayer); + System.out.println("Plateaux identiques : " + Arrays.deepEquals(b.board, b2.board)); + System.out.println("lastTileType identique : " + (b.lastTileType == b2.lastTileType)); + System.out.println("currentPlayer identique : " + b.currentPlayer.equals(b2.currentPlayer)); + + // ───────────────────────────────────────────────────────────────── + // 4. SCENARIO DE PASS (E) + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 4. SCENARIO DE PASS ==="); + EscampeBoard bPass = new EscampeBoard(); + bPass.play(NOIR_PL, "noir"); + bPass.play(BLANC_PL, "blanc"); + + // Forcer une situation où noir n'a aucun coup : + // lastTileType=2, mais toutes les pièces noires sont sur liseré 1 ou 3. + for (int r = 0; r < 6; r++) Arrays.fill(bPass.board[r], EMPTY); + bPass.board[0][3] = WHITE_LICORNE; // D1 liseré=3 + bPass.board[0][0] = WHITE_PALADIN; // A1 liseré=1 + bPass.board[0][4] = WHITE_PALADIN; // E1 liseré=1 + bPass.board[5][0] = BLACK_LICORNE; // A6 liseré=3 + bPass.board[4][4] = BLACK_PALADIN; // E5 liseré=1 + bPass.board[4][2] = BLACK_PALADIN; // C5 liseré=1 + bPass.lastTileType = 2; // blanc vient de poser sur liseré 2 + bPass.currentPlayer = "noir"; + + System.out.println("Pièces noires sur liserés 1 et 3, contrainte = 2"); + System.out.println("possiblesMoves(noir) = " + + Arrays.toString(bPass.possiblesMoves("noir")) + " (attendu: [E])"); + System.out.println("isValidMove(E, noir) = " + + bPass.isValidMove("E", "noir") + " (attendu: true)"); + System.out.println("isValidMove(E, blanc) = " + + bPass.isValidMove("E", "blanc") + " (attendu: false, pas son tour)"); + + bPass.play("E", "noir"); + System.out.println("Après pass : lastTileType=" + bPass.lastTileType + + " (attendu: -1) currentPlayer=" + bPass.currentPlayer); + + // ───────────────────────────────────────────────────────────────── + // 5. CAPTURE ET FIN DE PARTIE + // ───────────────────────────────────────────────────────────────── + System.out.println("\n=== 5. CAPTURE ET FIN DE PARTIE ==="); + EscampeBoard bCap = new EscampeBoard(); + bCap.play(NOIR_PL, "noir"); + bCap.play(BLANC_PL, "blanc"); + + // Mise en scène : + // - Blanc paladin en B1 (row=0,col=1 ; liseré=2) + // → 2 pas orthogonaux : B1 -> B2 -> B3 + // - Licorne noire en B3 (row=2,col=1) ; case B2 vide + // - lastTileType=2 → blanc peut jouer depuis B1 + for (int r = 0; r < 6; r++) Arrays.fill(bCap.board[r], EMPTY); + bCap.board[0][1] = WHITE_PALADIN; // B1 liseré=2 + bCap.board[0][3] = WHITE_LICORNE; // D1 (garde-fou : licorne blanche présente) + bCap.board[2][1] = BLACK_LICORNE; // B3 + bCap.board[5][5] = BLACK_PALADIN; // F6 (présence de pièce noire restante) + bCap.lastTileType = 2; + bCap.currentPlayer = "blanc"; + + System.out.println("Avant capture :"); + bCap.printBoard(); + System.out.println("gameOver = " + bCap.gameOver() + " (attendu: false)"); + + // Coup invalide : un pas seulement (B1->B2), pas assez de cases + System.out.println("Coup B1-B2 (1 pas, manque 1) : " + + bCap.isValidMove("B1-B2", "blanc") + " (attendu: false)"); + + // Coup valide : deux pas (B1->B2->B3), B2 vide, B3 = licorne noire + System.out.println("Coup B1-B3 (2 pas, capture) : " + + bCap.isValidMove("B1-B3", "blanc") + " (attendu: true)"); + bCap.play("B1-B3", "blanc"); + + System.out.println("Après capture :"); + bCap.printBoard(); + System.out.println("gameOver = " + bCap.gameOver() + " (attendu: true)"); + System.out.println("Blanc gagne !"); + + System.out.println("\n========================================="); + System.out.println(" Demo terminee "); + System.out.println("========================================="); + } + + /** + * Utilitaire pour la démo : trouve un coup depuis une pièce + * de {@code player} dont le liseré est différent de {@code lastTileType}. + * Retourne null si aucune telle pièce n'a de destinations. + */ + private static String findMoveFromWrongTile(EscampeBoard b, String player) { + for (int r = 0; r < 6; r++) { + for (int c = 0; c < 6; c++) { + if (!b.belongsToPlayer(b.board[r][c], player)) continue; + if (TILE_MAP[r][c] == b.lastTileType) continue; + Set reach = b.getReachableSquares(r, c, player); + if (!reach.isEmpty()) { + String dest = reach.iterator().next(); + String[] parts = dest.split(","); + return b.stringFromCell(r, c) + "-" + + b.stringFromCell(Integer.parseInt(parts[0]), + Integer.parseInt(parts[1])); + } + } + } + return null; + } +} diff --git a/src/escampe/IJoueur.java b/src/escampe/IJoueur.java new file mode 100644 index 0000000..c6e9143 --- /dev/null +++ b/src/escampe/IJoueur.java @@ -0,0 +1,65 @@ +package escampe; + + +/** + * Voici l'interface abstraite qu'il suffit d'implanter pour jouer. Ensuite, vous devez utiliser + * ClientJeu en lui donnant le nom de votre classe pour qu'il la charge et se connecte au serveur. + * + * @author L. Simon (Univ. Paris-Sud)- 2006-2013 + * + */ + +public interface IJoueur { + + // Mais pas lors de la conversation avec l'arbitre (méthodes initJoueur et getNumJoueur) + // Vous pouvez changer cela en interne si vous le souhaitez + static final int BLANC = -1; + static final int NOIR = 1; + + /** + * L'arbitre vient de lancer votre joueur. Il lui informe par cette méthode que vous devez jouer + * dans cette couleur. Vous pouvez utiliser cette m?thode abstraite, ou la méthode constructeur + * de votre classe, pour initialiser vos structures. + * + * @param mycolour + * La couleur dans laquelle vous allez jouer (-1=BLANC, 1=NOIR) + */ + public void initJoueur(int mycolour); + + // Doit retourner l'argument passé par la fonction ci-dessus (constantes BLANC ou NOIR) + public int getNumJoueur(); + + /** + * C'est ici que vous devez faire appel à votre IA pour trouver le meilleur coup à jouer sur le + * plateau courant. + * + * @return une chaine décrivant le mouvement. Cette chaine doit être décrite exactement comme + * sur l'exemple : String msg = "" + positionInitiale + "-" +positionFinale + ""; ou "PASSE"; + * Chaque position contient une lettre et un num?ro, par exemple:A1,B2 (coup "A1-B2") + */ + public String choixMouvement(); + + /** + * Méthode appelée par l'arbitre pour désigner le vainqueur. Vous pouvez en profiter pour + * imprimer une bannière de joie... Si vous gagnez... + * + * @param colour + * La couleur du gagnant (BLANC=-1, NOIR=1). + */ + public void declareLeVainqueur(int colour); + + /** + * On suppose que l'arbitre a vérifié que le mouvement ennemi était bien légal. Il vous informe + * du mouvement ennemi. A vous de répercuter ce mouvement dans vos structures. Comme par exemple + * éliminer les pions que ennemi vient de vous prendre par ce mouvement. Il n'est pas nécessaire + * de réfléchir déjà à votre prochain coup à jouer : pour cela l'arbitre appelera ensuite + * choixMouvement(). + * + * @param coup + * une chaine décrivant le mouvement: par exemple: "A1-B2" + */ + public void mouvementEnnemi(String coup); + + public String binoName(); + +} diff --git a/src/escampe/JoueurPuyaubreauRussac.java b/src/escampe/JoueurPuyaubreauRussac.java new file mode 100644 index 0000000..d04c3f4 --- /dev/null +++ b/src/escampe/JoueurPuyaubreauRussac.java @@ -0,0 +1,117 @@ +package escampe; + +/** + * Joueur du tournoi (Puyaubreau / Russac). Enveloppe un {@link EscampeBoard} + * tenu à jour à chaque coup et délègue la décision à {@link Moteur}. + * + * L'interface {@code IJoueur} parle en entiers ({@code NOIR=1}, {@code BLANC=-1}) + * et place les pièces via le même canal que les coups : le premier + * {@code choixMouvement} renvoie un placement, les suivants des coups. Le pass + * se note {@code "E"} (et non {@code "PASSE"}, contrairement au Javadoc d'IJoueur). + */ +public class JoueurPuyaubreauRussac implements IJoueur { + + private int couleur = NOIR; + private EscampeBoard board; + private final Moteur moteur = new Moteur(); + + // Budget de temps : enveloppe sous la limite arbitre de 300 s, fraction du + // temps restant par coup. Surchargeable par -Descampe.* pour les tests. + private static final long BUDGET_MS = Long.getLong("escampe.budgetMs", 280_000); + private static final long MAX_SLICE_MS = Long.getLong("escampe.maxSliceMs", 6_000); + private static final long MIN_SLICE_MS = 120; + private static final int TIME_DIVISOR = 12; + private static final boolean DEBUG = Boolean.getBoolean("escampe.debug"); + private long usedMs = 0; + + @Override + public void initJoueur(int mycolour) { + couleur = mycolour; + board = new EscampeBoard(); + } + + @Override + public int getNumJoueur() { + return couleur; + } + + @Override + public String binoName() { + return "Puyaubreau_Russac"; + } + + private String myStr() { return couleur == NOIR ? "noir" : "blanc"; } + private String oppStr() { return couleur == NOIR ? "blanc" : "noir"; } + + @Override + public String choixMouvement() { + if (board.gameOver()) return "xxxxx"; // fin de partie sous Solo ; l'arbitre, lui, n'appelle plus + + if (couleur == NOIR && !board.blackPlaced) { + String pl = placement(new int[]{0, 1}); + board.play(pl, "noir"); + return pl; + } + if (couleur == BLANC && !board.whitePlaced) { + String pl = placement(complementaryRows(board.blackRows)); + board.play(pl, "blanc"); + return pl; + } + + String move = chooseMove(); + board.play(move, myStr()); + return move; + } + + @Override + public void mouvementEnnemi(String coup) { + if (coup == null) return; + coup = coup.trim(); + if (coup.isEmpty() || coup.equals("xxxxx")) return; + try { + board.play(coup, oppStr()); + } catch (RuntimeException e) { + // L'arbitre garantit la légalité ; on ne plante pas sur une désync. + System.err.println("[" + binoName() + "] coup ennemi rejeté : " + coup); + } + } + + @Override + public void declareLeVainqueur(int colour) { + if (colour == couleur) System.out.println("[" + binoName() + "] Victoire !"); + else if (colour == -couleur) System.out.println("[" + binoName() + "] Défaite."); + } + + /** Temps alloué au moteur pour ce coup, puis appel de la recherche. */ + private String chooseMove() { + long remaining = BUDGET_MS - usedMs; + long slice = Math.max(MIN_SLICE_MS, Math.min(remaining / TIME_DIVISOR, MAX_SLICE_MS)); + if (remaining < 1500) slice = Math.max(40, remaining - 300); + + long t0 = System.currentTimeMillis(); + int m = moteur.bestMove(board, couleur == NOIR, slice); + usedMs += System.currentTimeMillis() - t0; + + if (DEBUG) { + System.err.printf("[%s] %s prof=%d score=%d noeuds=%d cumul=%ds%n", + binoName(), board.moveToString(m), moteur.reachedDepth, moteur.lastScore, + moteur.nodes, usedMs / 1000); + } + return board.moveToString(m); + } + + private int[] complementaryRows(int[] blackRows) { + return blackRows[0] == 0 ? new int[]{4, 5} : new int[]{0, 1}; + } + + /** + * Placement : licorne dans un coin, ses deux voisines occupées par des + * paladins (la licorne devient incapturable), les trois autres paladins sur + * des liserés 1/2/3 distincts pour ne jamais être contraint de passer. + */ + private String placement(int[] rows) { + boolean bottom = Math.min(rows[0], rows[1]) == 0; + return bottom ? "A1/A2/B1/E1/F1/C2" // coin A1, murs A2/B1, mobiles E1(1)/F1(2)/C2(3) + : "A6/A5/B6/C5/F5/E6"; // coin A6, murs A5/B6, mobiles C5(1)/F5(2)/E6(3) + } +} diff --git a/src/escampe/Moteur.java b/src/escampe/Moteur.java new file mode 100644 index 0000000..52e7926 --- /dev/null +++ b/src/escampe/Moteur.java @@ -0,0 +1,137 @@ +package escampe; + +/** + * Recherche du meilleur coup : negamax + élagage alpha-bêta + approfondissement + * itératif sous limite de temps. La recherche se fait sur une copie du plateau, + * via makeInt/unmakeInt (sans allocation). Capturer la licorne adverse vaut + * {@code WIN - ply} (gagner vite plutôt que tard). + */ +final class Moteur { + + static final int WIN = 1_000_000; + static final int INF = 2_000_000; + static final int MAX_DEPTH = 40; + private static final int MAX_PLY = MAX_DEPTH + 8; + + // Poids de l'évaluation (proximité paladins/licornes : attaque vs défense). + int wAtkSum = 2, wDefSum = 2, wAtkMin = 8, wDefMin = 8; + + private long deadline; + private boolean timedOut; + long nodes; + int reachedDepth; + int lastScore; + + private final int[][] buf = new int[MAX_PLY][256]; // un buffer de coups par profondeur + + int bestMove(EscampeBoard root, boolean black, long budgetMs) { + EscampeBoard pos = root.copy(); + deadline = System.currentTimeMillis() + Math.max(1, budgetMs); + nodes = 0; timedOut = false; reachedDepth = 0; lastScore = 0; + + int[] moves = new int[256]; + int n = pos.genMovesIntInto(black, moves); + if (n == 0 || moves[0] == EscampeBoard.MOVE_PASS) return EscampeBoard.MOVE_PASS; + orderCapturesFirst(pos, moves, n, black); + + int best = moves[0]; + for (int depth = 1; depth <= MAX_DEPTH; depth++) { + int alpha = -INF, bestScore = -INF, bestThis = moves[0]; + boolean complete = true; + for (int i = 0; i < n; i++) { + EscampeBoard.Undo u = pos.makeInt(moves[i]); + int sc = isCapture(u, black) ? WIN - 1 : -negamax(pos, depth - 1, -INF, -alpha, !black, 1); + pos.unmakeInt(u); + if (timedOut) { complete = false; break; } + if (sc > bestScore) { bestScore = sc; bestThis = moves[i]; } + if (sc > alpha) alpha = sc; + } + if (!complete) break; // profondeur interrompue : on garde la précédente + best = bestThis; + reachedDepth = depth; + lastScore = bestScore; + moveToFront(moves, n, best); // ordonne l'itération suivante + if (bestScore >= WIN - 64) break; + } + return best; + } + + private int negamax(EscampeBoard pos, int depth, int alpha, int beta, boolean black, int ply) { + if ((++nodes & 2047) == 0 && System.currentTimeMillis() >= deadline) { timedOut = true; return 0; } + if (depth <= 0) return eval(pos, black); + + int[] moves = buf[ply]; + int n = pos.genMovesIntInto(black, moves); + if (n == 0) return eval(pos, black); + orderCapturesFirst(pos, moves, n, black); + + int bestScore = -INF; + for (int i = 0; i < n; i++) { + EscampeBoard.Undo u = pos.makeInt(moves[i]); + int sc = isCapture(u, black) ? WIN - ply : -negamax(pos, depth - 1, -beta, -alpha, !black, ply + 1); + pos.unmakeInt(u); + if (timedOut) return 0; + if (sc > bestScore) bestScore = sc; + if (bestScore > alpha) alpha = bestScore; + if (alpha >= beta) break; + } + return bestScore; + } + + private boolean isCapture(EscampeBoard.Undo u, boolean black) { + return u.captured() == (black ? EscampeBoard.WHITE_LICORNE : EscampeBoard.BLACK_LICORNE); + } + + /** Place en tête un coup capturant la licorne adverse, pour une coupure immédiate. */ + private void orderCapturesFirst(EscampeBoard pos, int[] moves, int n, boolean black) { + int enemy = black ? EscampeBoard.WHITE_LICORNE : EscampeBoard.BLACK_LICORNE; + for (int i = 0; i < n; i++) { + int to = moves[i] % 36; + if (moves[i] != EscampeBoard.MOVE_PASS && pos.board[to / 6][to % 6] == enemy) { + int t = moves[0]; moves[0] = moves[i]; moves[i] = t; + return; + } + } + } + + private void moveToFront(int[] moves, int n, int target) { + for (int i = 0; i < n; i++) { + if (moves[i] == target) { int t = moves[0]; moves[0] = moves[i]; moves[i] = t; return; } + } + } + + private int eval(EscampeBoard pos, boolean black) { + int adv = evalBlackAdvantage(pos); + return black ? adv : -adv; + } + + /** Avantage de Noir : nos paladins proches de la licorne adverse, les leurs loin de la nôtre. */ + private int evalBlackAdvantage(EscampeBoard pos) { + int[][] b = pos.board; + int blr = -1, blc = -1, wlr = -1, wlc = -1; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + int p = b[r][c]; + if (p == EscampeBoard.BLACK_LICORNE) { blr = r; blc = c; } + else if (p == EscampeBoard.WHITE_LICORNE) { wlr = r; wlc = c; } + } + if (wlr < 0) return WIN; + if (blr < 0) return -WIN; + + int atkSum = 0, defSum = 0, atkMin = 99, defMin = 99; + for (int r = 0; r < 6; r++) + for (int c = 0; c < 6; c++) { + int p = b[r][c]; + if (p == EscampeBoard.BLACK_PALADIN) { + int d = Math.abs(r - wlr) + Math.abs(c - wlc); + atkSum += 10 - d; + if (d < atkMin) atkMin = d; + } else if (p == EscampeBoard.WHITE_PALADIN) { + int d = Math.abs(r - blr) + Math.abs(c - blc); + defSum += 10 - d; + if (d < defMin) defMin = d; + } + } + return wAtkSum * atkSum - wDefSum * defSum + wAtkMin * (10 - atkMin) - wDefMin * (10 - defMin); + } +} diff --git a/src/escampe/Partie1.java b/src/escampe/Partie1.java new file mode 100644 index 0000000..972d1f2 --- /dev/null +++ b/src/escampe/Partie1.java @@ -0,0 +1,45 @@ +package escampe; + +public interface Partie1 { + + /** + * Initialise un plateau à partir d'un fichier texte. + * @param fileName le nom du fichier à lire + */ + public void setFromFile(String fileName); + + /** + * Sauve la configuration de l'état courant (plateau et pièces restantes) dans un fichier. + * @param fileName le nom du fichier à sauvegarder + * Le format doit être compatible avec celui utilisé pour la lecture. + */ + public void saveToFile(String fileName); + + /** + * Indique si le coup {@code move} est valide pour le joueur {@code player} sur le plateau courant. + * @param move le coup à jouer, + * sous la forme "B1-D1" en général, + * sous la forme "C6/A6/B5/D5/E6/F5" pour le coup qui place les pièces, + * ou "E" pour passer son tour. + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public boolean isValidMove(String move, String player); + + /** + * Calcule les coups possibles pour le joueur {@code player} sur le plateau courant. + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public String[] possiblesMoves(String player); + + /** + * Modifie le plateau en jouant le coup {@code move} pour le joueur {@code player}. + * @param move le coup à jouer, sous la forme "C1-D1" ou "C6/A6/B5/D5/E6/F5" + * @param player le joueur qui joue, représenté par "noir" ou "blanc" + */ + public void play(String move, String player); + + /** + * Retourne vrai lorsque le plateau correspond à une fin de partie. + */ + public boolean gameOver(); +} diff --git a/src/escampe/RulesTest.java b/src/escampe/RulesTest.java new file mode 100644 index 0000000..7e5fa32 --- /dev/null +++ b/src/escampe/RulesTest.java @@ -0,0 +1,143 @@ +package escampe; + +import java.util.*; + +/** + * Tests directs des règles du jeu : compte de pas selon le liseré, capture au + * dernier pas uniquement, paladins imprenables, interdiction de traverser une + * case occupée, contrainte de liseré, pass forcé, fin de partie, zones de placement. + */ +public class RulesTest { + + static int pass = 0, fail = 0; + static void check(boolean cond, String name) { + if (cond) pass++; + else { fail++; System.out.println(" ÉCHEC : " + name); } + } + static boolean has(Set s, int r, int c) { return s.contains(r + "," + c); } + + public static void main(String[] args) { + stepCount(); + captureAndBlocking(); + lisereConstraint(); + forcedPass(); + gameOver(); + placementZones(); + + System.out.println("\nRulesTest : " + pass + " OK, " + fail + " échec(s)."); + if (fail > 0) System.exit(1); + } + + /** Le nombre de pas est exactement le liseré de la case de départ. */ + static void stepCount() { + EscampeBoard b = new EscampeBoard(); + b.board[2][2] = EscampeBoard.WHITE_PALADIN; // C3, liseré 1 + Set r = b.getReachableSquares(2, 2, "blanc"); + check(r.size() == 4 && has(r,1,2) && has(r,3,2) && has(r,2,1) && has(r,2,3), + "liseré 1 (centre) → exactement les 4 voisins orthogonaux"); + + b = new EscampeBoard(); + b.board[2][3] = EscampeBoard.WHITE_PALADIN; // D3, liseré 2 + r = b.getReachableSquares(2, 3, "blanc"); + check(r.size() == 8 + && has(r,0,3) && has(r,4,3) && has(r,2,1) && has(r,2,5) + && has(r,1,2) && has(r,1,4) && has(r,3,2) && has(r,3,4), + "liseré 2 (centre) → les 8 cases à distance 2"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; // C4, liseré 3 + r = b.getReachableSquares(3, 2, "blanc"); + check(has(r,0,2), "liseré 3 atteint (0,2) à 3 pas en ligne droite"); + check(!has(r,1,2), "liseré 3 n'atteint PAS (1,2) (mauvaise parité : 3 pas)"); + check(has(r,2,2) && has(r,3,3), "liseré 3 atteint des cases à distance 1 (zigzag)"); + } + + /** Capture au dernier pas uniquement ; paladins imprenables ; pas de traversée. */ + static void captureAndBlocking() { + EscampeBoard b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; // C4 liseré 3 + b.board[0][2] = EscampeBoard.BLACK_LICORNE; // cible à 3 pas (droit) + Set r = b.getReachableSquares(3, 2, "blanc"); + check(has(r,0,2), "capture de la licorne adverse au dernier pas : autorisée"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; + b.board[0][2] = EscampeBoard.BLACK_PALADIN; // paladin sur la case finale + r = b.getReachableSquares(3, 2, "blanc"); + check(!has(r,0,2), "paladin imprenable : pas d'arrivée dessus"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; + b.board[1][2] = EscampeBoard.BLACK_PALADIN; // bloque l'unique chemin vers (0,2) + r = b.getReachableSquares(3, 2, "blanc"); + check(!has(r,0,2), "interdit de traverser une case occupée"); + + b = new EscampeBoard(); + b.board[3][2] = EscampeBoard.WHITE_PALADIN; + b.board[1][2] = EscampeBoard.BLACK_LICORNE; // licorne à distance 2 (parité ≠) + r = b.getReachableSquares(3, 2, "blanc"); + check(!has(r,1,2), "licorne à mauvaise distance : non capturable (compte de pas exact)"); + } + + /** On ne peut jouer que depuis une case du liseré imposé. */ + static void lisereConstraint() { + EscampeBoard b = inPlay(); + b.board[2][2] = EscampeBoard.WHITE_LICORNE; // C3 liseré 1 + b.board[5][5] = EscampeBoard.BLACK_LICORNE; + b.board[2][3] = EscampeBoard.WHITE_PALADIN; // D3 liseré 2 + b.board[0][0] = EscampeBoard.WHITE_PALADIN; // A1 liseré 1 + b.lastTileType = 2; // seules les pièces liseré 2 bougent + boolean allLis2 = true; + for (String m : b.possiblesMoves("blanc")) { + int[] from = b.cellFromString(m.substring(0, m.indexOf('-'))); + if (EscampeBoard.TILE_MAP[from[0]][from[1]] != 2) allLis2 = false; + } + check(allLis2, "contrainte de liseré : tous les coups partent d'une case liseré 2"); + } + + /** Pass autorisé seulement si aucune pièce ne peut jouer le liseré imposé. */ + static void forcedPass() { + EscampeBoard b = inPlay(); + b.board[0][0] = EscampeBoard.WHITE_LICORNE; // A1 liseré 1 + b.board[5][5] = EscampeBoard.BLACK_LICORNE; + b.lastTileType = 3; // blanc n'a aucune pièce liseré 3 + String[] mv = b.possiblesMoves("blanc"); + check(mv.length == 1 && mv[0].equals("E"), "aucune pièce sur le liseré → pass forcé"); + check(b.isValidMove("E", "blanc"), "E valide quand bloqué"); + + b.lastTileType = 1; // la licorne A1 (liseré 1) peut bouger + String[] mv2 = b.possiblesMoves("blanc"); + check(mv2.length >= 1 && !mv2[0].equals("E"), "des coups existent → pas de pass"); + check(!b.isValidMove("E", "blanc"), "E invalide si des coups existent"); + } + + static void gameOver() { + EscampeBoard b = inPlay(); + b.board[0][0] = EscampeBoard.WHITE_LICORNE; + b.board[5][5] = EscampeBoard.BLACK_LICORNE; + check(!b.gameOver(), "deux licornes présentes → partie en cours"); + b.board[5][5] = EscampeBoard.EMPTY; + check(b.gameOver(), "une licorne manquante → fin de partie"); + check(!new EscampeBoard().gameOver(), "avant placement → jamais fini"); + } + + /** Placement : zones autorisées et complémentarité noir/blanc. */ + static void placementZones() { + EscampeBoard b = new EscampeBoard(); + check(!b.isValidMove("A3/B3/C3/D3/E3/F3", "noir"), "placement noir au centre : refusé"); + check(b.isValidMove("A1/A2/B1/E1/F1/C2", "noir"), "placement noir sur 2 lignes du bord : accepté"); + b.play("A1/A2/B1/E1/F1/C2", "noir"); + check(b.isValidMove("A6/A5/B6/C5/F5/E6", "blanc"), "placement blanc complémentaire (haut) : accepté"); + check(!b.isValidMove("A1/A2/B1/E1/F1/D1", "blanc"), "placement blanc du même côté que noir : refusé"); + } + + /** Plateau vide « en jeu » (les deux placements faits), à remplir à la main. */ + static EscampeBoard inPlay() { + EscampeBoard b = new EscampeBoard(); + b.blackPlaced = true; + b.whitePlaced = true; + b.currentPlayer = "blanc"; + b.lastTileType = -1; + return b; + } +} diff --git a/src/escampe/Solo.java b/src/escampe/Solo.java new file mode 100644 index 0000000..ae4eba9 --- /dev/null +++ b/src/escampe/Solo.java @@ -0,0 +1,183 @@ +package escampe; + + +import java.util.Date; + +import javax.swing.JFrame; + +/** + * Petite Classe toute simple qui vous montre comment on peut lancer une partie sur deux IJoueurs... + * Cela vous servira a debugger facilement votre projet en conditions presque reelles de tournoi + * + * Attention, l'arbitre n'est pas lancé dessus, mais comme il s'agit de deux IJoueur à vous il n'est + * pas nécessaire de vérifier la validité des coups (bien entendu) + * + * Par contre, comme rien ne vérifie la fin de partie (pas d'arbitre), vos IJoueur devront renvoyer + * la chaine "xxxxx" pour dire que la partie est finie. + * + * Cette classe n'affiche rien : elle se contente de donner la main alternativement aux deux + * joueurs. + * + * 2008-2012 + */ +public class Solo { + private static IJoueur joueurBlanc; + private static IJoueur joueurNoir; + + // Ne pas modifier ces constantes, elles seront utilisees par l'arbitre + private final static int BLANC = -1; + private final static int NOIR = 1; + + private static int nbCoups = 0; + + /*// Par défaut, on a une applet graphique + static boolean APPLETGRAPHIQUE = true; + + // applet game viewer + static private Applet vueDuJeu; + static private JFrame f = null;*/ + + + /** + * Pour éviter de toujours envoyer des lignes de commandes, vous pouvez renvoyer automatiquement + * dans cette méthode votre joueur par défaut. Attention, il faut bien remplir le return new + * VOTREJOUEUR() pour que cela fonctionne la classe implantee renvoyee doit implanter + * l'interface IJoueur... + * + * @param s + * @return Ijoueur un joueur demande + */ + private static IJoueur getDefaultPlayer(String s) { + System.out.println(s + " : defaultPlayer"); + // vous devez faire qq chose comme return new MonMeilleurJoueur(); + // JoueurAleatoire vit dans escampeobf.jar (interface obfusquée) : on ne peut + // pas le référencer ici à la compilation. On renvoie donc notre propre joueur. + return new JoueurPuyaubreauRussac(); + } + + /** + * Juste pour rendre le tout plus generique, et vous donner une idee de comment le tournoi sera + * lance automatiquement, voici une methode permettant de charger une certaine classe implantant + * un IJoueur + * + * @param classeJoueur + * @param s + * @return la classe chargee dynamiquement + */ + private static IJoueur loadNamedPlayer(String classeJoueur, String s) { + IJoueur joueur; + System.out.print(s + " : Chargement de la classe joueur " + classeJoueur + "... "); + try { + Class cjoueur = Class.forName(classeJoueur); + joueur = (IJoueur) cjoueur.newInstance(); + } + catch (Exception e) { + System.out.println("Erreur de chargement"); + System.out.println(e); + return null; + } + System.out.println("Ok"); + return joueur; + } + + /** + * Boucle principale du jeu, en utilisant une version de l'arbitre identique a celle du tournoi + * L'arbitre sera le garant de la validite des coups, et de leur affichage standard pour la + * publication via le site web. + * + * @param joueurBlanc + * @param joueurNoir + */ + public static void gameLoop(IJoueur joueurBlanc, IJoueur joueurNoir) { + String coup; + boolean partieFinie = false; + IJoueur joueurCourant = joueurNoir; // Dans Escampe le joueur Noir commence + + while (!partieFinie) { + nbCoups++; + + System.out.println("\n*********\nOn demande à " + joueurCourant.binoName() + " de jouer..."); + long waitingTime1 = new Date().getTime(); + + coup = joueurCourant.choixMouvement(); + + long waitingTime2 = new Date().getTime(); + // On rajoute 1 pour eliminer les temps infinis + long waitingTime = waitingTime2 - waitingTime1 + 1; + System.out.println("Le joueur " + joueurCourant.binoName() + " a joué le coup " + coup + " en " + waitingTime + "s."); + try { + Thread.sleep(1); // Juste pour attendre un peu + } + catch (InterruptedException e) { + } + + if (coup.compareTo("xxxxx") == 0) + partieFinie = true; + else if (nbCoups == 2) { // Dans Escampe le joueur Blanc rejoue après avoir posé ses pièces + // On avertit le joueur Noir du placement des pièces + joueurNoir.mouvementEnnemi(coup); + } + else { + if (joueurCourant.getNumJoueur() == BLANC) + joueurCourant = joueurNoir; + else + joueurCourant = joueurBlanc; + + // On avertit le second joueur du coup calcule par le precedent + joueurCourant.mouvementEnnemi(coup); + // Ce sera ensuite à lui de jouer de nouveau en haut de la boucle + } + } + + System.out.println("Partie finie en " + nbCoups + " coups.\n"); + } + + /** + * On charge eventuellement les classes demandee pour les joueurs, et on lance la boucle + * principale + * + * @param args + */ + public static void main(String args[]) { + /*// S'il le faut, on initialise l'applet graphique + if (APPLETGRAPHIQUE) { + f = new JFrame("Vue du jeu"); + vueDuJeu = new Applet(); + vueDuJeu.buildUI(f.getContentPane()); + f.setSize(vueDuJeu.getDimension()); + vueDuJeu.setMyFrame(f); + f.setVisible(true); + vueDuJeu.addBoard("Départ ", plateau); + vueDuJeu.update(f.getGraphics(), f.getInsets()); + }*/ + + System.out.println("Partie solo ..."); + + if (args.length == 0) { // On a deux classes à charger + joueurBlanc = getDefaultPlayer("Blanc"); + joueurNoir = getDefaultPlayer("Noir"); + } + else if (args.length == 2) { // On a deux classes à charger + joueurBlanc = getDefaultPlayer("Blanc"); + joueurNoir = getDefaultPlayer("Noir"); + } + else if (args.length == 3) { + joueurBlanc = loadNamedPlayer(args[0], "Blanc"); + joueurNoir = loadNamedPlayer(args[0], "Noir"); + } + else if (args.length == 4) { + joueurBlanc = loadNamedPlayer(args[0], "Blanc"); + joueurNoir = loadNamedPlayer(args[1], "Noir"); + } + + joueurBlanc.initJoueur(BLANC); + System.out.println("Joueur Blanc : " + joueurBlanc.binoName()); + + joueurNoir.initJoueur(NOIR); + System.out.println("Joueur Noir : " + joueurNoir.binoName()); + + System.out.println("Initialisation des deux joueurs ok."); + + gameLoop(joueurBlanc, joueurNoir); + } +} diff --git a/src/escampe/VerifMoves.java b/src/escampe/VerifMoves.java new file mode 100644 index 0000000..83175b2 --- /dev/null +++ b/src/escampe/VerifMoves.java @@ -0,0 +1,121 @@ +package escampe; + +import java.util.*; + +/** + * Cross-vérifie le chemin « int » du moteur contre le chemin « String » vérifié, + * sur des milliers de parties aléatoires : mêmes coups que possiblesMoves, makeInt + * équivalent à play, unmakeInt qui restaure l'état. Échoue à la moindre divergence. + */ +public class VerifMoves { + + static int mismatches = 0; + + public static void main(String[] args) { + int games = args.length > 0 ? Integer.parseInt(args[0]) : 3000; + Random rng = new Random(20260530L); + + long positions = 0, makeChecks = 0; + for (int g = 0; g < games; g++) { + EscampeBoard b = new EscampeBoard(); + // Placements aléatoires légaux. + int[] noirRows = rng.nextBoolean() ? new int[]{0, 1} : new int[]{4, 5}; + b.play(randomPlacement(b, "noir", noirRows, rng), "noir"); + int[] blancRows = (noirRows[0] == 0) ? new int[]{4, 5} : new int[]{0, 1}; + b.play(randomPlacement(b, "blanc", blancRows, rng), "blanc"); + + for (int ply = 0; ply < 200 && !b.gameOver(); ply++) { + positions++; + // (1) égalité des ensembles de coups, pour les deux couleurs. + checkMoveSets(b, true); + checkMoveSets(b, false); + + // Côté au trait : (2) make==play et (3) unmake, sur chaque coup. + boolean black = "noir".equals(b.currentPlayer); + String side = b.currentPlayer; + int[] moves = b.genMovesInt(black); + for (int m : moves) { + makeChecks++; + EscampeBoard after = b.copy(); + EscampeBoard.Undo u = after.makeInt(m); + EscampeBoard ref = b.copy(); + ref.play(b.moveToString(m), side); + if (!sameState(after, ref)) { + report(b, "make!=play pour " + b.moveToString(m) + " (" + side + ")"); + } + after.unmakeInt(u); + if (!sameState(after, b)) { + report(b, "unmake ne restaure pas pour " + b.moveToString(m)); + } + } + if (mismatches > 0) { dumpAndExit(); } + + // Avance la partie d'un coup aléatoire (chemin String vérifié). + if (moves.length == 1 && moves[0] == EscampeBoard.MOVE_PASS) { + b.play("E", side); + } else { + int m = moves[rng.nextInt(moves.length)]; + b.play(b.moveToString(m), side); + } + } + } + System.out.println("Parties : " + games); + System.out.println("Positions testées : " + positions); + System.out.println("make/unmake testés: " + makeChecks); + System.out.println(mismatches == 0 + ? "RÉSULTAT : OK — chemin int ≡ chemin String vérifié (0 divergence)." + : "RÉSULTAT : " + mismatches + " DIVERGENCES !"); + if (mismatches != 0) System.exit(1); + } + + /** Compare genMovesInt(black) et possiblesMoves(player) comme ensembles. */ + static void checkMoveSets(EscampeBoard b, boolean black) { + String player = black ? "noir" : "blanc"; + Set fromInt = new TreeSet<>(); + for (int m : b.genMovesInt(black)) fromInt.add(b.moveToString(m)); + Set fromStr = new TreeSet<>(Arrays.asList(b.possiblesMoves(player))); + if (!fromInt.equals(fromStr)) { + report(b, "ensembles différents pour " + player + + "\n int = " + fromInt + "\n str = " + fromStr); + } + } + + static boolean sameState(EscampeBoard a, EscampeBoard c) { + if (a.lastTileType != c.lastTileType) return false; + if (!a.currentPlayer.equals(c.currentPlayer)) return false; + for (int r = 0; r < 6; r++) + for (int col = 0; col < 6; col++) + if (a.board[r][col] != c.board[r][col]) return false; + return true; + } + + static void report(EscampeBoard b, String msg) { + if (mismatches < 5) { + System.out.println("DIVERGENCE : " + msg); + System.out.println(" lastTileType=" + b.lastTileType + " currentPlayer=" + b.currentPlayer); + } + mismatches++; + } + + static void dumpAndExit() { + System.out.println(">>> arrêt sur première divergence."); + System.exit(1); + } + + /** Placement aléatoire légal : 6 cases distinctes sur les 2 lignes, licorne en tête. */ + static String randomPlacement(EscampeBoard b, String player, int[] rows, Random rng) { + List cells = new ArrayList<>(); + for (int r : rows) for (int c = 0; c < 6; c++) cells.add(new int[]{r, c}); + for (int tries = 0; tries < 100; tries++) { + Collections.shuffle(cells, rng); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 6; i++) { + if (i > 0) sb.append('/'); + sb.append((char) ('A' + cells.get(i)[1])).append((char) ('1' + cells.get(i)[0])); + } + String pl = sb.toString(); + if (b.isValidMove(pl, player)) return pl; + } + throw new IllegalStateException("aucun placement légal trouvé"); + } +} diff --git a/src/escampe_save.txt b/src/escampe_save.txt new file mode 100644 index 0000000..aa6fbdd --- /dev/null +++ b/src/escampe_save.txt @@ -0,0 +1,12 @@ +% Escampe - sauvegarde du plateau +% lastTileType: 1 +% currentPlayer: blanc +% blackPlaced: true +% whitePlaced: true +% blackRows: 4,5 +06 Nnn--- 06 +05 ----nn 05 +04 ------ 04 +03 ------ 03 +02 b--n-b 02 +01 -bb-b- 01 diff --git a/tools/make_report_pdf.py b/tools/make_report_pdf.py new file mode 100644 index 0000000..3effa53 --- /dev/null +++ b/tools/make_report_pdf.py @@ -0,0 +1,125 @@ +#!/usr/bin/env python3 +"""Génère le rapport PDF à partir de report/rapport.html, avec PyMuPDF (fitz). + +Aucune dépendance externe : ni pandoc, ni LaTeX, ni navigateur. On utilise +l'API fitz.Story (rendu HTML/CSS -> PDF multi-pages) puis une seconde passe +pour le pied de page et les numéros de page. + + python tools/make_report_pdf.py +""" +import os +import sys +import fitz # PyMuPDF + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +HTML = os.path.join(ROOT, "report", "rapport.html") +OUT = os.path.join(ROOT, "dist", "Puyaubreau_Russac_rapport.pdf") + +# Feuille de style : mise en page A4 sobre, titres colorés, tables et blocs
+# en Courier pour aligner diagrammes et carte des liserés.
+CSS = """
+* { font-family: serif; }
+body { font-size: 10.5pt; line-height: 1.45; color: #1a1a1a; }
+
+h1, h2, h3, .cover-title, .cover-course, .cover-sub, th { font-family: sans-serif; }
+
+h2 { font-size: 15pt; color: #1c3d5a; margin: 18pt 0 6pt 0;
+     border-bottom: 1.5px solid #1c3d5a; padding-bottom: 2pt; }
+h3 { font-size: 12pt; color: #2a6f97; margin: 12pt 0 3pt 0; }
+p  { margin: 5pt 0; text-align: justify; }
+ul, ol { margin: 4pt 0 4pt 0; }
+li { margin: 2pt 0; }
+
+code { font-family: monospace; font-size: 9.5pt; color: #8a2846; }
+
+pre.grid { font-family: monospace; font-size: 9pt; line-height: 1.25;
+           background: #f4f6f8; border: 1px solid #d3dae0; border-radius: 3px;
+           padding: 7pt; margin: 6pt 0; color: #14213d; white-space: pre; }
+
+table { border-collapse: collapse; width: 100%; margin: 7pt 0; font-size: 9.5pt; }
+th { background: #1c3d5a; color: #ffffff; text-align: left; padding: 4pt 6pt; }
+td { border: 1px solid #c5ccd3; padding: 4pt 6pt; vertical-align: top; }
+tr:nth-child(even) td { background: #f4f6f8; }
+
+p.note { background: #fff8e6; border-left: 3px solid #e0a526;
+         padding: 5pt 8pt; margin: 7pt 0; font-size: 9.8pt; }
+
+/* Éviter qu'un bloc préformaté ou une table soit coupé entre deux pages. */
+pre.grid, table, tr { page-break-inside: avoid; }
+h2, h3 { page-break-after: avoid; }
+.cover { page-break-after: always; }
+
+/* Page de titre */
+.cover { text-align: center; padding-top: 40pt; }
+.cover-univ   { font-size: 10pt; color: #555; margin-bottom: 30pt; }
+.cover-course { font-size: 13pt; color: #2a6f97; letter-spacing: 1pt; }
+.cover-title  { font-size: 30pt; color: #1c3d5a; margin: 8pt 0 0 0; }
+.cover-sub    { font-size: 12pt; color: #333; margin: 4pt 0; }
+.cover-authors{ font-size: 15pt; color: #14213d; margin-top: 34pt; font-family: sans-serif; }
+.cover-date   { font-size: 11pt; color: #555; margin-top: 6pt; }
+.cover-meta   { font-size: 9.5pt; color: #555; margin-top: 34pt; line-height: 1.6; }
+"""
+
+MARGIN = 48          # marge en points (1pt = 1/72")
+FOOTER = "Escampe — Puyaubreau / Russac — version finale"
+
+
+def build():
+    with open(HTML, "r", encoding="utf-8") as f:
+        html = f.read()
+
+    os.makedirs(os.path.dirname(OUT), exist_ok=True)
+
+    mediabox = fitz.paper_rect("a4")
+    where = mediabox + (MARGIN, MARGIN, -MARGIN, -MARGIN)
+
+    # 1) Rendu du flux HTML en pages PDF via Story.
+    writer = fitz.DocumentWriter(OUT)
+    story = fitz.Story(html=html, user_css=CSS)
+    more = 1
+    pages = 0
+    while more:
+        dev = writer.begin_page(mediabox)
+        more, _ = story.place(where)
+        story.draw(dev)
+        writer.end_page()
+        pages += 1
+    writer.close()
+
+    # 2) Seconde passe : pied de page + numéros « page X / N ».
+    doc = fitz.open(OUT)
+    n = doc.page_count
+    for i, page in enumerate(doc, start=1):
+        y = page.rect.height - 26
+        page.insert_text((MARGIN, y), FOOTER, fontname="helv",
+                         fontsize=7.5, color=(0.45, 0.45, 0.45))
+        label = f"page {i} / {n}"
+        w = fitz.get_text_length(label, fontname="helv", fontsize=7.5)
+        page.insert_text((page.rect.width - MARGIN - w, y), label,
+                         fontname="helv", fontsize=7.5, color=(0.45, 0.45, 0.45))
+    doc.saveIncr()
+    doc.close()
+    return pages, n
+
+
+def verify():
+    """Contrôle que les accents survivent au rendu (round-trip texte)."""
+    doc = fitz.open(OUT)
+    full = "".join(p.get_text() for p in doc)
+    doc.close()
+    # Mots accentués présents tels quels dans report/rapport.html.
+    probes = ["liseré", "Présentation", "élagage", "Modélisation",
+              "stratégique", "approfondissement", "Puyaubreau"]
+    missing = [s for s in probes if s not in full]
+    return missing, len(full)
+
+
+if __name__ == "__main__":
+    pages, n = build()
+    missing, chars = verify()
+    print(f"PDF écrit : {OUT}")
+    print(f"Pages : {n}  |  texte extrait : {chars} caractères")
+    if missing:
+        print("ATTENTION, chaînes accentuées introuvables après rendu :", missing)
+        sys.exit(1)
+    print("Accents vérifiés (round-trip OK).")

F3u1XsS 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