From 117a58acbc08a375b656a6c604800612c023ed7e Mon Sep 17 00:00:00 2001 From: HP_pellel Date: Tue, 12 Aug 2025 22:18:58 +0200 Subject: [PATCH] Je commme la vue graphique --- README.md | 22 ++-- src/Compilateur.bat | 127 ++++++++++++++++++++ src/Main.java | 70 ++++++++++- src/controleur/ControleurPartie.java | 60 +++++++++- src/model/Coup.java | 23 ---- src/model/ModeDeJeu.java | 3 - src/model/Partie.java | 0 src/model/Plateau.java | 3 - src/model/joueur/IA.java | 5 - src/model/joueur/Joueur.java | 5 - src/model/joueur/JoueurHumain.java | 5 - src/model/joueur/JoueurIA.java | 5 - src/model/piece/Cavalier.java | 5 - src/model/piece/Fou.java | 5 - src/model/piece/Piece.java | 3 - src/model/piece/Pion.java | 5 - src/model/piece/Reine.java | 5 - src/model/piece/Roi.java | 5 - src/model/piece/Tour.java | 5 - src/{model => modele}/Case.java | 10 ++ src/{model => modele}/Couleur.java | 2 + src/modele/Coup.java | 72 +++++++++++ src/modele/ModeDeJeu.java | 8 ++ src/modele/Partie.java | 139 ++++++++++++++++++++++ src/modele/Plateau.java | 125 +++++++++++++++++++ src/modele/joueur/IA.java | 20 ++++ src/modele/joueur/Joueur.java | 30 +++++ src/modele/joueur/JoueurHumain.java | 28 +++++ src/modele/joueur/JoueurIA.java | 28 +++++ src/modele/piece/Cavalier.java | 47 ++++++++ src/modele/piece/Fou.java | 21 ++++ src/modele/piece/Piece.java | 34 ++++++ src/modele/piece/Pion.java | 77 ++++++++++++ src/modele/piece/Reine.java | 22 ++++ src/modele/piece/Roi.java | 17 +++ src/modele/piece/Tour.java | 21 ++++ src/out/Main.class | Bin 0 -> 1409 bytes src/out/controleur/ControleurPartie.class | Bin 0 -> 3097 bytes src/out/controleur/ControleurReseau.class | Bin 0 -> 217 bytes src/out/modele/Case.class | Bin 0 -> 1223 bytes src/out/modele/Couleur.class | Bin 0 -> 910 bytes src/out/modele/Coup.class | Bin 0 -> 1122 bytes src/out/modele/ModeDeJeu.class | Bin 0 -> 1119 bytes src/out/modele/Partie.class | Bin 0 -> 3201 bytes src/out/modele/Plateau.class | Bin 0 -> 2740 bytes src/out/modele/joueur/IA.class | Bin 0 -> 336 bytes src/out/modele/joueur/Joueur.class | Bin 0 -> 618 bytes src/out/modele/joueur/JoueurHumain.class | Bin 0 -> 586 bytes src/out/modele/joueur/JoueurIA.class | Bin 0 -> 608 bytes src/out/modele/piece/Cavalier.class | Bin 0 -> 1160 bytes src/out/modele/piece/Fou.class | Bin 0 -> 500 bytes src/out/modele/piece/Piece.class | Bin 0 -> 1275 bytes src/out/modele/piece/Pion.class | Bin 0 -> 1336 bytes src/out/modele/piece/Reine.class | Bin 0 -> 504 bytes src/out/modele/piece/Roi.class | Bin 0 -> 531 bytes src/out/modele/piece/Tour.class | Bin 0 -> 502 bytes src/out/reseau/Client.class | Bin 0 -> 193 bytes src/out/reseau/MessageJeu.class | Bin 0 -> 201 bytes src/out/reseau/Serveur.class | Bin 0 -> 195 bytes src/out/reseau/TypeMessage.class | Bin 0 -> 1015 bytes src/out/vue/CaseSwingUI.class | Bin 0 -> 1751 bytes src/out/vue/PlateauSwingUI.class | Bin 0 -> 904 bytes src/out/vue/Vue.class | Bin 0 -> 246 bytes src/out/vue/VueConsole.class | Bin 0 -> 2496 bytes src/out/vue/VueGraphiqueSwing.class | Bin 0 -> 955 bytes src/vue/CaseSwingUI.java | 94 +++++++++++++++ src/vue/PlateauSwingUI.java | 44 +++++++ src/vue/Vue.java | 9 +- src/vue/VueConsole.java | 72 ++++++++++- src/vue/VueGraphique.java | 5 - src/vue/VueGraphiqueSwing.java | 44 +++++++ 71 files changed, 1225 insertions(+), 105 deletions(-) create mode 100644 src/Compilateur.bat delete mode 100644 src/model/Coup.java delete mode 100644 src/model/ModeDeJeu.java delete mode 100644 src/model/Partie.java delete mode 100644 src/model/Plateau.java delete mode 100644 src/model/joueur/IA.java delete mode 100644 src/model/joueur/Joueur.java delete mode 100644 src/model/joueur/JoueurHumain.java delete mode 100644 src/model/joueur/JoueurIA.java delete mode 100644 src/model/piece/Cavalier.java delete mode 100644 src/model/piece/Fou.java delete mode 100644 src/model/piece/Piece.java delete mode 100644 src/model/piece/Pion.java delete mode 100644 src/model/piece/Reine.java delete mode 100644 src/model/piece/Roi.java delete mode 100644 src/model/piece/Tour.java rename src/{model => modele}/Case.java (74%) rename src/{model => modele}/Couleur.java (72%) create mode 100644 src/modele/Coup.java create mode 100644 src/modele/ModeDeJeu.java create mode 100644 src/modele/Partie.java create mode 100644 src/modele/Plateau.java create mode 100644 src/modele/joueur/IA.java create mode 100644 src/modele/joueur/Joueur.java create mode 100644 src/modele/joueur/JoueurHumain.java create mode 100644 src/modele/joueur/JoueurIA.java create mode 100644 src/modele/piece/Cavalier.java create mode 100644 src/modele/piece/Fou.java create mode 100644 src/modele/piece/Piece.java create mode 100644 src/modele/piece/Pion.java create mode 100644 src/modele/piece/Reine.java create mode 100644 src/modele/piece/Roi.java create mode 100644 src/modele/piece/Tour.java create mode 100644 src/out/Main.class create mode 100644 src/out/controleur/ControleurPartie.class create mode 100644 src/out/controleur/ControleurReseau.class create mode 100644 src/out/modele/Case.class create mode 100644 src/out/modele/Couleur.class create mode 100644 src/out/modele/Coup.class create mode 100644 src/out/modele/ModeDeJeu.class create mode 100644 src/out/modele/Partie.class create mode 100644 src/out/modele/Plateau.class create mode 100644 src/out/modele/joueur/IA.class create mode 100644 src/out/modele/joueur/Joueur.class create mode 100644 src/out/modele/joueur/JoueurHumain.class create mode 100644 src/out/modele/joueur/JoueurIA.class create mode 100644 src/out/modele/piece/Cavalier.class create mode 100644 src/out/modele/piece/Fou.class create mode 100644 src/out/modele/piece/Piece.class create mode 100644 src/out/modele/piece/Pion.class create mode 100644 src/out/modele/piece/Reine.class create mode 100644 src/out/modele/piece/Roi.class create mode 100644 src/out/modele/piece/Tour.class create mode 100644 src/out/reseau/Client.class create mode 100644 src/out/reseau/MessageJeu.class create mode 100644 src/out/reseau/Serveur.class create mode 100644 src/out/reseau/TypeMessage.class create mode 100644 src/out/vue/CaseSwingUI.class create mode 100644 src/out/vue/PlateauSwingUI.class create mode 100644 src/out/vue/Vue.class create mode 100644 src/out/vue/VueConsole.class create mode 100644 src/out/vue/VueGraphiqueSwing.class create mode 100644 src/vue/CaseSwingUI.java create mode 100644 src/vue/PlateauSwingUI.java delete mode 100644 src/vue/VueGraphique.java create mode 100644 src/vue/VueGraphiqueSwing.java diff --git a/README.md b/README.md index 2884684..d81b5e5 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ src/ -├── modele/ ← 🔵 Couche Modèle (logique du jeu) +├── modele/ Couche Modèle (logique du jeu) │ ├── Partie.java │ ├── Plateau.java │ ├── Case.java │ ├── Coup.java -│ ├── Couleur.java ← enum -│ ├── ModeDeJeu.java ← enum +│ ├── Couleur.java enum +│ ├── ModeDeJeu.java enum │ ├── piece/ -│ │ ├── Piece.java ← abstraite +│ │ ├── Piece.java abstraite │ │ ├── Roi.java │ │ ├── Reine.java │ │ ├── Tour.java @@ -15,24 +15,24 @@ src/ │ │ ├── Fou.java │ │ └── Pion.java │ ├── joueur/ -│ │ ├── Joueur.java ← abstraite +│ │ ├── Joueur.java abstraite │ │ ├── JoueurHumain.java │ │ ├── JoueurIA.java │ │ └── IA.java │ -├── vue/ ← 🟢 Couche Vue (console ou graphique) -│ ├── Vue.java ← interface +├── vue/ Couche Vue (console ou graphique) +│ ├── Vue.java interface │ ├── VueConsole.java │ ├── VueGraphique.java │ -├── controleur/ ← 🟠 Couche Contrôleur +├── controleur/ Couche Contrôleur │ ├── ControleurPartie.java │ └── ControleurReseau.java │ -├── reseau/ ← 🌐 Réseau (mode en ligne) +├── reseau/ Réseau (mode en ligne) │ ├── MessageJeu.java -│ ├── TypeMessage.java ← enum +│ ├── TypeMessage.java enum │ ├── Serveur.java │ └── Client.java │ -└── Main.java ← Point d'entrée du jeu +└── Main.java Point d'entrée du jeu diff --git a/src/Compilateur.bat b/src/Compilateur.bat new file mode 100644 index 0000000..67b919f --- /dev/null +++ b/src/Compilateur.bat @@ -0,0 +1,127 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion +pushd "%~dp0" + +:: === CONFIGURATION === +set "OUT=out" +set "MAIN_CLASS=Main" :: Si Main est dans un package, ex: monpackage.Main +:: ===================== + +if "%~1"=="" goto :help + +if /I "%~1"=="help" goto :help +if /I "%~1"=="clean" goto :clean +if /I "%~1"=="build" goto :build +if /I "%~1"=="run" goto :run +if /I "%~1"=="count" goto :count +if /I "%~1"=="watch" goto :watch +if /I "%~1"=="purge" goto :purge +if /I "%~1"=="rebuild" goto :rebuild + +goto :help + +:clean + if exist "%OUT%" ( + echo Suppression du dossier "%OUT%"... + rmdir /S /Q "%OUT%" + ) else ( + echo Aucun dossier "%OUT%" a supprimer. + ) + goto :eof + + + +:build + where javac >nul 2>nul || (echo([ERREUR] javac introuvable dans le PATH & goto :eof) + + if not exist "%OUT%" mkdir "%OUT%" + + echo(Creation de la liste des sources... + dir /s /b *.java > "%TEMP%\sources.txt" + + for /f %%I in ('find /c /v "" ^< "%TEMP%\sources.txt"') do set COUNT=%%I + if "%COUNT%"=="0" ( + echo([ERREUR] Aucun fichier .java trouve dans %cd% + del "%TEMP%\sources.txt" >nul 2>nul + goto :eof + ) + + echo(%COUNT% fichiers trouves. Compilation... + javac -d "%OUT%" @"%TEMP%\sources.txt" + set ERR=%ERRORLEVEL% + del "%TEMP%\sources.txt" >nul 2>nul + + if %ERR% EQU 0 ( + echo(Compilation reussie ! + ) else ( + echo([ERREUR] Compilation (code %ERR%) + ) + goto :eof + + + + + +:run + call :build + if %ERR% EQU 0 ( + echo( + echo(Execution de %MAIN_CLASS% ... + java -cp "%OUT%" %MAIN_CLASS% + ) + goto :eof + + +:count + for /f %%I in ('dir /s /b *.java ^| find /c /v ""') do set COUNT=%%I + echo %COUNT% fichiers Java trouves. + + :: Compte le nombre de ligne des fichier java + set /a LIGNES=0 + for /f "delims=" %%F in ('dir /s /b *.java') do ( + for /f %%N in ('type "%%F" ^| find /v /c ""') do set /a LIGNES+=%%N + ) + echo %LIGNES% lignes Java trouvees. + goto :eof + + +:watch + echo Mode surveillance active : recompilation a chaque changement detecte + echo Appuie sur Ctrl+C pour quitter. + set "LASTSTATE=" + :loop + for /f %%A in ('dir /s /b /a-d *.java') do ( + set "CURRENTSTATE=!CURRENTSTATE!%%~tA" + ) + if "!CURRENTSTATE!" NEQ "!LASTSTATE!" ( + set "LASTSTATE=!CURRENTSTATE!" + call :build + ) + set "CURRENTSTATE=" + timeout /t 2 >nul + goto loop + +:purge + echo Suppression des .class hors de "%OUT%"... + for /f "delims=" %%C in ('dir /s /b *.class ^| findstr /vi /c:"\%OUT%\"') do del /q "%%C" + goto :eof + +:rebuild + call :clean + call :purge + call :build + goto :eof + + +:help + echo Usage: build.bat [option] + echo. + echo build - Compile le projet + echo clean - Supprime le dossier de sortie "%OUT%" + echo run - Compile puis lance %MAIN_CLASS% + echo count - Compte le nombre de fichiers Java + echo watch - Recompile automatiquement si un fichier change + echo help - Affiche cette aide + echo purge - Supprime les .class hors de "%OUT%" + echo rebuild - Nettoie, purge et recompile le projet + goto :eof diff --git a/src/Main.java b/src/Main.java index ded306f..048d091 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,4 +1,68 @@ -public class Main { - -} +import controleur.ControleurPartie; +import controleur.ControleurReseau; +import modele.ModeDeJeu; +import modele.Partie; +import modele.Couleur; + +import vue.Vue; +import vue.VueConsole; +import vue.VueGraphiqueSwing; + +import modele.joueur.Joueur; +import modele.joueur.JoueurHumain; + + +public class Main { + public static void main(String[] args) { + // Déclaration des variables nécessaires + Vue vue; + Joueur joueurBlanc; + Joueur joueurNoir; + ModeDeJeu modeDeJeu; + ControleurReseau controleurReseau = null; // À initialiser si tu utilises le réseau + + int choixMode = 1; // à remplacer par Scanner plus tard + int choixAffichage = 3; // 1: Console, 2: JavaFX, 3: Swing + + modeDeJeu = ModeDeJeu.HUMAIN_VS_HUMAIN; + + + // Initialisation des joueurs et du mode de jeu + vue = new VueConsole(); + joueurBlanc = new JoueurHumain(Couleur.BLANC, vue, false, "Mathis"); + joueurNoir = new JoueurHumain(Couleur.NOIR, vue, false, "Pellel"); + + Partie partie = new Partie(joueurBlanc, joueurNoir); + + switch (choixAffichage) { + case 1 -> vue = new VueConsole(); + case 2 -> { + // vue = new VueGraphiqueJavaFX(); + } + case 3 -> vue = new VueGraphiqueSwing(partie.getPlateau()); + default -> { + System.out.println("Type d'affichage non reconnu. Console par défaut utilisée."); + vue = new VueConsole(); + } + } + + // Recalification de la vue pour chaque joueur humain + if(joueurBlanc instanceof JoueurHumain jb) jb.setVue(vue); + if(joueurNoir instanceof JoueurHumain jb) jb.setVue(vue); + + // if (joueurNoir instanceof JoueurHumain) { + // JoueurHumain jb = (JoueurHumain) joueurBlanc; + // jb.setVue(vue); + // } + // if (joueurNoir instanceof JoueurHumain) { + // JoueurHumain jn = (JoueurHumain) joueurNoir; + // jn.setVue(vue); + // } + + + // lancement de la partie + var controleurPartie = new ControleurPartie(partie, vue, controleurReseau, modeDeJeu); + controleurPartie.lancerPartie(); + } +} diff --git a/src/controleur/ControleurPartie.java b/src/controleur/ControleurPartie.java index 490275b..39a1e8d 100644 --- a/src/controleur/ControleurPartie.java +++ b/src/controleur/ControleurPartie.java @@ -1,5 +1,63 @@ package controleur; +import modele.joueur.*; +import modele.Coup; +import modele.Partie; +import modele.Plateau; +import modele.ModeDeJeu; +import vue.Vue; + + public class ControleurPartie { - + private Partie partie; + private Vue vue; + private ControleurReseau controleurReseau; + private ModeDeJeu modeDeJeu; + + public ControleurPartie(Partie partie, Vue vue, ControleurReseau controleurReseau, ModeDeJeu modeDeJeu) { + this.partie = partie; + this.vue = vue; + this.controleurReseau = controleurReseau; + this.modeDeJeu = modeDeJeu; + } + + public void lancerPartie(){ + System.out.println("==============================="); + System.out.println("BIENVENUE AU JEU D'ÉCHECS"); + System.out.println("===============================\n"); + + + vue.afficherMessage("Mode de jeu : " + modeDeJeu); + vue.afficherMessage("Joueurs : " + partie.getJoueurBlanc().getNom() + " (Blancs) vs " + partie.getJoueurNoir().getNom() + " (Noirs)"); + vue.afficherMessage("Les pions Noirs sont en bas. Les pions Blancs sont en haut. \n"); + + vue.afficherMessage("------- La Partie commence ! -------"); + vue.afficherPlateau(partie.getPlateau()); + //System.out.print("\n"); + vue.afficherMessage("C'est au tour de " + partie.getJoueurActif().getNom() + " de jouer."); + boucleDeJeu(); + } + + public void boucleDeJeu(){ + // Boucle principale de la partie + while(!partie.estFini()) { + try { + Joueur joueurPrecedent = partie.getJoueurActif(); // AVANT le tour + partie.jouerTour(); // Moteur de jeu + Coup dernierCoup = partie.getHistorique().get(partie.getHistorique().size() - 1); + vue.afficherPlateau(partie.getPlateau()); + //System.out.println(""); + vue.afficherMessage("Dernier coup : " + joueurPrecedent.getNom() + " a joué " + dernierCoup); + vue.afficherMessage("\nC'est au tour de " + partie.getJoueurActif().getNom() + " de jouer."); + } catch (IllegalArgumentException e) { + vue.afficherMessage("> Erreur : " + e.getMessage()); + } + } + + vue.afficherMessage("La partie est terminée !"); + vue.afficherMessage("Si vous souhaitez rejouer, relancez le programme."); + vue.afficherMessage("Si vous souhaitez voir l'historique des coups taper 1. Si vous souhaitez voir les captures taper 2."); + vue.afficherMessage("Merci d'avoir joué !"); + } + } diff --git a/src/model/Coup.java b/src/model/Coup.java deleted file mode 100644 index d959129..0000000 --- a/src/model/Coup.java +++ /dev/null @@ -1,23 +0,0 @@ -import java.awt.Point; - -public class Coup { - private int xDepart; - private int xArrivee; - private int yDepart; - private int yArrivee; - - public Coup(int xDepart, int yDepart, int xArrivee, int yArrivee) { - this.xDepart = xDepart; - this.yDepart = yDepart; - this.xArrivee = xArrivee; - this.yArrivee = yArrivee; - } - - public Point getOrigine(){ - return new Point(xDepart, yDepart); - } - public Point getDestination(){ - return new Point(xArrivee, yArrivee); - } - -} diff --git a/src/model/ModeDeJeu.java b/src/model/ModeDeJeu.java deleted file mode 100644 index 6d78352..0000000 --- a/src/model/ModeDeJeu.java +++ /dev/null @@ -1,3 +0,0 @@ -public enum ModeDeJeu { - -} diff --git a/src/model/Partie.java b/src/model/Partie.java deleted file mode 100644 index e69de29..0000000 diff --git a/src/model/Plateau.java b/src/model/Plateau.java deleted file mode 100644 index f5e1fc4..0000000 --- a/src/model/Plateau.java +++ /dev/null @@ -1,3 +0,0 @@ -public class Plateau { - -} diff --git a/src/model/joueur/IA.java b/src/model/joueur/IA.java deleted file mode 100644 index 54eb1c9..0000000 --- a/src/model/joueur/IA.java +++ /dev/null @@ -1,5 +0,0 @@ -package joueur; - -public class IA { - -} diff --git a/src/model/joueur/Joueur.java b/src/model/joueur/Joueur.java deleted file mode 100644 index 2b47b54..0000000 --- a/src/model/joueur/Joueur.java +++ /dev/null @@ -1,5 +0,0 @@ -package joueur; - -public class Joueur { - -} diff --git a/src/model/joueur/JoueurHumain.java b/src/model/joueur/JoueurHumain.java deleted file mode 100644 index af11573..0000000 --- a/src/model/joueur/JoueurHumain.java +++ /dev/null @@ -1,5 +0,0 @@ -package joueur; - -public class JoueurHumain { - -} diff --git a/src/model/joueur/JoueurIA.java b/src/model/joueur/JoueurIA.java deleted file mode 100644 index 881a3ff..0000000 --- a/src/model/joueur/JoueurIA.java +++ /dev/null @@ -1,5 +0,0 @@ -package joueur; - -public class JoueurIA { - -} diff --git a/src/model/piece/Cavalier.java b/src/model/piece/Cavalier.java deleted file mode 100644 index 5f64be4..0000000 --- a/src/model/piece/Cavalier.java +++ /dev/null @@ -1,5 +0,0 @@ -package piece; - -public class Cavalier { - -} diff --git a/src/model/piece/Fou.java b/src/model/piece/Fou.java deleted file mode 100644 index adb1668..0000000 --- a/src/model/piece/Fou.java +++ /dev/null @@ -1,5 +0,0 @@ -package piece; - -public class Fou { - -} diff --git a/src/model/piece/Piece.java b/src/model/piece/Piece.java deleted file mode 100644 index 9fe09bd..0000000 --- a/src/model/piece/Piece.java +++ /dev/null @@ -1,3 +0,0 @@ -public class Piece { - -} diff --git a/src/model/piece/Pion.java b/src/model/piece/Pion.java deleted file mode 100644 index 250e85d..0000000 --- a/src/model/piece/Pion.java +++ /dev/null @@ -1,5 +0,0 @@ -package piece; - -public class Pion { - -} diff --git a/src/model/piece/Reine.java b/src/model/piece/Reine.java deleted file mode 100644 index 6439724..0000000 --- a/src/model/piece/Reine.java +++ /dev/null @@ -1,5 +0,0 @@ -package piece; - -public class Reine { - -} diff --git a/src/model/piece/Roi.java b/src/model/piece/Roi.java deleted file mode 100644 index 49b7318..0000000 --- a/src/model/piece/Roi.java +++ /dev/null @@ -1,5 +0,0 @@ -package piece; - -public class Roi { - -} diff --git a/src/model/piece/Tour.java b/src/model/piece/Tour.java deleted file mode 100644 index 6c300d0..0000000 --- a/src/model/piece/Tour.java +++ /dev/null @@ -1,5 +0,0 @@ -package piece; - -public class Tour { - -} diff --git a/src/model/Case.java b/src/modele/Case.java similarity index 74% rename from src/model/Case.java rename to src/modele/Case.java index f76a868..f61bf38 100644 --- a/src/model/Case.java +++ b/src/modele/Case.java @@ -1,3 +1,6 @@ +package modele; +import modele.piece.Piece; +import java.awt.Point; public class Case { private int x; @@ -25,4 +28,11 @@ public class Case { public boolean estVide() { return piece == null; } + + @Override + public String toString() { + return "(" + x + "," + y + ")"; + } + + } diff --git a/src/model/Couleur.java b/src/modele/Couleur.java similarity index 72% rename from src/model/Couleur.java rename to src/modele/Couleur.java index f704115..70e9fb0 100644 --- a/src/model/Couleur.java +++ b/src/modele/Couleur.java @@ -1,4 +1,6 @@ +package modele; public enum Couleur { BLANC, NOIR; + } \ No newline at end of file diff --git a/src/modele/Coup.java b/src/modele/Coup.java new file mode 100644 index 0000000..0f58583 --- /dev/null +++ b/src/modele/Coup.java @@ -0,0 +1,72 @@ +// package modele; +// import java.awt.Point; +// public class Coup { +// private int xDepart; +// private int xArrivee; +// private int yDepart; +// private int yArrivee; + +// public Coup(int xDepart, int yDepart, int xArrivee, int yArrivee) { +// this.colDepart = colDepart; +// this.yDepart = yDepart; +// this.xArrivee = xArrivee; +// this.yArrivee = yArrivee; +// } + +// public Point getOrigine(){ +// return new Point(xDepart, yDepart); +// } +// public Point getDestination(){ +// return new Point(xArrivee, yArrivee); +// } + +// @Override +// public String toString() { +// Point origine = getOrigine(); +// Point destination = getDestination(); + +// char colOrigine = (char) ('a' + origine.y); // y = colonne +// int ligneOrigine = 8 - origine.x; // x = ligne + +// char colDest = (char) ('a' + destination.y); // y = colonne +// int ligneDest = 8 - destination.x; // x = ligne + +// return " " + colOrigine + ligneOrigine + " -> " + colDest + ligneDest; +// } + + +// } + +package modele; + +import java.awt.Point; + +public class Coup { + private int ligneDepart; + private int colDepart; + private int ligneArrivee; + private int colArrivee; + + public Coup(int ligneDepart, int colDepart, int ligneArrivee, int colArrivee) { + this.ligneDepart = ligneDepart; + this.colDepart = colDepart; + this.ligneArrivee = ligneArrivee; + this.colArrivee = colArrivee; + } + + public Point getOrigine() { + return new Point(ligneDepart, colDepart); // ligne = x, colonne = y + } + + public Point getDestination() { + return new Point(ligneArrivee, colArrivee); + } + + @Override + public String toString() { + char colOrigineChar = (char) ('a' + colDepart); + char colDestChar = (char) ('a' + colArrivee); + + return " " + colOrigineChar + ligneDepart + " -> " + colDestChar + ligneArrivee; + } +} diff --git a/src/modele/ModeDeJeu.java b/src/modele/ModeDeJeu.java new file mode 100644 index 0000000..d12e80f --- /dev/null +++ b/src/modele/ModeDeJeu.java @@ -0,0 +1,8 @@ +package modele; +public enum ModeDeJeu { + IA_VS_HUMAIN, + HUMAIN_VS_HUMAIN, + RESEAU_SERVEUR, + RESEAU_CLIENT, + IA_VS_IA; +} diff --git a/src/modele/Partie.java b/src/modele/Partie.java new file mode 100644 index 0000000..03a4904 --- /dev/null +++ b/src/modele/Partie.java @@ -0,0 +1,139 @@ +package modele; + +import modele.piece.Piece; +import modele.joueur.*; + +import java.util.List; +import java.awt.Point; +import java.util.ArrayList; + +public class Partie{ + private Plateau plateau; + private int nombreCoups; + public ModeDeJeu modeDeJeu; + + private Joueur joueurBlanc; + private Joueur joueurNoir; + private Joueur joueurActif; + + private List historique; + private List listeCapturesBlancs; + private List listeCapturesNoires; + + public Partie(Joueur joueurBlanc, Joueur joueurNoir) { + plateau = new Plateau(); + nombreCoups = 0; + historique = new ArrayList<>(); + listeCapturesBlancs = new ArrayList<>(); + listeCapturesNoires = new ArrayList<>(); + + this.joueurBlanc = joueurBlanc; + this.joueurNoir = joueurNoir; + this.joueurActif = joueurBlanc; + } + + public void jouerTour() { + // Logique pour jouer un tour + Coup coup = joueurActif.jouerCoup(plateau); + Piece piece = plateau.getCase((int)coup.getOrigine().getX(), (int)coup.getOrigine().getY()).getPiece(); + + // System.out.println(""); + // System.out.println("Origine du coup : " + coup.getOrigine()); + // System.out.println("Destination du coup : " + coup.getDestination()); + // System.out.println("Contenu de la case d'origine : " + plateau.getCase(coup.getOrigine()).getPiece().getSymbole()); + + + if(piece == null) { + throw new IllegalArgumentException("Aucune pièce à la position d'origine."); + } + if(piece.getCouleur() != joueurActif.getCouleur()) { + throw new IllegalArgumentException("Ce n'est pas votre pièce."); + } + if(!piece.estDeplacementValide(coup, plateau)) { + System.out.println("ICI"); + throw new IllegalArgumentException("Déplacement invalide."); + } + // System.out.println("sortie dans partie"); + + // Verifie si une capture a lieu + Point dest = coup.getDestination(); + Case caseDestination = plateau.getCase((int) dest.getX(), (int) dest.getY()); + + if(caseDestination.getPiece() != null) { + Piece pieceCapturee = caseDestination.getPiece(); + if(pieceCapturee.getCouleur() == joueurActif.getCouleur()) { + throw new IllegalArgumentException("Vous ne pouvez pas capturer votre propre pièce."); + } + + // Ajouter la pièce capturée à la liste des captures + if(pieceCapturee.getCouleur() == Couleur.BLANC) { + listeCapturesBlancs.add(pieceCapturee); + } else { + listeCapturesNoires.add(pieceCapturee); + } + } + + // Déplacer la pièce + plateau.deplacer(coup); + // Ajouter le coup à l'historique + ajouterCoup(coup); + // Changer de joueur + changerJoueur(); + + } + + public boolean estFini() { + // Logique pour vérifier si la partie est terminée + return false; + } + + public void changerJoueur() { + // Logique pour changer le joueur courant + // Par exemple, si le joueur courant est blanc, le changer en noir et vice versa + if (joueurActif == joueurBlanc) { + joueurActif = joueurNoir; + } else { + joueurActif = joueurBlanc; + } + } + + public void ajouterCoup(Coup coup) { + // Ajouter le coup à l'historique + historique.add(coup); + nombreCoups++; + } + + public Joueur getJoueurActif() { + return joueurActif; + } + + public List getCapturesParBlanc() { + return listeCapturesBlancs; + } + + public List getCapturesParNoir() { + return listeCapturesNoires; + } + + public List getHistorique() { + return historique; + } + + public int getNombreCoups() { + return nombreCoups; + } + public Plateau getPlateau() { + return plateau; + } + + public Joueur getJoueurBlanc() { + return joueurBlanc; + } + + public Joueur getJoueurNoir() { + return joueurNoir; + } + +} + + diff --git a/src/modele/Plateau.java b/src/modele/Plateau.java new file mode 100644 index 0000000..5a04ebf --- /dev/null +++ b/src/modele/Plateau.java @@ -0,0 +1,125 @@ +package modele; +import java.awt.Point; +import modele.piece.*; + +public class Plateau { + Case[][] cases; + + public Plateau(){ + // Création du plateau de jeu avec 64 cases + cases = new Case[8][8]; + for (int i = 0; i < 8; i++) { + for (int j = 0; j < 8; j++) { + cases[i][j] = new Case(i, j); + //System.out.print("|" + cases[i][j]+ "|"); + } + //System.out.println(); + } + + // Initialisation du plateau avec les pièces en debut de partie au bon endroit + this.initialiser(); + + } + + // public Case getCase(Point position){ + // int x = (int) position.getX(); + // int y = (int) position.getY(); + // return cases[x][y]; + // } + + // public Case getCase(Point position){ + // int x = (int) position.getX(); // colonne + // int y = (int) position.getY(); // ligne + // return cases[y][x]; // et non cases[x][y] + // } + + public Case getCase(int ligne, int colonne){ + return cases[ligne][colonne]; + } + + + + private void initialiser() { + // Mise en place des pièces sur le plateau + + // Placement des pions noirs et blancs + for (int i = 0; i < 8; i++) { + cases[1][i].setPiece(new modele.piece.Pion(Couleur.BLANC)); + cases[6][i].setPiece(new modele.piece.Pion(Couleur.NOIR)); + } + + // Placement des tours noirs et blancs + cases[7][0].setPiece(new Tour(Couleur.NOIR)); + cases[7][7].setPiece(new Tour(Couleur.NOIR)); + cases[0][0].setPiece(new Tour(Couleur.BLANC)); + cases[0][7].setPiece(new Tour(Couleur.BLANC)); + + // Placement des cavaliers noirs et blancs + cases[7][1].setPiece(new Cavalier(Couleur.NOIR)); + cases[7][6].setPiece(new Cavalier(Couleur.NOIR)); + cases[0][1].setPiece(new Cavalier(Couleur.BLANC)); + cases[0][6].setPiece(new Cavalier(Couleur.BLANC)); + + // Placement des fous noirs et blancs + cases[7][2].setPiece(new Fou(Couleur.NOIR)); + cases[7][5].setPiece(new Fou(Couleur.NOIR)); + cases[0][2].setPiece(new Fou(Couleur.BLANC)); + cases[0][5].setPiece(new Fou(Couleur.BLANC)); + + // Placement des rois et reines noirs et blancs + cases[7][3].setPiece(new Reine(Couleur.NOIR)); + cases[7][4].setPiece(new Roi(Couleur.NOIR)); + cases[0][3].setPiece(new Reine(Couleur.BLANC)); + cases[0][4].setPiece(new Roi(Couleur.BLANC)); + + + // Initialisation des cases vides + for (int i = 2; i < 6; i++) { + for(int j= 0; j < 8; j++) { + cases[i][j].setPiece(null); + + } + } + + // Affichage du plateau après initialisation + // System.out.println("Plateau initialisé :"); + // for (int i = 0; i < 8; i++) { + // System.out.print("Ligne " + (i ) + ": "); + // for (int j = 0; j < 8; j++) { + // System.out.print("|" + cases[i][j] + "|"); + // } + // System.out.println(); + // } + + // System.out.println(cases[0][0]); + // System.out.println(cases[0][1]); + // System.out.println(""); + + + } + + public void deplacer(Coup coup){ + Point origine = coup.getOrigine(); + Point destination = coup.getDestination(); + + Case caseOrigine = getCase((int) origine.getX(), (int) origine.getY()); + Case caseDestination = getCase((int) destination.getX(), (int) destination.getY()); + + System.out.println("case origine: "+ caseOrigine); + System.out.println("case destination: "+ caseDestination); + + Piece piece = caseOrigine.getPiece(); + if(piece == null) { + throw new IllegalArgumentException("Aucune pièce à la position d'origine."); + } + // if(!piece.estDeplacementValide(coup, this)) { + // throw new IllegalArgumentException("Déplacement invalide."); + // } + + // Déplacer la pièce de la case d'origine à la case de destination + caseDestination.setPiece(piece); + caseOrigine.setPiece(null); + + + } +} diff --git a/src/modele/joueur/IA.java b/src/modele/joueur/IA.java new file mode 100644 index 0000000..3df87a1 --- /dev/null +++ b/src/modele/joueur/IA.java @@ -0,0 +1,20 @@ +package modele.joueur; + +import modele.Plateau; +import modele.Coup; + + +public class IA { + private final int profondeur ; // Profondeur maximale de recherche pour l'IA + + public IA(int profondeur) { + this.profondeur = profondeur; + } + + + public Coup meilleurCoup(Plateau plateau) { + // Implémentation de la logique de l'IA pour calculer le coup + // Pour l'instant, on retourne null ou un coup par défaut + return null; // Placeholder, à remplacer par la logique d'IA réelle + } +} diff --git a/src/modele/joueur/Joueur.java b/src/modele/joueur/Joueur.java new file mode 100644 index 0000000..32a7b2d --- /dev/null +++ b/src/modele/joueur/Joueur.java @@ -0,0 +1,30 @@ +package modele.joueur; + +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public abstract class Joueur { + private final Couleur couleur; + private String nom; + + public Joueur(Couleur couleur, String nom) { + this.couleur = couleur; + this.nom = nom; + } + + public Couleur getCouleur() { + return couleur; + } + + public String getNom() { + return nom; + } + + public boolean estReseau() { + return false; // Par défaut, le joueur n'est pas un réseau + } + + + public abstract Coup jouerCoup(Plateau plateau); +} diff --git a/src/modele/joueur/JoueurHumain.java b/src/modele/joueur/JoueurHumain.java new file mode 100644 index 0000000..3249f23 --- /dev/null +++ b/src/modele/joueur/JoueurHumain.java @@ -0,0 +1,28 @@ +package modele.joueur; + +import vue.Vue; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class JoueurHumain extends Joueur { + private Vue vue; + private boolean reseau; + + public JoueurHumain(Couleur couleur, Vue vue, boolean reseau, String nom) { + super(couleur, nom); + this.vue = vue; + this.reseau = reseau; + } + + @Override + public boolean estReseau() { + return reseau; + } + + @Override + public Coup jouerCoup(Plateau plateau) { + return vue.demanderCoup(plateau); // la vue s'adapte si c'est réseau ou pas + } +} + diff --git a/src/modele/joueur/JoueurIA.java b/src/modele/joueur/JoueurIA.java new file mode 100644 index 0000000..bac5cb2 --- /dev/null +++ b/src/modele/joueur/JoueurIA.java @@ -0,0 +1,28 @@ +package modele.joueur; + +import vue.Vue; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class JoueurIA extends Joueur { + private Vue vue; + private IA ia; + + public JoueurIA(Couleur couleur, Vue vue) { + super(couleur, "IA"); + this.vue = vue; + this.ia = new IA(3); // Valeur par défaut pour la profondeur maximale + } + + @Override + public Coup jouerCoup(Plateau plateau) { + return ia.meilleurCoup(plateau); + } + + @Override + public boolean estReseau() { + return false; + } + +} diff --git a/src/modele/piece/Cavalier.java b/src/modele/piece/Cavalier.java new file mode 100644 index 0000000..97573ec --- /dev/null +++ b/src/modele/piece/Cavalier.java @@ -0,0 +1,47 @@ +package modele.piece; +import java.awt.*; + +import modele.Case; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class Cavalier extends Piece{ + public Cavalier(Couleur couleur) { + super(couleur); + if(couleur == Couleur.BLANC) { + this.symbole = "BC"; // Symbole pour le cavalier blanc + } else { + this.symbole = "NC"; // Symbole pour le cavalier noir + } + } + + @Override + public boolean estDeplacementValide(Coup coup, Plateau plateau) { + Point origine = coup.getOrigine(); + Point destination = coup.getDestination(); + + // Conventions : Point.x = ligne, Point.y = colonne + int ligneOrigine = origine.x; + int colOrigine = origine.y; + int ligneDest = destination.x; + int colDest = destination.y; + + // bornes de plateau + if (ligneDest < 0 || ligneDest > 7 || colDest < 0 || colDest > 7) return false; + + int deltaLigne = Math.abs(ligneDest - ligneOrigine); + int deltaCol = Math.abs(colDest - colOrigine); + + // mouvement en "L" + boolean enL = (deltaLigne == 2 && deltaCol == 1) || (deltaLigne == 1 && deltaCol == 2); + if (!enL) return false; + + // Etat de la case de destination + Case caseDest = plateau.getCase(ligneDest, colDest); + if (caseDest.estVide()) return true; + + // si la case est occupée + return caseDest.getPiece().getCouleur() != this.getCouleur(); + } +} \ No newline at end of file diff --git a/src/modele/piece/Fou.java b/src/modele/piece/Fou.java new file mode 100644 index 0000000..a9c2c12 --- /dev/null +++ b/src/modele/piece/Fou.java @@ -0,0 +1,21 @@ +package modele.piece; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class Fou extends Piece{ + public Fou(Couleur couleur) { + super(couleur); + if(couleur == Couleur.BLANC) { + this.symbole = "BF"; // Symbole pour le fou blanc + } else { + this.symbole = "NF"; // Symbole pour le fou noir + } + } + + @Override + public boolean estDeplacementValide(Coup coup, Plateau plateau) { + // Implémentation de la validation du déplacement pour le fou + return false; + } +} diff --git a/src/modele/piece/Piece.java b/src/modele/piece/Piece.java new file mode 100644 index 0000000..103335a --- /dev/null +++ b/src/modele/piece/Piece.java @@ -0,0 +1,34 @@ +package modele.piece; + +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public abstract class Piece { + private final Couleur couleur; + protected String symbole; + + public Piece(Couleur couleur) { + this.couleur = couleur; + this.symbole = ""; // Symbole par défaut, redéfini dans les sous-classes + } + + + public Couleur getCouleur() { + return this.couleur; + } + + public String getSymbole() { + return symbole; + } + + public abstract boolean estDeplacementValide(Coup coup, Plateau plateau); + + + @Override + public String toString() { + return this.getClass().getSimpleName() + " " + this.couleur; + } + + +} diff --git a/src/modele/piece/Pion.java b/src/modele/piece/Pion.java new file mode 100644 index 0000000..b4901de --- /dev/null +++ b/src/modele/piece/Pion.java @@ -0,0 +1,77 @@ +package modele.piece; + +import java.awt.Point; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class Pion extends Piece { + + public Pion(Couleur couleur){ + super(couleur); + if(couleur == Couleur.BLANC) { + this.symbole = "BP"; // Symbole pour le pion blanc + } else { + this.symbole = "NP"; // Symbole pour le pion noir + } + } + + + @Override + public boolean estDeplacementValide(Coup coup, Plateau plateau) { + //System.out.println("\nsuis dans estDeplacement valide\n"); + + Point origine = coup.getOrigine(); + Point destination = coup.getDestination(); + + int ligneOrigine = (int) origine.getX(); + int colOrigine = (int) origine.getY(); + int ligneDestination = (int) destination.getX(); + int colDestination = (int) destination.getY(); + + int deltaLigne = (ligneDestination - ligneOrigine); + int deltaCol = (colDestination - colOrigine); + + int direction = (this.getCouleur() == Couleur.BLANC) ? 1 : -1; + + boolean ligneDepart = (this.getCouleur() == Couleur.BLANC && ligneOrigine == 1) || + (this.getCouleur() == Couleur.NOIR && ligneOrigine == 6); + + boolean deplacementVertical = deltaCol == 0 && deltaLigne == direction; + boolean deplacementVerticalDouble = deltaCol == 0 && deltaLigne == 2 * direction; + + /* + System.out.println("Origine : ligne = " + ligneOrigine + ", col = " + colOrigine); + System.out.println("Destination : ligne = " + ligneDestination + ", col = " + colDestination); + System.out.println("deltaLigne = " + deltaLigne); + System.out.println("deltaCol = " + deltaCol); + System.out.println("Direction = " + direction); + System.out.println("Contenu destination : " + plateau.getCase(ligneDestination, colDestination).getPiece()); + */ + + // Déplacement simple + if (deplacementVertical && plateau.getCase(ligneDestination, colDestination).estVide()) { + return true; + } + + // Déplacement double + if (deplacementVerticalDouble && ligneDepart) { + int ligneIntermediaire = ligneOrigine + direction; + if (plateau.getCase(ligneDestination, colDestination).estVide() && + plateau.getCase(ligneIntermediaire, colDestination).estVide()) { + return true; + } + } + + // Capture en diagonale + if (Math.abs(deltaCol) == 1 && deltaLigne == direction) { + Piece pieceCible = plateau.getCase(ligneDestination, colDestination).getPiece(); + if (pieceCible != null && pieceCible.getCouleur() != this.getCouleur()) { + return true; + } + } + + //System.out.println("\nJe sors de estDeplacementValide\n"); + return false; + } +} \ No newline at end of file diff --git a/src/modele/piece/Reine.java b/src/modele/piece/Reine.java new file mode 100644 index 0000000..6b947f3 --- /dev/null +++ b/src/modele/piece/Reine.java @@ -0,0 +1,22 @@ +package modele.piece; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class Reine extends Piece{ + public Reine(Couleur couleur) { + super(couleur); + if(couleur == Couleur.BLANC) { + this.symbole = "BR"; // Symbole pour la reine blanche + } else { + this.symbole = "NR"; // Symbole pour la reine noire + } + } + + + @Override + public boolean estDeplacementValide(Coup coup, Plateau plateau) { + // Implémentation de la validation du déplacement pour la reine + return false; + } +} diff --git a/src/modele/piece/Roi.java b/src/modele/piece/Roi.java new file mode 100644 index 0000000..6534784 --- /dev/null +++ b/src/modele/piece/Roi.java @@ -0,0 +1,17 @@ +package modele.piece; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class Roi extends Piece{ + public Roi(Couleur couleur) { + super(couleur); + this.symbole = (couleur == Couleur.BLANC) ? "BO" : "NO"; // Symbole pour le roi blanc et noir + } + + @Override + public boolean estDeplacementValide(Coup coup, Plateau plateau) { + // Implémentation de la validation du déplacement pour le roi + return false; + } +} diff --git a/src/modele/piece/Tour.java b/src/modele/piece/Tour.java new file mode 100644 index 0000000..c565123 --- /dev/null +++ b/src/modele/piece/Tour.java @@ -0,0 +1,21 @@ +package modele.piece; +import modele.Couleur; +import modele.Coup; +import modele.Plateau; + +public class Tour extends Piece{ + public Tour(Couleur couleur) { + super(couleur); + if(couleur == Couleur.BLANC) { + this.symbole = "BT"; // Symbole pour la tour blanche + } else { + this.symbole = "NT"; // Symbole pour la tour noire + } + } + + @Override + public boolean estDeplacementValide(Coup coup, Plateau plateau) { + // Implémentation de la validation du déplacement pour la tour + return false; + } +} diff --git a/src/out/Main.class b/src/out/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..75a55a3ccc4e6c19db203e896e51a65a47b451ca GIT binary patch literal 1409 zcmX^0Z`VEs1_l>~U@itG24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc2EMY=RQ<5hROkG>;{2RcE(Ugx5!{RnqEHFoL4`q;ok5LW-J>cD`aBE7>pPh*aA{>a#C|R z7)%%$D9fQf+-l+zg)8C)0`7-Sh385kKD7+AHoGcaysU|?WmaAja%U;_*CFmN)sF}OpN zGCDJ`F>o<3Ff3s7VYFgnF=J;l;}GRo1u~Pt1gw*Rfti7UL7IVqL5+cdL31|)d*pTo zPM_rrQp*{{cQbHBZfD@}S~Wn2tQ49x5dEIbUX3~Y=H0$GV=iTXK-dFlH8Nm;4MC5#MgHko;u zC3cJq%o>_uoD3Wcoa_u-JPh0nJd6y|$@zIDMfo|YrA7MAaArVaQAuVhBLiCjl)>+l zo1c=Jld2Dqu?CsK$HTzSAi&7LTvnRO$iV4SR+_3GR+w^$OvJxT<)-1-uAkHAc$iNA*(kwH8+F+0^cKQB44Bs{Yu!#O{%xFj*J zq!`UGn5Qre<7O~pFlT45;9;-?1r<9qH83*pC#I!kCTFA;`KA^ZC#I)zF<3L$urt{5 zFxWBJGcxdkA{m~r7#aA|Q%k(^OH)gWoN^NLk{KB!G&Esxp9L1zhe%s$Y246-7Tc6Zog@VldykZ5A!Nm&2`FSM@sd)-XiN$&f2uZMi5waPH zr6qa_TpSGkj0`He5TM|br~t`<3d#Aoxv6={sS1h;5IJ3tUjlg;f*67s8Mx9@O9FBd zOTal!2oZu%F>6q4h4L_jF@z&U5LA+pL0AJ8;!q)L%`lMZkvt4hppZhukz;a6W||NK z6N3>K0|!Ga4?`TN4B}48FHO#YWK)p71RjP&h9pJ?_SE7Mx6Hgua7h#el1brVNCoNO z1jSlWNPcM%NHm>?A%h{4k%2cowZtQ{xFo+Qvk+9qfII@uf~6&yIr=`C#U<9<4A~4h z>kK_!ERCvv1ga|$~{DI)_n zG&MQrmlg;yFf(`wF|aTgu`^UMGAM!V0OxVfoSfA3#2m+>^wQkayb{-n$jF|#DKN}(tf97H+_MX8{Cky@pYld4cql%HOdn46ob$HCCd$dHVw ztt>yYNFhf(10ISBDXGN@$@!%P#R?^f1*t^}hI$IPw1HG67L=40rNR^&>2WZ$GBSwz zrWPe!|amlP!y_@b zAh}dip{!VeQ9%Qop*1-eCNna~IIDxAGO<*lB)_x>WC$aO0LPjh2g6iG1}T@+qP)!1 zB5?47O-odO1RWy>!*oUlSuXrW%w%NXu~Tp@DoQOa0%_-GW0=jwFo$6-JHtFsNj0C5 zK?USHNbR4QSC*fhst+lyASJt7Vsc4-Q6(e84CDe0st^(m9*KD=IjO}eKKc3Cr3KcQ zr5ut7ipG%2f>bQZqmk4@^A~cKgBszSn3EHnS(0ka$iU;7mzP@PoRe5woLbDzu!xaC z6~j;1oXXCygpolGzfwj9Hi*9%6d5=em>3usSQwZ|`)yVt@*=Z)339#^9i}g@Jt=gWEO+ zhg}SwNGgPU;EIL(;7o|>fSn8>$mT?Vbw|T=Z)1o-_(hL_n}LBrl7WLkia~%unn8j= zjzO0}p243%fgy@Pi6NCinW2Cu_*o3? z5LSc_gieM~X;5k>Llz?gOUh1$0w#t73?;q@pCVkWy^X;^2OJ({F!w?NiG3Rb#2@8Q z@#X)!LDukUZ)2$1#ZU_uEd?1XR0j_ep#}uA3BhauGdD6YGH@}JGE^{BFff55*NH)Z zfq_Arfr~+xL5M+*L6SkA!JNT>!JWZ~A(p|Ip_IXlp@PALp_0Lrp_{>sp^w3mVJ3qW z!x9E-hV=|K47(U?8M+u47`Pai8NM@=volnPGB7iAgA-m4LoWjZgBk-H!z>0yhCVPk e0ZdK;lT*OtG%z`XVFB0_Muvq9iy4+ONCE(#HZK4G literal 0 HcmV?d00001 diff --git a/src/out/controleur/ControleurReseau.class b/src/out/controleur/ControleurReseau.class new file mode 100644 index 0000000000000000000000000000000000000000..721ee56f559012485a35924727485fa2afb48a9c GIT binary patch literal 217 zcmX^0Z`VEs1_l=fUM>bE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc2I=Jdypp2)oYc}HeP=i`D782>v6PX4#W_DEm63tpCo?bAuQWF) zwJ0PpDJPYYfh#z_v?w{%Efd5MMc1eYvYA1Vft`Vg0R$Ks7(q^AU}WHAU|^7C0Pz_Z lShcn@Fm7aEU|?k6VqjokV_;-pU|?ooWZ-6CU|?e40RR&QE$RRO literal 0 HcmV?d00001 diff --git a/src/out/modele/Case.class b/src/out/modele/Case.class new file mode 100644 index 0000000000000000000000000000000000000000..60bc695ceab3fc3e3d14eccc560c88e093de4895 GIT binary patch literal 1223 zcmX^0Z`VEs1_l=fYc2*R24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3W4-29Z(oK$`1#Nt#&2F40T21ZYi5U%*eo6keQmC%E%z%1JwrR>j!{Dt=Snw85#J%)+d&i=m+Fy=9O?Uh%ktQ zTqeQDz^dWtsTn53z`!8I!ywHd!^j|>o0y&IoS&DRSQ4IDlHr`6S6q^qS5nN#AO=$F z12zlnmEe-1%)E4KMg|t={FGEi27aH+yi~u^+@#c^ki?{%R7M8w^wg4o{Nl`#%=|n? z1|bbih;Fz`tQi?Nic?F#PGw{e*TCij%`ip=4v;w@|9~8!iA@zF1AA(5NmwSx9n2b< zQH%_{!6k{w*}jPdP`7ZDK~Coc1->50vy2P^PWkyI z#U(|F1-_{z8Tl#291MD(pkvfw)Z}MlFyLY^WH4f9Fb0L72_u6FNEalwGxN&wvs3jU z7DEEnEit(yzo?RtVTJ}IG{BC4DukHtk(if~lUl6elb@emT40T&3}O(n2#Us#%7Rp6 zNvQH@BoiR%&l(yN$aXs?=HvutmZVxUGVplj<)s!m=Oh*vrxvp_m@_h{V)zN0Q`s3T z85!j8D`jM0gZPUB4D4DmTN!w@7`HMAY-C_yU}TVEU|76#t!3}PGLrhsf_U=UMfvT5fU@3R}SeVyY~0d5`!9tK`U26mM&N1ssFU`7VPXmpKS4EziN>HWr_MZiFxVz{z+M>$tBiY3?dAo>C!t*tN7}wlhd>#IOgXkCTakL4W~_H5owqwFJ08 zQ3iFcCIbt|wG4u+dl?ubnKv;o2S>7OVqg!(bOi^4HiH&anVqxisXWoF=IU}2DAU}9imfVfA8K^N>UJpjCfs@wno literal 0 HcmV?d00001 diff --git a/src/out/modele/Coup.class b/src/out/modele/Coup.class new file mode 100644 index 0000000000000000000000000000000000000000..dc826b07a6b7b73a856b90b62e9075b72c50bcb8 GIT binary patch literal 1122 zcmX^0Z`VEs1_l=f3oZsG24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3W4-29Z(oK$`1{L%tO2JW29^t@D;)PlsK5=I6_ zPmp3h9tM7pO3vi`9Ec1^RFH>32qek_*5O!Glv$RV3X%}vVGspLa3$yGK!w>E#2Fd* z!0t*cFVPRk&&(^~Vi04H1UXrXk%3ji(^E4{h=GAYhKE6xL5`6@JU1~r)j2;eIk6-> zvn0bgKd-nXF|VYUkwHSk+0)rm(+6xC*q6a2MVWc&){G478lIjYgBTfDobyvs85#I} zGV@aXN^_G^i$W5Ua#9%?xYAQg{EITvGxJgz8H6;T#=sqA&B(x)o?7CPT3nKumspaS zpU23+QIZd_fssK3rUBJnuHgLAqU2P!Oppznpn%i^xsH)Rz$rh!q`0IgvA{RABqKki zn1ex^k%3czkx@a{PJxk;pN&D6i$RY;pPj(~O(AtgoRsT za!GzsB_qQO4Ws~oDumeKk(if~lUl6elb@emT40T&3}O(n2#Us#%7Rp6NvQH@BoiR% z$r>7J;6Q*H;hdP06P#I+YR$;NAcl0|UZ#KCljF22KVS1|bGF24)6zaQJ92XfiM`a4;}3=rAxcXfYTuFfed2 OFftf3m@=3%NCE&i)cLmn literal 0 HcmV?d00001 diff --git a/src/out/modele/ModeDeJeu.class b/src/out/modele/ModeDeJeu.class new file mode 100644 index 0000000000000000000000000000000000000000..9c503e1d6e9d5d862857251cc258be4dfb3b1f41 GIT binary patch literal 1119 zcmX^0Z`VEs1_l=fYjy@EMh1c0{FKz3RDIw4lvI~guhddb21W)J9tKthHbw>>PsjMM z;CPQvUq??rMg}1tbj8*n)f_wwoFLT#5OoM0AW3c>1|EqM_-Nl~|UjpOcuEuJ50em6}{)&BY+gAji%i z&%>a=pvcI;hfv^}SDMSnz+RS^Q=00Z#>il*fu!3xC$YHL8c86yq$o2l-5S{jkO5%x zm3bIc7*rV<*laTMGE3|j8N`r{g6j0t4C7#6c1$rNgQ$ik7JoA`u)!3tIOnINGBWV{Wag#%mF6a;7KJ1x<)kt)s9~{M6Eg@I z83cS&OEU6P0uqZ7b5l!Fi;5W;ID<3O^Abx+i&7aGm^C!R7#TQhl5?PbQb7s~kk4%} z4YjjoWZ(+UFD*(=b;|@fh7X?N^g!Y6V93D8Aj`nOz~&$cN_-3q4w9f`1*Ulz*uXSD zlokTf0#cy#z`(%3%D~BBz@X2-$Y998z@Wsy$N&Odn;3+*F^C^vkl4V$z`)301Tq^e z$Hc(Npuk|vzywv#1Qz8IV$|BfAaj6$5mUVh$QDKhh6V-(CQx)TFoU(qGcYqSGcYi) zYiY}DXHeRRVGl?jCldpM00S7CGJy1(32=d;6zW`S1{RQO8I(EpGB8FmZ(?8$j%3-y zz#bgQx`}}+IFfA>18;C7`z8i~U`%&$Fqku#K@BQ_8sxE?fiY4@jd?qR`ep`ZFh_$0 z%wY#}G+DtME-*)n4b0&MbF|sP9DyASI-41U5x$WEg*F2-11|#$gA@ZRgE|8ng9!sW UgCheI0}}(pQx*)CV9!|r02sy6LjV8( literal 0 HcmV?d00001 diff --git a/src/out/modele/Partie.class b/src/out/modele/Partie.class new file mode 100644 index 0000000000000000000000000000000000000000..9bd63444e541eca1bce17f1cc22ebb53d78a8636 GIT binary patch literal 3201 zcmX^0Z`VEs1_l>~C0q_u>#}Tny|C%$y9|3_R=%ygUqi4E&4?yf7t+ zMJ1W3j124r5Ved90zNP)h=?^vryvi55Q8uy19x72ZcvnUlTuf)Tk%%H-^z@3#}np#=} z*2u^p2J;R?RNo6M3ARv;hd~{rfeRu9G6`glCJ%!aNEm94V{%Dm8W)2OgDyLR9uI>) zg8?Ih2sDTw8lh$~GH`I+k9ZQo-^HLQGG7qmvPE|O(Kp`hlp&-9F z6Qn{RMLi!97J6I^UJU-AoDjgsAgTcg6|m{SB}JKe>DHQITns@B!R!nnJPe@>VT=qy z&|pP!868AMWxOI%V5auSnML4FHM%*jkiWn@r*Cjn5bTEn6ro*tq&8R8id*clRe z7?K#0QSx?hWpPPrE+YeTerX9KgDAwOnfdwwMVWae!6ikhiMiGs45^F^%%0AkTny<9 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 S7#JA17#JCv8Cn_I86*LaVxEKm literal 0 HcmV?d00001 diff --git a/src/out/modele/joueur/IA.class b/src/out/modele/joueur/IA.class new file mode 100644 index 0000000000000000000000000000000000000000..4f92ad26562ae31de7455ea417942a497869358c GIT binary patch literal 336 zcmX^0Z`VEs1_l=f5iSNM24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3U%-29Z(oK*d+{L<9YB7ILsMh32eqWrY{yp+_^ zB1Q&APeuk74NuK5Mg|t={FGEi27aH+yi~u^+@#c^ki?{%R7M7#+|FaeMPYeojH;QZ2}Cs7#JCZ zKyG7TU|?ckWMF0BWng6BV_;y=VqgNxb7^g7VAPV{%D}!6teT&Jfq{>KnSp_Ui-CoK nn}L&ohk=nnfI$$dPl|yNtdEIt16(~D10w?igAmv*kUhcxbRj!- literal 0 HcmV?d00001 diff --git a/src/out/modele/joueur/Joueur.class b/src/out/modele/joueur/Joueur.class new file mode 100644 index 0000000000000000000000000000000000000000..edeffc99079783e676d0eea4dc851cf24d90e59c GIT binary patch literal 618 zcmX^0Z`VEs1_l=fIW7h!24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3U{-29Z(oK*d+{L<9YB7H9~#mK;(oL`!gT3W=& zAm9U4;S3S61{uJ|!@$oVz{tRym!HeXAmoFvGq|KEGcVnmkwH}hT_dI{%`ip=7U%qw zR7M7VpUk{eztY^K)S{5Yq?}Yn2Cnqf5~!Vw3_=>3=*BTJu%)M#_<+WYH?~}DcI{#j0~J0Zx%V{mliNG$ip2Nkds)FnpkR$Y(;@JBLi1(erZv1s#_+= zIoyz-(F1vvMUjDnfr){Efr&u~6pUaNKZ5`R0|P4qBLgdgAOjVm<*V5U_z`K!wfq{`hn1O*oh=GNHfq|QWg@K2GlYy6kkAaVYkwJt(6l#Dh z10w??$XKl{4D1`=+StH?AX~&3#IY#lMOO+kPl7=bs#FSUDiiY>G$SQh7#XA(q`{&x IU~kC+02{S-NB{r; literal 0 HcmV?d00001 diff --git a/src/out/modele/joueur/JoueurHumain.class b/src/out/modele/joueur/JoueurHumain.class new file mode 100644 index 0000000000000000000000000000000000000000..0f096f555f4b95579e092de1d3edc2282f64a61c GIT binary patch literal 586 zcmX^0Z`VEs1_l=fc`gPf24;2!79Ivx1~x_pk=*>0)SOiPto+i{(jt8?FvZBgW|Nth zSz^b?psL{mRpFdpnv+^uWbKocSeB@tlbDyTA6!zDnU`*@8OF)L!NAGRz{SJB&A`LR zAO+QeVyH)HZenI0BLj0;X(}TFr%zdFs(x5$sx?S29}fdRg8(A~TTyCpYGNrP17j37 zgAju-JA()hgD8U-BLh2BIU@s4N@{LmUP@|_bAD+7BZEBLfdM&*C8>#})|yBzF0f`~ z(1)vldjV>gbrd$wFfy<>=clAHGVuFk=B4_T<|d^Ug(N2BfLxtgToMFzBD02O6e9yC z$d6E`a0Ta=7A2>;WrCCnLV^D+BLF1_lO321$?{0}BHK11|$R z10Mq@@B|qI7#JC(7^I0)SOiPto+i{(jt8? zFvZBgW|NthSz^b?psL{mRpFdpnv+^uWbKocSeB@tlbDyTA6!zDnU`*@8OF)L#lX$Z zz{A79%fQFTAO_WfVyLGhBLj0;X(}TFr%zdFs(x5$sx>=<03(9{s%nrE`5A;j?h|HY zVA1e|7%$4hAjTlh$iS4D$jBfBa}?ADPe*Gm27U%f9tJ4}X+{Q~+|^ zwv2&+Q)>%@i1s!Hi4AbAYz&MH3=AR+j0_44icsZJ42)n=CgwG0>LeK$8I-^-Rt5lw C5_oa| literal 0 HcmV?d00001 diff --git a/src/out/modele/piece/Cavalier.class b/src/out/modele/piece/Cavalier.class new file mode 100644 index 0000000000000000000000000000000000000000..c6896f99ec61d5ed43575b5944e414898c4d88ac GIT binary patch literal 1160 zcmX^0Z`VEs1_l=fZ!QKV24;2!79Ivx1~x_pq1^nG)SOiPg3Q$9RQ&)D$;iNFlbM%U zV#mlJtlH5JXMVWc&)*K9Cj0{YE&Rh%<43g{&QalXO3^I%i+)%Te^GgdD8Mx9@OZ}cP_k_<)$ z=ES68Mg|rQPfbrQ1_K5|b_OFJ24e;jL>LC-B$lKmmNGK1r>B-UCl;qNG6-sTdTPQ$ zGO;+-nv21V!JM7Jf``G9!3xRCVCC$o#U){xDXEMM%o>_eAf+}u47Ln*j0_y4K7Jc&h||#fbvCBi%VQm3vv>ZQ*%@EO2QIzz>ZWvPG1GqFn>bB!CEtl zk%22XzqBYh)h!cjEG&8Gfg*%KkwJigi2($d7#Kn6nSqhPg@J(~ih&6%E~BNroqV_*Q8|DQpWfr*_#fSrMZfq|8Qk-?q817Z)OIs-EUF9QR^BJFJq;(prO7-X$j zbhj`ln6c_^VNf$;lVkyL*g=$<8HXtQYz8q=b^-Rq4E&-Tvl+NVIRx03Ft9SO5oH%; zP1(VqX~rqaA<713afx!WE@0pk45AFI3}Ou243Z3j z3{ni@4AKm83^EL=4Dt;242le%3`z{a45|!83~CIO44Mqh3|b7m47%VDF=pWU&tMBG z0R-3?B-j}Y*clYr859{A85tQE82>WJGcs~BJ23uX;9&g2Ak5BSCgi}#z{ubUc7PWE D&~NEA literal 0 HcmV?d00001 diff --git a/src/out/modele/piece/Fou.class b/src/out/modele/piece/Fou.class new file mode 100644 index 0000000000000000000000000000000000000000..ece9d3131863e1579784775673d7b8427650971c GIT binary patch literal 500 zcmX^0Z`VEs1_l=fIW7h!24;2!79Ivx1~x_pq1^nG)SOiPg3Q$9RQ&)D$;iNFlbM%U zV#mlJtl%t1#075orHl;h#g(~9`8lbK3_?CxiDilUIf;4c z`oSednR)5f91LQN3`~A*j0`N!`6;Q44E#Qsd8vM-xk;%-A&E&KUA)01iOJc%i3L!; zNNRD3OKL$*VsdJ3YFNlh%Z){J6g;0n$!ElN&x%LEzA z;g(;j2XYUCB7*<}69Wh^F))Gxl7W#yoPmKMih&6%E~BNroq#2#O(a3*{K(*%=gg7!(BZGKuVs@%?eqM57NqA;ShI4*iaY#})|yd_3>+o-5N9(oa0Ta= z7A2>;Wr7_5P9}Pw2x4RqaLUgwDK05WEbvV&$;eMB=3p>kWMF1gVB}|GFymq{XRu&r zumlC46(fTRNDm}&X6BXUXQ%2zEP#ZlTViraeo-YO!wlrGgeruX?va?6l9O7j;*+1B zU0Ps`8Nf&)C>ld53sSKtk493DB?Ul@a8At03C=7@wPs}C@yyFhEdr;=)M9o9TSf*| z3_oFWDm#NcBZC}%rHl-05Pz{KGH@_3F)%PNF$jUODFXuo3n;TOFfgz(Ffy<*s53A! zXfQA^m@qJb)d^^AXJFLQ-patPCB(axfqx?d0|O(2CIbV55CaPX0|Pe$3j+@WCj&17 zKLZ~FBZC%$Hq-=J21W)(khxl07}z(!wXuN(g%}tabQol?DCI|2D#pUdpv#~KHb5V) zMTdb2Y>}Nv;BL)Tr4hBXBQwBx`V+Lym R1_mw$Mg|)OI|c^^NdUv#IUN81 literal 0 HcmV?d00001 diff --git a/src/out/modele/piece/Pion.class b/src/out/modele/piece/Pion.class new file mode 100644 index 0000000000000000000000000000000000000000..3e454d69dc840b7b382199802db90c586584575c GIT binary patch literal 1336 zcmX^0Z`VEs1_l=fKQ0C)24;2!79Ivx1~x_pq1^nG)SOiPg3Q$9RQ&)D$;iNFlbM%U zV#mlJtlmAOgzIjM{cLOxlEWr_MZiFxVz z!6ikRdFj?13}TE7Onw1e3=#~I>EugKEpbULF3HSGEXmBz<6=-`P-16L=3!7_P-SG` z13Lh&laYZXJ+&l)k%3u5(*>kdorggKqz)t;$;BYRpvA+W&7cEu0yNkd8H6-6(Zd52 zka|1}`k+u`@$>f#;$kplFk)vg=3y{lFhzuHKu%&wYGNrP1ABUEiF0CcDkFoShNmaO zyu{*EYc2+J1`BouOCAO*25Y3i04rxtEiMVmOi2YhI*N5#iV6m2(3~~b#gBBwLi*r86 zDt@2Lyi~u^+@#c^ki;ZVT=E8&BqnG3CKf>XBB{kCE~y1MiOH$Csd*(~i8)|5Dj+Ai z0&7^XL4(0sGm4RcD>%QjC^^+F6J#uBKxTfP9w?R=6d4258SiGdN6z!?}B+!+`c zq8OOK;xby=+ZhMP zZDY^`JC2=YIRgum88=*jQ^WFlaC|GiWl*U@&D^ z&0xl`mcfc)JA*aDJ_Z|xiww35w;1dg?l3qrykT%*_{reP$i?8s$iv_bjwve!-v11) x4BX(Dl3-^rWM@!hXHaAW0|o{M#y<>#i~`IM8bk^+f=Dq&J$(j71|P7SeF6Hb4NL$4 literal 0 HcmV?d00001 diff --git a/src/out/modele/piece/Reine.class b/src/out/modele/piece/Reine.class new file mode 100644 index 0000000000000000000000000000000000000000..9c2b03c272ee287a5a53f7984dd0e0f6eb8d4c6c GIT binary patch literal 504 zcmX^0Z`VEs1_l=fIW7h!24;2!79Ivx1~x_pq1^nG)SOiPg3Q$9RQ&)D$;iNFlbM%U zV#mlJtlH1wpBqd8v#H?8TM2N%=Xcj0{3PS&3zd`ZH5JX zMVWc&)*K9Cj0{YEL5vJ6&iN^+j12rfnR%&xrMXF|MInhvAYHt{C5g$|zKI1;zDR0u ziA!ohPGWLuZfaghSYl2lNTUL>{|c;OE)K{^EJ;l)wbqPcWZ(+UFD*(=b;|@9%LR6x z9>_%uiVOk_Obj5v#J~s&Oa?{%tH#3e!bnT!nV#g(~9`8lbK3_?Cx ziDilUIf;4c`oSednR)5fj0`N!`6;Q44E#Qsd8vM-xk;%-A&E&K)x5zaiOJc%i3MOj zJA*VMg8;gIMh218;u4qCf}F(U)ZEm(lCZ>_OptL3$bK%chWR2OC$S_ovD8{KijjdU zIKQ+gIn^x_WEn?Lex@GCbOuERAqFM}5MW|p1O+bxBZD{t14A+cGgw?gOM5#5qn7q2 z2KHqP974Ry8CZq*w=xKBWME)mVvt~9VBlk5W?*38U|?n7WDsZIVvuBDU{GaX`VTUg zok575frEjOok8e710w?ylnwDWME+6XJBNI I16wB#0G*9%1poj5 literal 0 HcmV?d00001 diff --git a/src/out/modele/piece/Tour.class b/src/out/modele/piece/Tour.class new file mode 100644 index 0000000000000000000000000000000000000000..7d22e55724dadaf21597f783510fa15323f9f707 GIT binary patch literal 502 zcmX^0Z`VEs1_l=fIW7h!24;2!79Ivx1~x_pq1^nG)SOiPg3Q$9RQ&)D$;iNFlbM%U zV#mlJtlH5JXMVWc&)*K9Cj0{YEA&d+x&iN^+j12rfnR%&xrMXF|MInhvAYHt{C5g$|zKI1; zzDR0uiA!ohPGWLuZfaghSYl2lNTUL>_X@0G4i3mkEJ;l)wbqPcWZ(+UFD*(=b;|@9 z%L#Iw9>_rqiVOk_Obj5v#J~s&N(M#-aRvs4CbE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc2Hv97;?%@aednCa)VvZ#1{UZ1lvG9rexJ;|RKL>Pq|~C2#H5^5 zMh33n{L-T2RJTkJhZ~|?4`c&_A_F@E69Wh^GBARyW?*FCWME*BWdQLR7+AHoGcays eU|?Wm;9_84U}IopU|?WoU}WHCU|?Wk-~j+?G$W({ literal 0 HcmV?d00001 diff --git a/src/out/reseau/MessageJeu.class b/src/out/reseau/MessageJeu.class new file mode 100644 index 0000000000000000000000000000000000000000..cd8fdee9b1efd621916653212312a6feb4182655 GIT binary patch literal 201 zcmX^0Z`VEs1_l=fUM>bE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc2En4#;?%@aec#mL;>7e+uhddT1{UZ1lvG9rexJ;|RKL>Pq|~C2 z#H5^5Mh33n{L-T2RJTkJhaaIu4`dUAA_F@E69Wh^GBARiz`)4B$-uxM%K+jtFtBQE iXJFjOz`(%Bz{SA8z{bGHz`(%Fz{tSOz`(%7zyknb(k8$F literal 0 HcmV?d00001 diff --git a/src/out/reseau/Serveur.class b/src/out/reseau/Serveur.class new file mode 100644 index 0000000000000000000000000000000000000000..d0b5b16431779ee2d7eb28b0fe815d7347842128 GIT binary patch literal 195 zcmX^0Z`VEs1_l=fUM>bE24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc2EL-y;?%@a{ovH1veeQdMg|t={FGEi27aH+yi~u^+@#c^ki?{% zR7M7_;QZ2}hts;^M^gR89s)1{NL$Rt7dk20<5B zUq?R|*LWA#_yEVC5KmV|1`!`jJ=P#i96Su1AWfXU{-I&6zOH^DAW?1}1|ENRF8Ca8Z^7B#|8ALQR zeX^UhXB0Csh-+wK^)n*_8%zm{bAC!HBLlxrW?rga zX>L+#QAlD^PAVgV1{P~Iu>~L_gMe>pNk)E3Kw?p1ZfZ$tQ86O}XK-eEUSdgUQ7R(? zvxa6EBLjy`at_o-YDhr=^0y5(W9_UN8MuP;ON)|I-7-NA5C!t*tN7}wlm0V#IOgXkCTakL4W~_bs0eV^#r&;Q3-XfJ_8HL zwG85Hdl?ubnKv;o2S>7OVqg!BWZlHT6^!W?4hDS&J*eg&sAj$042+RN3e4LX6gM+4 zgE>kpU=BN&qs$8CaP44F+04L;aHkMhKMMmd11p0R0~>=n12Y2?1H_pI42EFm8UX-` CC&hXI literal 0 HcmV?d00001 diff --git a/src/out/vue/CaseSwingUI.class b/src/out/vue/CaseSwingUI.class new file mode 100644 index 0000000000000000000000000000000000000000..e0e6be7b2d3f0e5353c746ca48982b90bccf65b7 GIT binary patch literal 1751 zcmX^0Z`VEs1_l>~OfCi{24;2!79Ivx1~x_pp{&HR#0vf5^31$+eXoGTywn^<1~!|_ zyv!0iMh0dL%`i>|4hBwk1}+{3ZU!Dk2L7_rRDI{f;?!V}mQYVd2HxcS(wx-NqLfs( z{Ja!K1_2+Cnfi(4CHl_!Ir&A_AQSj_82A|k7#Ub|GSl-?85tNoL83xD48kB$_T>DW z{JgwWkeDbBgBXK2BLizeW@>UOBZG)fZhlH?PO3hbuO9#s1sf^J!yv^V&B(x0oSKuG zT#^Yg0Az9$7Xt@_EDwVmgFGVxZ*gjgQ(|&1e_puxx>P@Gy4P?VaMT2z#p5}a9;%E%y& zWH{UuYfunsF=(?h=XVt53Xx%C&_l8x67-&$VDG|=NCF$74^eLo z@{K7EgBgQ4BLgQWoWQb-3~~@-uxkPZmnAf~U@E+P5|dJMxEQP%Y}grWc^K>%>=_w^ zFr$r;fh#?=B)Bp+DL)4kvlE|TorRxWm6lLb6TXQj3FgSt&-HDMw6ygvRd64}s zj10V>kO4=RTYg>%2ZI|U1FK_EW?~K(gENB%NWUi{K9J3aM56_RHxGjkgD)ckdvR(B z$OuLTA*gMjgbNaZMw~wnLjWk&Se<+voxMTM3*uo2hNUgH{GwDy+5&}UC=WvzLpUP? zb7D#gBZC%_fzJ841^IcYc_r3RKZ9&R2r@Egq9_Js8&6McDPJ>;k%7fIKP8osfgcq2 zex=^hN7#R2%SQz*jI2i;O_!tBk zgc*bwBpHMmL(V zGZZkevNLe7GiWg~vNKpSFfcGO#4yA{Ju1t<$iN5+D6K6FA{)SxAj{dnf@%zm3~>zc zP^EGVOyDqO1BHhO$f1l32({`Aj0_13iBPr3#!9R~GggyEMvg007n@cWM9t literal 0 HcmV?d00001 diff --git a/src/out/vue/PlateauSwingUI.class b/src/out/vue/PlateauSwingUI.class new file mode 100644 index 0000000000000000000000000000000000000000..15e29af97ebf0cfa602fcf0cb44b23ffb7cad2d2 GIT binary patch literal 904 zcmX^0Z`VEs1_l=fZ7v2T24;2!79Ivx1~x_pp{&HR#0vf5^31$+eXoGTywn^<1~!|_ zyv!0iMh0dL%`kQb4n_vy=xCp^(o}ut#NyOoklIjBYfc6(25xo+9v%i>kP;z~d_YcO zNory#R0$&kYjR?7YB4(lKO=)M$R_>7@)CXbqRbSZ#LE2A5-tWl20@TZgcuoEH9S2v z!?+l@7({p&L>a^w890kmOCahP8KgCQ;QAqAzKMB>>8VB5AQwt7GVsBro%3_@i?|rX z8KgiaOEWUCX?TK+W@nIPWZ(z663G`_3^EMzAax3i44O!GfDN(s^z_NiPf5*5)i20Q zO-|Jh0Fl<3U{@;fFeo#qFfuSFrlc@3XrbuMEy&MH%`36iL^#?xA127iz~Y>rlFG=y z?~|FA>Q|bZlv)&$n3R*s$iN$1l9-(Bn^*wla}_0~6(wdSXJi&JGH?awmlh?bx@Ce? z3ZsU!9?16$iVUFGWnf@rU;@Pn0|NsS10yJ&85kK<85kHD8Q2)u7#J8PYHep=)Dqwj z;5f>_&a{<*Q)@Q^UnGdXok3t5gD|s=v;fB}?;*o+39|Re03Nmcn&LFv*K?owWRgj@WAbC53q!r6<2AN1n7HJvA?F@2OtXf+b zIHiqbBw2&CBw4pHD2BH%F)shVsD+Vn`Tr>!!A@0UU|=v~;ALQ7;ACK7U}q3u;9`(x z;AT)~;9<~b;AgO95MW4U5N0T55Miig5M^j#;9=-u;AWV>Ai&DN`V7Wnt_8shCzTqmO&Dfh8Uz7R2dY(?hs&L`NP1(2y(zL1`&v@ JnqVJl0RX;(p3Gh(o}W^7Dfhvti-ZJ{hY+SbbbG%tkmQZMh2dg z)ZE0pl++^U{L%tO26+vi-29Z(oK*dQoWzpU#8PWbm;gwDH6sImVp>{eaz<(qQ~@J{ zFs7a`Bz3;2#l?x~sf-Mw8a@d7gG-7s^U|#~!x$O3g7Zs@l2hF>b5a=@IKoO(^+3wl q7#SEDm>EETnT3&om4S@`~E-nTp24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc20^f*(vr*^{ov%pyu8#RP6jRpZgvJ99tK_pJ`_`eD~n4~a~TT2M18_fJmSpDVx#l_N=NF~q=jElQ z7Be!4VRf1(JA)Y`19xtIN@`B3zH@$Q0T+WQg9Rv7Eg2cuH9S2%JvGBP7_1o?w73*N zAQ40)frw-fkpd!8K|~seNCy!a91OOM4B83`+Pb>By2KDd3=9nRJPZyDj*JZAxrx~z ze7D#;LXF}!{Cb)4q)Z%sl_E>nJKB@92CXD;Lpgw z3i4hJNLL^aLl8qSBLhczYDqw5YH}(lgyDu4fJF4c;?`UYp$uW{4BcWMFa52ZbL$D3AG-<|d^Ug(N2Bq%tz_ zq@?C1=B1<-fsz~}gS-YTTA0426sg!dNmEBLjb8 zT3TjuMrsk%Bt`~dOvA&F)cK|s7bm8tGBR)l=a&{Gr@Cc=9LSHzTza5VhLJ(QDL=oY zxTGktz&EudBR{2>gQ1d%^GjuRA$l+JY$iN2i7lR^$0Rs~QBSR(w0|P4qBdB^~U}VTFXT~MT!K`P-Ey=;6XU4Oe!8B5oQ5d{$gNeU}IolXb1Vh zY8!(Nh_>0rpu=n{BfznUA#)RhkjyRyI|hbr3=+(CvLG>QZ5i2Z3{D{LZ)5P7$-oEF z8^hwNgA1nX>JW?cUND8#H7kOh{Fc>npGZ-`YF_2G3s%V!s$ze=$fhFfx>YQw1n> zs4y@wFflMNaBN}_(uO(&l0ZOBB?bm326hH#1}0GT2@N?r1{MYu1_lN>ZRTwZ@dAk{ zw%RP)7~*#@B-^p>;fiFI^^atc@dw2w#2h{bW(EcZHwI1ycLpH_4+dt2QgBR{F_bef kFo-ZPGt@CKGE{)cDll2Y(89pLz{SAG(8|!x(8(YP0JZx`l>h($ literal 0 HcmV?d00001 diff --git a/src/out/vue/VueGraphiqueSwing.class b/src/out/vue/VueGraphiqueSwing.class new file mode 100644 index 0000000000000000000000000000000000000000..94c9efb0b582e39168e6044e14f177b29dfabb56 GIT binary patch literal 955 zcmX^0Z`VEs1_l=fOD+Z`24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00Sb_Nbc1|g853jN~p%)E4cFSnw^+*A$*E=C3}XAjrlUdaAs91BLl03C)8CMJPeu)T8s>$#i=De`N?2M2c_mDmSmQthU7Cch-0@3 z>?0i>23?SkxQbIt!ZM39lX6no8T1($*g+l%D+PJZIX@+pk%8YQGcVPzG&d==C7e+Mh2dg)ZE0pl++^U{L%tO26+vi-29Z(oK$^ih*)dF1V9R` z85!V4Kou}D2xICAV`Sh8&Mz%WPIb!!g|-+*9P5D+2ZJI5KLZm3BZD3TBLf2{NiZ-l zurM%!QY8Z;g8>5rLmQaSz~HB~oq)k^vOud<+H*0t~hc!VInqA`HF^VhoH7Mhv`AH%T%uFff5kKp4XY_JA}4 tBZD!62~?RB10z@&6XOPuVz6}(bqWlO45kcbP<1$sQ)6IcFbCUZ0RaCH$@l;O literal 0 HcmV?d00001 diff --git a/src/vue/CaseSwingUI.java b/src/vue/CaseSwingUI.java new file mode 100644 index 0000000..d089dc8 --- /dev/null +++ b/src/vue/CaseSwingUI.java @@ -0,0 +1,94 @@ +package vue; + +import modele.piece.Piece; +import java.awt.*; +import java.lang.ref.Reference; +import modele.Case; +import javax.swing.*; + +public class CaseSwingUI extends JPanel { + private int ligne; + private int colonne; + + private Color couleurdeFond; + private boolean selectionnee = false; + + private final JLabel label = new JLabel("", SwingConstants.CENTER); + private final Case caseModele; // reference vers la case de le modele + + public CaseSwingUI(Color couleurdeFond, int ligne, int colonne, Case caseModele) { + this.couleurdeFond = couleurdeFond; + this.ligne = ligne; + this.colonne = colonne; + this.caseModele = caseModele; + + setOpaque(true); + setBackground(couleurdeFond); + setPreferredSize(new Dimension(64, 64)); + setLayout(new BorderLayout()); + + // Ajout du label à la case + label.setFont(new Font("SansSerif", Font.BOLD, 28)); + add(label, BorderLayout.CENTER); + + this.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2)); + this.updateFromModel(); // Mise à jour de l'affichage à partir du modèle + } + + @Override + protected void paintComponent(Graphics pinceaux) { + super.paintComponent(pinceaux); // Pour effacer l'ancien objet + + // Couleur de fond (jaune) + if(selectionnee){ + this.setBackground(new Color(255, 215, 0)); // Jaune doux sélectionnée + }else{ + this.setBackground(this.couleurdeFond); + } + } + + // Rafrachit le contenu visuel depuis le model + public void updateFromModel(){ + Piece p = (caseModele != null) ? caseModele.getPiece(): null; + label.setText(toUnicode(p)); + label.setForeground(Color.BLACK); + repaint(); + } + + private String toUnicode(Piece piece) { + // Conversion du symbole en caractère Unicode + if (piece == null) return ""; + String symbole = piece.getSymbole(); + return switch (symbole) { + case "BP" -> "♙"; + case "BC" -> "♘"; + case "BF" -> "♗"; + case "BT" -> "♖"; + case "BQ" -> "♕"; + case "BK" -> "♔"; + case "NP" -> "♟"; + case "NC" -> "♞"; + case "NF" -> "♝"; + case "NT" -> "♜"; + case "NQ" -> "♛"; + case "NK" -> "♚"; + default -> symbole; + }; + } + + + // Getters/setters utiles pour l'IHM + public Piece getPiece() { return piece; } + public void setPiece(Piece piece) { this.piece = piece; } + + public boolean isSelectionnee() { return selectionnee; } + + public void setSelectionnee(boolean selectionnee) { + this.selectionnee = selectionnee; + this.setBorder(BorderFactory.createLineBorder(selectionnee ? Color.ORANGE : Color.DARK_GRAY,selectionnee ? 4 : 2)); + // Repaint pour mettre à jour la couleur de fond + repaint(); + } + public int getLigne() { return ligne; } + public int getColonne() { return colonne; } +} \ No newline at end of file diff --git a/src/vue/PlateauSwingUI.java b/src/vue/PlateauSwingUI.java new file mode 100644 index 0000000..e913972 --- /dev/null +++ b/src/vue/PlateauSwingUI.java @@ -0,0 +1,44 @@ +package vue; +import modele.Case; +import modele.Plateau; +import javax.swing.*; +import java.awt.*; + +public class PlateauSwingUI extends JPanel { + private final CaseSwingUI[][] cases = new CaseSwingUI[8][8]; + private final Plateau plateauModele; + + public PlateauSwingUI(Plateau plateauModele) { + this.plateauModele = plateauModele; + setLayout(new GridLayout(8, 8)); // Création de la grille 8x8 + for (int ligne = 0; ligne < 8; ligne++) { + for (int colonne = 0; colonne < 8; colonne++) { + // Détermination de la couleur de fond + boolean claire = ((ligne + colonne) % 2 == 0); + Color couleur = claire ? new Color(240, 217, 181) : new Color(181, 136, 99); + + // Récupère la case du modèle, ne la crée pas ! + var caseModele = plateauModele.getCase(ligne, colonne); + // Création de la case SwingUI + var caseUI = new CaseSwingUI(couleur, ligne, colonne, caseModele); + cases[ligne][colonne] = caseUI; // Stockage de la case dans le tableau + add(caseUI); + } + } + } + + // pour rafraîchir l'affichage + public void rafraichir() { + for (int ligne = 0; ligne < 8; ligne++) { + for (int colonne = 0; colonne < 8; colonne++) { + // Mettre à jour l'état de chaque case + cases[ligne][colonne].updateFromModel(); + } + } + revalidate(); // vérifie la disposition des composants + repaint(); + } + + public CaseSwingUI getCase(int ligne, int colonne) { + return cases[ligne][colonne]; + s} diff --git a/src/vue/Vue.java b/src/vue/Vue.java index 2345bad..a18a3d8 100644 --- a/src/vue/Vue.java +++ b/src/vue/Vue.java @@ -1,5 +1,10 @@ package vue; -public class Vue { - +import modele.Coup; +import modele.Plateau; + +public interface Vue { + Coup demanderCoup(Plateau plateau); // Demande un coup au joueur + void afficherPlateau(Plateau plateau); // Affiche le plateau actuel + void afficherMessage(String message); // Affiche un message (texte) } diff --git a/src/vue/VueConsole.java b/src/vue/VueConsole.java index ef52fac..8da6540 100644 --- a/src/vue/VueConsole.java +++ b/src/vue/VueConsole.java @@ -1,5 +1,75 @@ package vue; -public class VueConsole { +import java.util.Scanner; +import modele.Case; +import modele.Coup; +import modele.Plateau; +import modele.piece.Piece; +public class VueConsole implements Vue { + + + @Override + public Coup demanderCoup(Plateau plateau) { + // Implémentation pour demander un coup à l'utilisateur + Scanner scanner = new Scanner(System.in); + System.out.print("Entrez votre coup (ex: e2 e4) : "); + String input = scanner.nextLine(); + + // Traitement de l'entrée de l'utilisateur + String[] positions = input.split(" "); + if (positions.length != 2) { + System.out.println("Format de coup invalide."); + return null; + } + + String positionDepart = positions[0]; + String positionArrivee = positions[1]; + int[] coordDepart = convertirPositionEnCoordonnees(positionDepart); + int[] coordArrivee = convertirPositionEnCoordonnees(positionArrivee); + // covertion en colonne et ligne + int ligneDepart = coordDepart[0]; // c'est le y + int colonneDepart = coordDepart[1]; // c'est le x + int ligneArrivee = coordArrivee[0]; // c'est le y + int colonneArrivee = coordArrivee[1]; // c'est le x + + // Création du coup + return new Coup(ligneDepart, colonneDepart, ligneArrivee, colonneArrivee); + } + + @Override + public void afficherPlateau(Plateau plateau) { + System.out.println("\n a b c d e f g h"); + System.out.println(" +----+----+----+----+----+----+----+----+"); + + for (int ligne = 0; ligne < 8; ligne++) { + System.out.print((ligne) + " |"); + for (int col = 0; col < 8; col++) { + Case caseActuelle = plateau.getCase(ligne, col); + if (caseActuelle.estVide()) { + System.out.print(" |"); + } else { + Piece piece = caseActuelle.getPiece(); + System.out.print(" " + piece.getSymbole() + " |"); + } + } + System.out.println(" " + ligne); + System.out.println(" +----+----+----+----+----+----+----+----+"); + } + + System.out.println(" a b c d e f g h\n"); + } + + + + @Override + public void afficherMessage(String message) { + System.out.println(message); // Affiche le message dans la console + } + + private int[] convertirPositionEnCoordonnees(String position) { + int col = position.charAt(0) - 'a'; // Convertit 'a' à 'h' en 0 à 7 + int ligne = Character.getNumericValue(position.charAt(1)); // Convertit '0' à '7' + return new int[]{ligne, col}; + } } diff --git a/src/vue/VueGraphique.java b/src/vue/VueGraphique.java deleted file mode 100644 index 3d8acc3..0000000 --- a/src/vue/VueGraphique.java +++ /dev/null @@ -1,5 +0,0 @@ -package vue; - -public class VueGraphique { - -} diff --git a/src/vue/VueGraphiqueSwing.java b/src/vue/VueGraphiqueSwing.java new file mode 100644 index 0000000..422dca3 --- /dev/null +++ b/src/vue/VueGraphiqueSwing.java @@ -0,0 +1,44 @@ +package vue; + +import javax.swing.JFrame; +import java.awt.*; + +import modele.Coup; +import modele.Plateau; + + +public class VueGraphiqueSwing implements Vue { + JFrame fen = new JFrame("CHESS GAME"); + private final PlateauSwingUI plateauUI; + + public VueGraphiqueSwing(Plateau plateau) { + fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + fen.setResizable(false); + + plateauUI = new PlateauSwingUI(plateau); // Passe le modèle + fen.add(plateauUI, BorderLayout.CENTER); + + fen.setSize(800, 800); + //fen.pack(); // ajuste la taille selon le contenu + fen.setLocationRelativeTo(null); // centre la fenêtre à l'écran + + fen.setVisible(true); + } + + @Override + public void afficherMessage(String message) { + // Affichage du message dans la fenêtre graphique + } + + @Override + public Coup demanderCoup(Plateau plateau) { + // Demande un coup au joueur + return null; + } + + @Override + public void afficherPlateau(Plateau plateau) { + plateauUI.rafraichir(); + } + +} \ No newline at end of file