2025-07-20 17:43:35 +02:00
|
|
|
package controleur;
|
|
|
|
|
|
2025-08-12 22:18:58 +02:00
|
|
|
import modele.Coup;
|
|
|
|
|
import modele.ModeDeJeu;
|
2025-09-07 14:44:32 +02:00
|
|
|
import modele.Partie;
|
|
|
|
|
import modele.joueur.*;
|
2025-09-13 23:27:56 +02:00
|
|
|
import reseau.TypeMessage;
|
2025-08-12 22:18:58 +02:00
|
|
|
import vue.Vue;
|
|
|
|
|
|
|
|
|
|
|
2025-07-20 17:43:35 +02:00
|
|
|
public class ControleurPartie {
|
2025-08-12 22:18:58 +02:00
|
|
|
private Partie partie;
|
|
|
|
|
private Vue vue;
|
|
|
|
|
private ControleurReseau controleurReseau;
|
|
|
|
|
private ModeDeJeu modeDeJeu;
|
|
|
|
|
|
2025-09-17 00:23:46 +02:00
|
|
|
public ControleurPartie(Partie partie, Vue vue, ControleurReseau CR, ModeDeJeu modeDeJeu) {
|
2025-08-12 22:18:58 +02:00
|
|
|
this.partie = partie;
|
|
|
|
|
this.vue = vue;
|
2025-09-17 00:23:46 +02:00
|
|
|
this.controleurReseau = CR;
|
2025-08-12 22:18:58 +02:00
|
|
|
this.modeDeJeu = modeDeJeu;
|
2025-09-17 00:23:46 +02:00
|
|
|
|
|
|
|
|
// On lie ce ControleurPartie au ControleurReseau
|
|
|
|
|
if (controleurReseau != null) {
|
|
|
|
|
controleurReseau.setControleurPartie(this);
|
|
|
|
|
}
|
2025-08-12 22:18:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void lancerPartie(){
|
|
|
|
|
System.out.println("===============================");
|
|
|
|
|
System.out.println("BIENVENUE AU JEU D'ÉCHECS");
|
|
|
|
|
System.out.println("===============================\n");
|
|
|
|
|
|
2025-09-07 14:44:32 +02:00
|
|
|
|
2025-09-17 00:23:46 +02:00
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Mode de jeu : " + modeDeJeu);
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Joueurs : " + partie.getJoueurBlanc().getNom() + " (Blancs) vs " + partie.getJoueurNoir().getNom() + " (Noirs)");
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Les pions Noirs sont en bas. Les pions Blancs sont en haut. \n");
|
2025-08-12 22:18:58 +02:00
|
|
|
|
2025-09-17 00:23:46 +02:00
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"------- La Partie commence ! -------");
|
2025-08-12 22:18:58 +02:00
|
|
|
vue.afficherPlateau(partie.getPlateau());
|
|
|
|
|
//System.out.print("\n");
|
2025-09-17 00:23:46 +02:00
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"C'est au tour de " + partie.getJoueurActif().getNom() + " de jouer.");
|
2025-08-12 22:18:58 +02:00
|
|
|
boucleDeJeu();
|
2025-09-14 01:32:33 +02:00
|
|
|
vue.setTour(partie.getJoueurActif().getNom());
|
|
|
|
|
vue.setScore(partie.getScore());
|
2025-08-12 22:18:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void boucleDeJeu(){
|
|
|
|
|
// Boucle principale de la partie
|
|
|
|
|
while(!partie.estFini()) {
|
|
|
|
|
try {
|
|
|
|
|
Joueur joueurPrecedent = partie.getJoueurActif(); // AVANT le tour
|
|
|
|
|
partie.jouerTour(); // Moteur de jeu
|
2025-09-07 14:44:32 +02:00
|
|
|
Coup dernierCoup = partie.getDernierCoup();
|
|
|
|
|
vue.setDernierCoup(dernierCoup);
|
2025-08-12 22:18:58 +02:00
|
|
|
vue.afficherPlateau(partie.getPlateau());
|
2025-09-07 14:44:32 +02:00
|
|
|
|
|
|
|
|
if(dernierCoup != null) {
|
2025-09-17 00:23:46 +02:00
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_WARN,"Dernier coup : " + joueurPrecedent.getNom() + " a joué " + dernierCoup);
|
|
|
|
|
|
|
|
|
|
// Envoi du coup au serveur si le controleurReseau est initialisé
|
|
|
|
|
if (controleurReseau != null) {
|
|
|
|
|
controleurReseau.envoyerCoup(dernierCoup, joueurPrecedent.getNom());
|
|
|
|
|
}
|
2025-09-07 14:44:32 +02:00
|
|
|
}
|
|
|
|
|
|
2025-09-17 00:23:46 +02:00
|
|
|
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"\nC'est au tour de " + partie.getJoueurActif().getNom() + " de jouer.");
|
2025-09-13 23:27:56 +02:00
|
|
|
vue.setTour(partie.getJoueurActif().getNom());
|
2025-09-14 01:32:33 +02:00
|
|
|
vue.setScore(partie.getScore());
|
2025-08-12 22:18:58 +02:00
|
|
|
} catch (IllegalArgumentException e) {
|
2025-09-17 00:23:46 +02:00
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_ERR,"> Erreur : " + e.getMessage());
|
2025-08-12 22:18:58 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-17 00:23:46 +02:00
|
|
|
//Fin de la partie
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"La partie est terminée !");
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Si vous souhaitez rejouer, relancez le programme.");
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Si vous souhaitez voir l'historique des coups taper 1. Si vous souhaitez voir les captures taper 2.");
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Merci d'avoir joué !");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Coup reçu depuis le reseau
|
|
|
|
|
public void joueCoupReseau(Coup coup){
|
|
|
|
|
try {
|
|
|
|
|
partie.jouerCoup(coup); // Applique le coup
|
|
|
|
|
vue.setDernierCoup(coup); // Met à jour le dernier coup
|
|
|
|
|
vue.afficherPlateau(partie.getPlateau()); // Affiche le plateau
|
|
|
|
|
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_WARN,
|
|
|
|
|
"Dernier coup : " + partie.getJoueurActif().getNom() + " a joué " + coup); // Affiche le dernier coup
|
|
|
|
|
|
|
|
|
|
vue.setTour(partie.getJoueurActif().getNom()); // Met à jour le tour
|
|
|
|
|
vue.setScore(partie.getScore()); // Met à jour le score
|
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_ERR,"> Erreur en appliquant un coup reseau : " + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Fin de la partie
|
|
|
|
|
public void finPartieReseau(String message){
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO,"Fin de la partie en reseau : " + message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void afficherChat(String auteur, String message){
|
|
|
|
|
vue.afficherMessage(TypeMessage.CHAT, auteur + ": " + message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void afficherMessageSysteme(String message){
|
|
|
|
|
vue.afficherMessage(TypeMessage.SYSTEME_INFO, message);
|
2025-08-12 22:18:58 +02:00
|
|
|
}
|
|
|
|
|
|
2025-07-20 17:43:35 +02:00
|
|
|
}
|