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);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|