2026-01-26 06:39:49 -05:00
|
|
|
|
package fr.iut_fbleau.Avalam;
|
2025-11-22 11:56:51 -05:00
|
|
|
|
|
|
|
|
|
|
import javax.swing.*;
|
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-01-26 06:39:49 -05:00
|
|
|
|
* 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.
|
|
|
|
|
|
*/
|
2025-11-22 11:56:51 -05:00
|
|
|
|
public class PieceLayer extends JPanel {
|
|
|
|
|
|
|
2026-01-26 06:39:49 -05:00
|
|
|
|
//Constructeur
|
|
|
|
|
|
|
2025-11-22 11:56:51 -05:00
|
|
|
|
/**
|
2026-01-26 06:39:49 -05:00
|
|
|
|
* Construit la couche graphique des pièces.
|
|
|
|
|
|
*/
|
2025-11-22 11:56:51 -05:00
|
|
|
|
public PieceLayer() {
|
|
|
|
|
|
setLayout(null);
|
|
|
|
|
|
setOpaque(false);
|
|
|
|
|
|
setBounds(0, 0, 800, 800);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-26 06:39:49 -05:00
|
|
|
|
//Méthodes
|
|
|
|
|
|
|
2025-11-22 11:56:51 -05:00
|
|
|
|
/**
|
2026-01-26 06:39:49 -05:00
|
|
|
|
* 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
|
|
|
|
|
|
*/
|
2025-11-22 11:56:51 -05:00
|
|
|
|
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();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|