This commit is contained in:
2024-12-07 18:51:25 +01:00
parent 2a64724287
commit e9cbe62cd9
2 changed files with 127 additions and 32 deletions

View File

@@ -7,23 +7,52 @@ import fr.monkhanny.dorfromantik.enums.Sounds;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
/**
* Listener pour gérer les interactions de survol avec un bouton.
* Ce listener déclenche une animation et un effet sonore lorsqu'un bouton est survolé ou quitté par la souris.
*
* @version 1.0
* @author Moncef STITI, Lenny FOULOU
*/
public class ButtonHoverListener extends MouseAdapter { public class ButtonHoverListener extends MouseAdapter {
/**
* Gestionnaire d'animation pour le survol du bouton.
*/
private final ButtonHoverAnimator animator; private final ButtonHoverAnimator animator;
/**
* Constructeur pour initialiser le listener avec un animateur.
*
* @param animator Instance de {@link ButtonHoverAnimator} pour gérer l'animation du bouton
*/
public ButtonHoverListener(ButtonHoverAnimator animator) { public ButtonHoverListener(ButtonHoverAnimator animator) {
this.animator = animator; this.animator = animator;
} }
/**
* Déclenché lorsque la souris entre dans la zone du bouton.
* Démarre l'animation de survol et joue un son.
*
* @param e Événement de souris
* @see MouseEvent
*/
@Override @Override
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
animator.startAnimation(true); animator.startAnimation(true); // Démarre l'animation de survol
MusicPlayer.loadSound(Sounds.SOUNDS1); // Charge le son MusicPlayer.loadSound(Sounds.SOUNDS1); // Charge le son
MusicPlayer.playSound(); // Joue le son MusicPlayer.playSound(); // Joue le son
} }
/**
* Déclenché lorsque la souris quitte la zone du bouton.
* Arrête l'animation de survol.
*
* @param e Événement de souris
* @see MouseEvent
*/
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
animator.startAnimation(false); animator.startAnimation(false); // Arrête l'animation de survol
} }
} }

View File

@@ -13,16 +13,53 @@ import java.sql.SQLException;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
/**
* Contrôleur pour gérer les interactions liées à la sélection du mode de jeu.
* Cette classe gère les actions déclenchées depuis l'interface de sélection de mode de jeu,
* comme le démarrage d'une partie ou la récupération de seeds depuis une base de données.
*
* @version 1.0
* @author Moncef STITI, Khalid CHENOUNA
*/
public class GameModeController implements ActionListener { public class GameModeController implements ActionListener {
/**
* Panneau de sélection du mode de jeu.
*/
private GameModeSelectionPanel gameModeSelectionPanel; private GameModeSelectionPanel gameModeSelectionPanel;
/**
* Fenêtre principale du jeu.
*/
private JFrame gameFrame; private JFrame gameFrame;
/**
* Menu principal de l'application.
*/
private MainMenu mainMenu; private MainMenu mainMenu;
private Database database;
/**
* Fenêtre de sélection du mode de jeu.
*/
private JFrame gameModeFrame; private JFrame gameModeFrame;
/**
* Instance de la base de données pour gérer les seeds.
*/
private Database database;
/**
* Instance du plateau de jeu actif.
*/
private static Board board; private static Board board;
// Constructeur sans le panneau /**
* Constructeur pour initialiser le contrôleur sans panneau de sélection.
*
* @param gameFrame Fenêtre principale du jeu
* @param mainMenu Menu principal
* @param gameModeFrame Fenêtre de sélection du mode de jeu
*/
public GameModeController(JFrame gameFrame, MainMenu mainMenu, JFrame gameModeFrame) { public GameModeController(JFrame gameFrame, MainMenu mainMenu, JFrame gameModeFrame) {
this.gameFrame = gameFrame; this.gameFrame = gameFrame;
this.mainMenu = mainMenu; this.mainMenu = mainMenu;
@@ -36,16 +73,24 @@ public class GameModeController implements ActionListener {
} }
} }
// Méthode pour associer le panneau /**
* Associe le panneau de sélection du mode de jeu à ce contrôleur.
*
* @param panel Panneau de sélection du mode de jeu
*/
public void setGameModeSelectionPanel(GameModeSelectionPanel panel) { public void setGameModeSelectionPanel(GameModeSelectionPanel panel) {
this.gameModeSelectionPanel = panel; this.gameModeSelectionPanel = panel;
} }
/**
* Gère les actions déclenchées par des événements utilisateur, comme le choix ou le démarrage d'un mode de jeu.
*
* @param e Événement d'action
*/
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand(); String command = e.getActionCommand();
// Handle any series dynamically
if (isDynamicSeries(command)) { if (isDynamicSeries(command)) {
startGame(getSeedFromDatabaseByName(command)); startGame(getSeedFromDatabaseByName(command));
} else if (command.equals("Démarrer")) { } else if (command.equals("Démarrer")) {
@@ -57,16 +102,27 @@ public void actionPerformed(ActionEvent e) {
} }
} }
/**
* Récupère une seed depuis la base de données en fonction du nom du mode de jeu.
*
* @param modeName Nom du mode de jeu
* @return La seed associée au mode de jeu, ou -1 en cas d'erreur
*/
private long getSeedFromDatabaseByName(String modeName) { private long getSeedFromDatabaseByName(String modeName) {
try { try {
Options.SEED = this.database.getSeedByName(modeName); Options.SEED = this.database.getSeedByName(modeName);
return Options.SEED; return Options.SEED;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
return -1; // Retourner une valeur par défaut si une erreur survient return -1;
} }
} }
/**
* Ajoute une seed personnalisée dans la base de données.
*
* @param seed La seed à ajouter
*/
private void addCustomSeedToDatabase(long seed) { private void addCustomSeedToDatabase(long seed) {
try { try {
Options.SEED = seed; Options.SEED = seed;
@@ -77,9 +133,14 @@ public void actionPerformed(ActionEvent e) {
} }
} }
/**
* Vérifie si une série est dynamique en vérifiant son existence dans la base de données.
*
* @param seriesName Nom de la série
* @return {@code true} si la série est dynamique, {@code false} sinon
*/
private boolean isDynamicSeries(String seriesName) { private boolean isDynamicSeries(String seriesName) {
try { try {
// Check if the series exists in the database
return database.getSeedByName(seriesName) != -1; return database.getSeedByName(seriesName) != -1;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@@ -87,30 +148,35 @@ public void actionPerformed(ActionEvent e) {
} }
} }
/**
* Démarre une partie avec une seed spécifique.
*
* @param seed La seed utilisée pour démarrer le jeu
*/
private void startGame(long seed) { private void startGame(long seed) {
// Supprimer la potentielle ancienne instance de board
GameModeController.board = null; GameModeController.board = null;
// Cacher la fenêtre de sélection de mode
this.gameModeFrame.setVisible(false); this.gameModeFrame.setVisible(false);
// Cacher la fenêtre avant de faire des modifications
this.gameFrame.setVisible(false); this.gameFrame.setVisible(false);
if (Options.FULL_SCREEN) { if (Options.FULL_SCREEN) {
gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Set frame to full screen gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
} else { } else {
Dimension mainMenuSize = this.mainMenu.getSize(); Dimension mainMenuSize = this.mainMenu.getSize();
Point mainMenuLocation = this.mainMenu.getLocation(); Point mainMenuLocation = this.mainMenu.getLocation();
gameFrame.setSize(mainMenuSize); gameFrame.setSize(mainMenuSize);
gameFrame.setLocation(mainMenuLocation); gameFrame.setLocation(mainMenuLocation);
} }
GameModeController.board = new Board(this.gameFrame, seed); GameModeController.board = new Board(this.gameFrame, seed);
//this.gameModeFrame.setVisible(false);
this.gameFrame.setVisible(true); this.gameFrame.setVisible(true);
this.gameFrame.add(board); this.gameFrame.add(board);
} }
/**
* Récupère le plateau de jeu actif.
*
* @return Le plateau de jeu actif
*/
public static Board getGameModeBoard() { public static Board getGameModeBoard() {
return board; return board;
} }