74 lines
1.9 KiB
Java
74 lines
1.9 KiB
Java
package fr.iut_fbleau.Avalam;
|
||
|
||
import javax.swing.*;
|
||
import java.awt.*;
|
||
|
||
/**
|
||
* La classe <code>PieceLayer</code>
|
||
*
|
||
* Gère l'affichage des tours du plateau Avalam sous forme de boutons.
|
||
* Elle :
|
||
* - affiche les pièces,
|
||
* - positionne les boutons sur la grille,
|
||
* - associe une action de clic à chaque pièce.
|
||
*
|
||
* Aucune logique de jeu n'est implémentée ici.
|
||
*/
|
||
public class PieceLayer extends JPanel {
|
||
|
||
//Constructeur
|
||
|
||
/**
|
||
* Construit la couche graphique des pièces.
|
||
*/
|
||
public PieceLayer() {
|
||
setLayout(null);
|
||
setOpaque(false);
|
||
setBounds(0, 0, 800, 800);
|
||
}
|
||
|
||
//Méthodes
|
||
|
||
/**
|
||
* Affiche la grille de tours sous forme de boutons interactifs.
|
||
*
|
||
* @param grid grille 9×9 des tours
|
||
* @param xBase décalage horizontal du plateau
|
||
* @param yBase décalage vertical du plateau
|
||
* @param spacing espacement entre cases
|
||
* @param size taille d'un pion
|
||
* @param clickCallback fonction appelée lors d’un clic sur un pion
|
||
*/
|
||
public void displayGrid(Tower[][] grid, int xBase, int yBase,
|
||
int spacing, int size,
|
||
java.util.function.BiConsumer<Integer, Integer> clickCallback) {
|
||
|
||
removeAll();
|
||
|
||
for (int r = 0; r < 9; r++) {
|
||
for (int c = 0; c < 9; c++) {
|
||
|
||
Tower t = grid[r][c];
|
||
if (t != null) {
|
||
|
||
PieceButton pb = new PieceButton(
|
||
t.getColor().getSwingColor(),
|
||
t.getHeight(),
|
||
r, c
|
||
);
|
||
|
||
pb.setBounds(xBase + c * spacing, yBase + r * spacing, size, size);
|
||
|
||
int fr = r, fc = c;
|
||
pb.addActionListener(e -> clickCallback.accept(fr, fc));
|
||
|
||
add(pb);
|
||
}
|
||
}
|
||
}
|
||
|
||
revalidate();
|
||
repaint();
|
||
}
|
||
}
|