nettoyage + lisibilité code + changement structure
This commit is contained in:
@@ -1,9 +1,5 @@
|
||||
package fr.iut_fbleau.Avalam;
|
||||
|
||||
import fr.iut_fbleau.Avalam.logic.BoardLoader;
|
||||
import fr.iut_fbleau.Avalam.ui.BoardView;
|
||||
import fr.iut_fbleau.Avalam.ui.ScoreView;
|
||||
import fr.iut_fbleau.Avalam.ui.TurnView;
|
||||
import fr.iut_fbleau.GameAPI.Player;
|
||||
import fr.iut_fbleau.GameAPI.Result;
|
||||
|
||||
@@ -11,41 +7,53 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* Fenêtre principale du jeu Avalam.
|
||||
*
|
||||
* Elle contient :
|
||||
* - le plateau (BoardView)
|
||||
* - l'affichage du score
|
||||
* - l'affichage du joueur courant
|
||||
*
|
||||
* Elle interagit directement avec AvalamBoard (moteur du jeu).
|
||||
*/
|
||||
* La classe <code>AvalamWindow</code>
|
||||
*
|
||||
* Fenêtre principale (interface graphique) du jeu Avalam.
|
||||
* Elle contient :
|
||||
* - le plateau (BoardView)
|
||||
* - l'affichage du score (ScoreView)
|
||||
* - l'affichage du joueur courant (TurnView)
|
||||
*
|
||||
* Elle pilote un objet <code>AvalamBoard</code> (moteur du jeu).
|
||||
*/
|
||||
public class AvalamWindow extends JFrame {
|
||||
|
||||
/** Moteur du jeu (API GameAPI) */
|
||||
//Attributs
|
||||
|
||||
/** Moteur du jeu (état + règles). */
|
||||
private AvalamBoard board;
|
||||
|
||||
/** Vues graphiques */
|
||||
/** Vue affichant le score des deux couleurs. */
|
||||
private ScoreView scoreView;
|
||||
|
||||
/** Vue affichant le joueur dont c'est le tour. */
|
||||
private TurnView turnView;
|
||||
|
||||
/** Vue affichant le plateau et gérant les interactions de jeu. */
|
||||
private BoardView boardView;
|
||||
|
||||
//Constructeur
|
||||
|
||||
/**
|
||||
* Construit la fenêtre et initialise l’interface :
|
||||
* - charge le plateau initial depuis Plateau.txt
|
||||
* - construit les vues (score, tour, plateau)
|
||||
* - affiche la fenêtre
|
||||
*/
|
||||
public AvalamWindow() {
|
||||
super("Avalam");
|
||||
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// Chargement du plateau initial depuis Plateau.txt
|
||||
// ----------------------------------------------------------
|
||||
Tower[][] initialGrid = BoardLoader.loadFromFile("fr/iut_fbleau/Res/Plateau.txt");
|
||||
|
||||
board = new AvalamBoard(initialGrid); // PLAYER1 commence
|
||||
// Initialisation du moteur (PLAYER1 commence)
|
||||
board = new AvalamBoard(initialGrid);
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// PANNEAU SCORE + TOUR
|
||||
// ----------------------------------------------------------
|
||||
// Création du panneau supérieur (score + tour)
|
||||
JPanel topPanel = new JPanel(new GridLayout(2, 1));
|
||||
topPanel.setBackground(new java.awt.Color(200, 200, 200));
|
||||
|
||||
@@ -61,11 +69,8 @@ public class AvalamWindow extends JFrame {
|
||||
|
||||
add(topPanel, BorderLayout.NORTH);
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// PLATEAU (BoardView)
|
||||
// ----------------------------------------------------------
|
||||
// Création de la vue plateau (avec callback de mise à jour)
|
||||
boardView = new BoardView(board, this::onBoardUpdated);
|
||||
|
||||
add(boardView, BorderLayout.CENTER);
|
||||
|
||||
pack();
|
||||
@@ -74,49 +79,63 @@ public class AvalamWindow extends JFrame {
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
/* ================================================================
|
||||
* MISES À JOUR D’APRÈS LE MOTEUR
|
||||
* ================================================================ */
|
||||
//Méthodes
|
||||
|
||||
/**
|
||||
* Appelé automatiquement après chaque coup via BoardView → controller → board.
|
||||
*/
|
||||
* Méthode appelée automatiquement après chaque coup (via BoardView).
|
||||
* Elle rafraîchit :
|
||||
* - les scores
|
||||
* - le joueur courant
|
||||
* et affiche un message si la partie est terminée.
|
||||
*/
|
||||
public void onBoardUpdated() {
|
||||
|
||||
// Mise à jour du score et du joueur courant
|
||||
// Mise à jour du score
|
||||
scoreView.updateScores(
|
||||
computeScore(Color.YELLOW),
|
||||
computeScore(Color.RED)
|
||||
);
|
||||
|
||||
// Mise à jour du joueur courant
|
||||
turnView.setTurn(turnMessage());
|
||||
|
||||
// Détection de fin de partie
|
||||
// Détection de fin de partie
|
||||
if (board.isGameOver()) {
|
||||
Result res = board.getResult();
|
||||
|
||||
String msg;
|
||||
|
||||
// Correction : ajout des "break" pour éviter le fall-through.
|
||||
switch (res) {
|
||||
case WIN : msg = "Le joueur jaune a gagné !";
|
||||
case LOSS : msg = "Le joueur rouge a gagné !";
|
||||
case DRAW : msg = "Égalité !";
|
||||
default : msg = "Fin de partie.";
|
||||
case WIN:
|
||||
msg = "Le joueur jaune a gagné !";
|
||||
break;
|
||||
case LOSS:
|
||||
msg = "Le joueur rouge a gagné !";
|
||||
break;
|
||||
case DRAW:
|
||||
msg = "Égalité !";
|
||||
break;
|
||||
default:
|
||||
msg = "Fin de partie.";
|
||||
break;
|
||||
}
|
||||
|
||||
JOptionPane.showMessageDialog(this, msg, "Partie terminée",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
JOptionPane.showMessageDialog(
|
||||
this,
|
||||
msg,
|
||||
"Partie terminée",
|
||||
JOptionPane.INFORMATION_MESSAGE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ================================================================
|
||||
* OUTILS
|
||||
* ================================================================ */
|
||||
|
||||
/**
|
||||
* Calcule le score d'une couleur : nombre de tours contrôlées.
|
||||
*/
|
||||
* Calcule le score d'une couleur : nombre de tours contrôlées (sommet de la tour).
|
||||
*
|
||||
* @param c couleur à compter
|
||||
* @return nombre de tours appartenant à la couleur c
|
||||
*/
|
||||
private int computeScore(Color c) {
|
||||
int score = 0;
|
||||
for (int r = 0; r < AvalamBoard.SIZE; r++) {
|
||||
@@ -131,10 +150,12 @@ public class AvalamWindow extends JFrame {
|
||||
}
|
||||
|
||||
/**
|
||||
* Message du joueur dont c'est le tour.
|
||||
*/
|
||||
* Retourne le message correspondant au joueur dont c'est le tour.
|
||||
*
|
||||
* @return message d’affichage du tour
|
||||
*/
|
||||
private String turnMessage() {
|
||||
return "Tour du joueur : " +
|
||||
return "Tour du joueur : " +
|
||||
(board.getCurrentPlayer() == Player.PLAYER1 ? "Jaune" : "Rouge");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user