Files
BUT3ProjetJeuGroupe/fr/iut_fbleau/Avalam/ui/BoardView.java

85 lines
2.3 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package fr.iut_fbleau.Avalam.ui;
import fr.iut_fbleau.Avalam.logic.GameState;
import javax.swing.*;
/**
* La classe <code>BoardView</code> représente l'affichage complet du plateau Avalam.
* Elle sappuie sur une architecture en couches (layered pane) pour séparer proprement :
*
* <ul>
* <li><b>HighlightLayer</b> : les cases jouables mises en surbrillance</li>
* <li><b>PieceLayer</b> : les pions affichés sous forme de boutons ronds</li>
* </ul>
*
* La vue ne contient pas la logique de jeu : elle la délègue entièrement
* à un <code>InteractionController</code>.
*
* @author
* @version 1.0
*/
public class BoardView extends JLayeredPane {
/** Taille des pions affichés. */
private final int size = 50;
/** Distance entre deux cases de la grille. */
private final int spacing = 70;
/** Décalages pour centrer l'affichage. */
private final int xBase = 60, yBase = 60;
/** Accès à l'état du jeu. */
private GameState state;
/** Couche d'affichage des ronds verts. */
private HighlightLayer highlightLayer;
/** Couche d'affichage des pions. */
private PieceLayer pieceLayer;
/** Gestionnaire d'interactions utilisateur. */
private InteractionController controller;
/**
* Constructeur de la vue du plateau.
*
* @param state l'état du jeu Avalam
*/
public BoardView(GameState state) {
this.state = state;
setLayout(null);
controller = new InteractionController(state);
highlightLayer = new HighlightLayer(xBase, yBase, spacing, size);
pieceLayer = new PieceLayer();
add(highlightLayer, JLayeredPane.DEFAULT_LAYER);
add(pieceLayer, JLayeredPane.PALETTE_LAYER);
refresh();
}
/**
* Met à jour l'affichage des couches en fonction de l'état actuel du jeu.
*/
public void refresh() {
pieceLayer.displayGrid(
state.getGrid(),
xBase, yBase, spacing, size,
// Callback appelé lorsquun pion est cliqué
(r, c) -> {
controller.onPieceClicked(r, c);
highlightLayer.setLegalMoves(controller.getLegalMoves());
highlightLayer.repaint();
}
);
highlightLayer.repaint();
}
}