From 6eb63cacaaeb5519cb62ac52afe945796ea990ef Mon Sep 17 00:00:00 2001 From: amary Date: Tue, 3 Feb 2026 09:17:10 +0100 Subject: [PATCH] =?UTF-8?q?S=C3=A9paration=20des=20classes=20BoardView=20e?= =?UTF-8?q?t=20BackgroundLayer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fr/iut_fbleau/Avalam/BackgroundLayer.java | 37 +++ fr/iut_fbleau/Avalam/BoardView.java | 351 ++++++++++------------ 2 files changed, 196 insertions(+), 192 deletions(-) create mode 100644 fr/iut_fbleau/Avalam/BackgroundLayer.java diff --git a/fr/iut_fbleau/Avalam/BackgroundLayer.java b/fr/iut_fbleau/Avalam/BackgroundLayer.java new file mode 100644 index 0000000..4720d58 --- /dev/null +++ b/fr/iut_fbleau/Avalam/BackgroundLayer.java @@ -0,0 +1,37 @@ +package fr.iut_fbleau.Avalam; + +import javax.swing.*; +import java.awt.*; + +/** +* La classe BackgroundLayer +* +* Sous composant de BoardView affichant l’image de fond. +*/ +public class BackgroundLayer extends JComponent { + private Image img; + + /** + * Construit une couche de fond. + * + * @param resourcePath chemin de l'image de fond + */ + public BackgroundLayer(String resourcePath) { + img = Toolkit.getDefaultToolkit().getImage( + getClass().getClassLoader().getResource(resourcePath) + ); + } + + /** + * Dessine l'image de fond. + * + * @param g contexte graphique + */ + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if (img != null) { + g.drawImage(img, 0, 0, getWidth(), getHeight(), this); + } + } +} diff --git a/fr/iut_fbleau/Avalam/BoardView.java b/fr/iut_fbleau/Avalam/BoardView.java index 382c5e6..959ccce 100644 --- a/fr/iut_fbleau/Avalam/BoardView.java +++ b/fr/iut_fbleau/Avalam/BoardView.java @@ -1,192 +1,159 @@ -package fr.iut_fbleau.Avalam; - -import javax.swing.*; -import java.awt.*; - -/** -* La classe BoardView -* -* Représente la vue principale du plateau Avalam. -* Elle gère : -* - l’affichage des tours (PieceLayer) -* - l’affichage des coups possibles (HighlightLayer) -* - l’affichage du fond graphique -* - les clics via InteractionController -* -* Cette classe ne contient aucune logique de règles du jeu. -* -* @version 1.0 -* Date : -* Licence : -*/ -public class BoardView extends JLayeredPane { - - //Attributs - - /** Référence au moteur Avalam. */ - private AvalamBoard board; - - /** Couche d’affichage du fond. */ - private BackgroundLayer backgroundLayer; - - /** Couche d’affichage des coups possibles. */ - private HighlightLayer highlightLayer; - - /** Couche d’affichage des pièces. */ - private PieceLayer pieceLayer; - - /** Contrôleur des interactions. */ - private InteractionController controller; - - /** Taille d’un pion en pixels. */ - private final int size = 50; - - /** Espacement entre les cases. */ - private final int spacing = 70; - - /** Décalage horizontal du plateau. */ - private final int xBase = 60; - - /** Décalage vertical du plateau. */ - private final int yBase = 60; - - /** Callback vers AvalamWindow pour mise à jour (score, tour, fin). */ - private Runnable boardUpdateCallback; - - //Constructeur - - /** - * Construit la vue du plateau. - * - * @param board moteur du jeu - * @param boardUpdateCallback callback à appeler après un coup - */ - public BoardView(AvalamBoard board, Runnable boardUpdateCallback) { - this.board = board; - this.boardUpdateCallback = boardUpdateCallback; - - setLayout(null); - - // Contrôleur - this.controller = new InteractionController(board, this); - - // Couche fond - backgroundLayer = new BackgroundLayer("fr/iut_fbleau/Res/BackgroundAvalam.png"); - backgroundLayer.setBounds(0, 0, 725, 725); - add(backgroundLayer, JLayeredPane.FRAME_CONTENT_LAYER); - - // Couche highlight - highlightLayer = new HighlightLayer(xBase, yBase, spacing, size); - add(highlightLayer, JLayeredPane.DEFAULT_LAYER); - - // Couche pièces - pieceLayer = new PieceLayer(); - add(pieceLayer, JLayeredPane.PALETTE_LAYER); - - setPreferredSize(new Dimension(725, 725)); - - refresh(); - } - - //Méthodes - - /** - * Retourne le contrôleur d'interactions (utile pour simuler les clics du bot). - * - * @return contrôleur - */ - public InteractionController getController() { - return controller; - } - - /** - * Active/désactive les interactions utilisateur sur le plateau. - * Utile pendant l'animation du bot pour éviter des clics concurrents. - * - * @param enabled true pour activer, false pour désactiver - */ - public void setInteractionEnabled(boolean enabled) { - // Désactive la couche des pièces (boutons) principalement - pieceLayer.setEnabled(enabled); - for (Component c : pieceLayer.getComponents()) { - c.setEnabled(enabled); - } - } - - /** - * Appelé par le contrôleur après un coup. - */ - public void onBoardUpdated() { - if (boardUpdateCallback != null) { - boardUpdateCallback.run(); - } - } - - /** - * Rafraîchit les couches visuelles. - */ - public void refresh() { - - pieceLayer.displayGrid( - boardGrid(), - xBase, yBase, spacing, size, - (r, c) -> controller.onPieceClicked(r, c) - ); - - highlightLayer.setLegalMoves(controller.getLegalMoves()); - - backgroundLayer.repaint(); - highlightLayer.repaint(); - pieceLayer.repaint(); - repaint(); - } - - /** - * Récupère la grille depuis le moteur. - * - * @return grille 9x9 de tours - */ - private Tower[][] boardGrid() { - Tower[][] grid = new Tower[AvalamBoard.SIZE][AvalamBoard.SIZE]; - - for (int r = 0; r < AvalamBoard.SIZE; r++) { - for (int c = 0; c < AvalamBoard.SIZE; c++) { - grid[r][c] = board.getTowerAt(r, c); - } - } - return grid; - } - - //Affichage - - /** - * Composant affichant l’image de fond. - */ - private static class BackgroundLayer extends JComponent { - private Image img; - - /** - * Construit une couche de fond. - * - * @param resourcePath chemin de l'image de fond - */ - public BackgroundLayer(String resourcePath) { - img = Toolkit.getDefaultToolkit().getImage( - getClass().getClassLoader().getResource(resourcePath) - ); - } - - /** - * Dessine l'image de fond. - * - * @param g contexte graphique - */ - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - if (img != null) { - g.drawImage(img, 0, 0, getWidth(), getHeight(), this); - } - } - } -} +package fr.iut_fbleau.Avalam; + +import javax.swing.*; +import java.awt.*; + +/** +* La classe BoardView +* +* Représente la vue principale du plateau Avalam. +* Elle gère : +* - l’affichage des tours (PieceLayer) +* - l’affichage des coups possibles (HighlightLayer) +* - l’affichage du fond graphique (BackgroundLayer) +* - les clics via InteractionController +* +* Cette classe ne contient aucune logique de règles du jeu. +* +* @version 1.0 +* Date : +* Licence : +*/ +public class BoardView extends JLayeredPane { + + //Attributs + + /** Référence au moteur Avalam. */ + private AvalamBoard board; + + /** Couche d’affichage du fond. */ + private BackgroundLayer backgroundLayer; + + /** Couche d’affichage des coups possibles. */ + private HighlightLayer highlightLayer; + + /** Couche d’affichage des pièces. */ + private PieceLayer pieceLayer; + + /** Contrôleur des interactions. */ + private InteractionController controller; + + /** Taille d’un pion en pixels. */ + private final int size = 50; + + /** Espacement entre les cases. */ + private final int spacing = 70; + + /** Décalage horizontal du plateau. */ + private final int xBase = 60; + + /** Décalage vertical du plateau. */ + private final int yBase = 60; + + /** Callback vers AvalamWindow pour mise à jour (score, tour, fin). */ + private Runnable boardUpdateCallback; + + //Constructeur + + /** + * Construit la vue du plateau. + * + * @param board moteur du jeu + * @param boardUpdateCallback callback à appeler après un coup + */ + public BoardView(AvalamBoard board, Runnable boardUpdateCallback) { + this.board = board; + this.boardUpdateCallback = boardUpdateCallback; + + setLayout(null); + + // Contrôleur + this.controller = new InteractionController(board, this); + + // Couche fond + backgroundLayer = new BackgroundLayer("fr/iut_fbleau/Res/BackgroundAvalam.png"); + backgroundLayer.setBounds(0, 0, 725, 725); + add(backgroundLayer, JLayeredPane.FRAME_CONTENT_LAYER); + + // Couche highlight + highlightLayer = new HighlightLayer(xBase, yBase, spacing, size); + add(highlightLayer, JLayeredPane.DEFAULT_LAYER); + + // Couche pièces + pieceLayer = new PieceLayer(); + add(pieceLayer, JLayeredPane.PALETTE_LAYER); + + setPreferredSize(new Dimension(725, 725)); + + refresh(); + } + + //Méthodes + + /** + * Retourne le contrôleur d'interactions (utile pour simuler les clics du bot). + * + * @return contrôleur + */ + public InteractionController getController() { + return controller; + } + + /** + * Active/désactive les interactions utilisateur sur le plateau. + * Utile pendant l'animation du bot pour éviter des clics concurrents. + * + * @param enabled true pour activer, false pour désactiver + */ + public void setInteractionEnabled(boolean enabled) { + // Désactive la couche des pièces (boutons) principalement + pieceLayer.setEnabled(enabled); + for (Component c : pieceLayer.getComponents()) { + c.setEnabled(enabled); + } + } + + /** + * Appelé par le contrôleur après un coup. + */ + public void onBoardUpdated() { + if (boardUpdateCallback != null) { + boardUpdateCallback.run(); + } + } + + /** + * Rafraîchit les couches visuelles. + */ + public void refresh() { + + pieceLayer.displayGrid( + boardGrid(), + xBase, yBase, spacing, size, + (r, c) -> controller.onPieceClicked(r, c) + ); + + highlightLayer.setLegalMoves(controller.getLegalMoves()); + + backgroundLayer.repaint(); + highlightLayer.repaint(); + pieceLayer.repaint(); + repaint(); + } + + /** + * Récupère la grille depuis le moteur. + * + * @return grille 9x9 de tours + */ + private Tower[][] boardGrid() { + Tower[][] grid = new Tower[AvalamBoard.SIZE][AvalamBoard.SIZE]; + + for (int r = 0; r < AvalamBoard.SIZE; r++) { + for (int c = 0; c < AvalamBoard.SIZE; c++) { + grid[r][c] = board.getTowerAt(r, c); + } + } + return grid; + } +}