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>
59 lines
2.1 KiB
Bash
59 lines
2.1 KiB
Bash
#!/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 <hôte> <port>"
|