Joueur IA Escampe (Puyaubreau/Russac) — version finale
Joueur alpha-bêta + iterative deepening pour le tournoi APP5 « IA et contraintes ». - src/escampe/ : joueur (IJoueur), moteur (alpha-bêta + DFS bitmask, make/unmake sans allocation), modèle EscampeBoard (Partie1), utilitaires de test. - Protocole arbitre vérifié (pass="E", carte des liserés identique au serveur, machine à états placement/jeu) ; 7/7 victoires vs joueur aléatoire, 0 illégal. - Vérifications : VerifMoves (int≡String, 0 divergence/142k positions), RulesTest (21/21), Branching (facteur de branchement mesuré). - Rapport : report/rapport.html + tools/make_report_pdf.py (PyMuPDF) → PDF, RAPPORT.md. - Livrables buildés inclus (dist/ : jar, mainClass, tgz, rapport PDF) + lib/escampeobf.jar. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
51
scripts/match.sh
Normal file
51
scripts/match.sh
Normal file
@@ -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"
|
||||
Reference in New Issue
Block a user