78 lines
2.0 KiB
Java
78 lines
2.0 KiB
Java
|
|
package fr.iut_fbleau.Avalam.ui;
|
|||
|
|
|
|||
|
|
import fr.iut_fbleau.Avalam.Tower;
|
|||
|
|
|
|||
|
|
import javax.swing.*;
|
|||
|
|
import java.awt.*;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* La classe <code>PieceLayer</code> gère l'affichage des pions
|
|||
|
|
* (sous forme de <code>PieceButton</code>) sur la grille.
|
|||
|
|
*
|
|||
|
|
* Elle s'occupe uniquement :
|
|||
|
|
* <ul>
|
|||
|
|
* <li>d'afficher les pièces</li>
|
|||
|
|
* <li>de positionner correctement les boutons</li>
|
|||
|
|
* <li>d'attacher un callback à chaque clic</li>
|
|||
|
|
* </ul>
|
|||
|
|
*
|
|||
|
|
* Aucune logique de jeu n'est réalisée ici.
|
|||
|
|
*
|
|||
|
|
* @author
|
|||
|
|
* @version 1.0
|
|||
|
|
*/
|
|||
|
|
public class PieceLayer extends JPanel {
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Constructeur.
|
|||
|
|
* Initialise un panneau transparent prêt à recevoir des pions.
|
|||
|
|
*/
|
|||
|
|
public PieceLayer() {
|
|||
|
|
setLayout(null);
|
|||
|
|
setOpaque(false);
|
|||
|
|
setBounds(0, 0, 800, 800);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Affiche la grille de tours sous forme de boutons.
|
|||
|
|
*
|
|||
|
|
* @param grid grille 9×9 des tours
|
|||
|
|
* @param xBase offset X du plateau
|
|||
|
|
* @param yBase offset Y 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();
|
|||
|
|
}
|
|||
|
|
}
|