package fr.iut_fbleau.Avalam; import javax.swing.*; import java.awt.*; import java.util.List; /** * La classe HighlightLayer * * Gère l'affichage graphique des cases jouables sur le plateau Avalam. * Les cases autorisées sont représentées par des cercles verts semi-transparents. * * Cette classe ne contient aucune logique de jeu. */ public class HighlightLayer extends JPanel { //Attributs /** Position X de base du plateau. */ private int xBase; /** Position Y de base du plateau. */ private int yBase; /** Espacement entre les cases du plateau. */ private int spacing; /** Taille d’un pion en pixels. */ private int size; /** Liste des positions jouables (cases en vert). */ private List legalMoves; //Constructeur /** * Construit la couche d'affichage des coups légaux. * * @param xBase position X de base du plateau * @param yBase position Y de base du plateau * @param spacing espacement entre cases * @param size taille des pions */ public HighlightLayer(int xBase, int yBase, int spacing, int size) { this.xBase = xBase; this.yBase = yBase; this.spacing = spacing; this.size = size; setOpaque(false); setBounds(0, 0, 800, 800); } //Méthodes /** * Définit la liste des cases légales à afficher. * * @param moves liste des positions jouables */ public void setLegalMoves(List moves) { this.legalMoves = moves; repaint(); } //Affichage /** * Dessine les cercles verts autour des cases autorisées. * * @param g contexte graphique */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (legalMoves == null) return; Graphics2D g2 = (Graphics2D) g; g2.setColor(new java.awt.Color(0, 255, 0, 120)); for (Point p : legalMoves) { int r = p.x; int c = p.y; int x = xBase + c * spacing; int y = yBase + r * spacing; int highlight = size + 20; // Cercle plus grand que le pion g2.fillOval(x - 10, y - 10, highlight, highlight); } } }