95 lines
2.2 KiB
Java
95 lines
2.2 KiB
Java
package fr.iut_fbleau.Avalam;
|
||
|
||
import javax.swing.*;
|
||
import java.awt.*;
|
||
import java.util.List;
|
||
|
||
/**
|
||
* La classe <code>HighlightLayer</code>
|
||
*
|
||
* 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<Point> 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<Point> 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);
|
||
}
|
||
}
|
||
}
|