nettoyage + lisibilité code + changement structure

This commit is contained in:
2026-01-26 06:39:49 -05:00
parent 25f8dcdc76
commit b97b9cef69
17 changed files with 794 additions and 396 deletions

View File

@@ -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 linterface :
* - 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 DAPRÈ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 daffichage du tour
*/
private String turnMessage() {
return "Tour du joueur : " +
return "Tour du joueur : " +
(board.getCurrentPlayer() == Player.PLAYER1 ? "Jaune" : "Rouge");
}
}