Menu game mode + bot idiot

This commit is contained in:
2026-01-26 13:41:48 +01:00
parent b97b9cef69
commit 031b23c7c5
6 changed files with 291 additions and 71 deletions

View File

@@ -1,8 +1,5 @@
package fr.iut_fbleau.Avalam;
import fr.iut_fbleau.Avalam.AvalamBoard;
import fr.iut_fbleau.Avalam.Tower;
import javax.swing.*;
import java.awt.*;
@@ -14,33 +11,37 @@ import java.awt.*;
* - laffichage des tours (PieceLayer)
* - laffichage des coups possibles (HighlightLayer)
* - laffichage du fond graphique
* - la gestion des interactions via InteractionController
* - les clics via InteractionController
*
* Cette classe ne contient aucune logique de jeu.
* Cette classe ne contient aucune logique de règles du jeu.
*
* @version 1.0
* Date :
* Licence :
*/
public class BoardView extends JLayeredPane {
//Attributs
/** Référence au moteur du jeu Avalam. */
/** Référence au moteur Avalam. */
private AvalamBoard board;
/** Couche graphique du fond du plateau. */
/** Couche daffichage du fond. */
private BackgroundLayer backgroundLayer;
/** Couche graphique des déplacements possibles. */
/** Couche daffichage des coups possibles. */
private HighlightLayer highlightLayer;
/** Couche graphique des pièces (tours). */
/** Couche daffichage des pièces. */
private PieceLayer pieceLayer;
/** Contrôleur des interactions utilisateur. */
/** Contrôleur des interactions. */
private InteractionController controller;
/** Taille dun pion en pixels. */
private final int size = 50;
/** Espacement entre deux cases du plateau. */
/** Espacement entre les cases. */
private final int spacing = 70;
/** Décalage horizontal du plateau. */
@@ -49,16 +50,16 @@ public class BoardView extends JLayeredPane {
/** Décalage vertical du plateau. */
private final int yBase = 60;
/** Callback vers AvalamWindow pour mettre à jour linterface (score, tour, fin). */
/** Callback vers AvalamWindow pour mise à jour (score, tour, fin). */
private Runnable boardUpdateCallback;
//Constructeur
/**
* Construit la vue du plateau Avalam.
* Construit la vue du plateau.
*
* @param board moteur du jeu Avalam
* @param boardUpdateCallback fonction de rappel après un coup
* @param board moteur du jeu
* @param boardUpdateCallback callback à appeler après un coup
*/
public BoardView(AvalamBoard board, Runnable boardUpdateCallback) {
this.board = board;
@@ -66,19 +67,19 @@ public class BoardView extends JLayeredPane {
setLayout(null);
// --- Contrôleur ---
// Contrôleur
this.controller = new InteractionController(board, this);
// --- Couche fond ---
// Couche fond
backgroundLayer = new BackgroundLayer("fr/iut_fbleau/Res/BackgroundAvalam.png");
backgroundLayer.setBounds(0, 0, 725, 725);
add(backgroundLayer, JLayeredPane.FRAME_CONTENT_LAYER);
// --- Couche highlight ---
// Couche highlight
highlightLayer = new HighlightLayer(xBase, yBase, spacing, size);
add(highlightLayer, JLayeredPane.DEFAULT_LAYER);
// --- Couche des pièces ---
// Couche pièces
pieceLayer = new PieceLayer();
add(pieceLayer, JLayeredPane.PALETTE_LAYER);
@@ -89,6 +90,29 @@ public class BoardView extends JLayeredPane {
//Méthodes
/**
* Retourne le contrôleur d'interactions (utile pour simuler les clics du bot).
*
* @return contrôleur
*/
public InteractionController getController() {
return controller;
}
/**
* Active/désactive les interactions utilisateur sur le plateau.
* Utile pendant l'animation du bot pour éviter des clics concurrents.
*
* @param enabled true pour activer, false pour désactiver
*/
public void setInteractionEnabled(boolean enabled) {
// Désactive la couche des pièces (boutons) principalement
pieceLayer.setEnabled(enabled);
for (Component c : pieceLayer.getComponents()) {
c.setEnabled(enabled);
}
}
/**
* Appelé par le contrôleur après un coup.
*/
@@ -99,7 +123,7 @@ public class BoardView extends JLayeredPane {
}
/**
* Rafraîchit laffichage du plateau.
* Rafraîchit les couches visuelles.
*/
public void refresh() {
@@ -118,7 +142,7 @@ public class BoardView extends JLayeredPane {
}
/**
* Récupère la grille actuelle du moteur de jeu.
* Récupère la grille depuis le moteur.
*
* @return grille 9x9 de tours
*/
@@ -136,24 +160,26 @@ public class BoardView extends JLayeredPane {
//Affichage
/**
* Classe interne représentant la couche graphique du fond.
* Composant affichant limage de fond.
*/
private static class BackgroundLayer extends JComponent {
private Image img;
/**
* Construit une couche de fond à partir dune image.
* Construit une couche de fond.
*
* @param resourcePath chemin de limage
* @param resourcePath chemin de l'image de fond
*/
public BackgroundLayer(String resourcePath) {
img = Toolkit.getDefaultToolkit().getImage(
getClass().getClassLoader().getResource(resourcePath)
getClass().getClassLoader().getResource(resourcePath)
);
}
/**
* Dessine limage de fond.
* Dessine l'image de fond.
*
* @param g contexte graphique
*/
@Override
protected void paintComponent(Graphics g) {