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.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 {
/**
* Gestionnaire d'animation pour le survol du bouton.
*/
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) {
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
public void mouseEntered(MouseEvent e) {
animator.startAnimation(true);
MusicPlayer.loadSound(Sounds.SOUNDS1); // Charge le son
MusicPlayer.playSound(); // Joue le son
animator.startAnimation(true); // Démarre l'animation de survol
MusicPlayer.loadSound(Sounds.SOUNDS1); // Charge 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
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.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 {
/**
* Panneau de sélection du mode de jeu.
*/
private GameModeSelectionPanel gameModeSelectionPanel;
/**
* Fenêtre principale du jeu.
*/
private JFrame gameFrame;
/**
* Menu principal de l'application.
*/
private MainMenu mainMenu;
private Database database;
/**
* Fenêtre de sélection du mode de jeu.
*/
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;
// 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) {
this.gameFrame = gameFrame;
this.mainMenu = mainMenu;
@@ -36,37 +73,56 @@ 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) {
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
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
// Handle any series dynamically
if (isDynamicSeries(command)) {
startGame(getSeedFromDatabaseByName(command));
} else if (command.equals("Démarrer")) {
long seed = gameModeSelectionPanel.getLongSeed();
startGame(seed);
addCustomSeedToDatabase(seed);
} else {
System.out.println("Commande inconnue: " + command);
if (isDynamicSeries(command)) {
startGame(getSeedFromDatabaseByName(command));
} else if (command.equals("Démarrer")) {
long seed = gameModeSelectionPanel.getLongSeed();
startGame(seed);
addCustomSeedToDatabase(seed);
} else {
System.out.println("Commande inconnue: " + command);
}
}
}
/**
* 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) {
try {
Options.SEED = this.database.getSeedByName(modeName);
return Options.SEED;
} catch (SQLException e) {
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) {
try {
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) {
try {
// Check if the series exists in the database
return database.getSeedByName(seriesName) != -1;
} catch (SQLException e) {
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) {
// Supprimer la potentielle ancienne instance de board
GameModeController.board = null;
// Cacher la fenêtre de sélection de mode
this.gameModeFrame.setVisible(false);
// Cacher la fenêtre avant de faire des modifications
this.gameFrame.setVisible(false);
if (Options.FULL_SCREEN) {
gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); // Set frame to full screen
gameFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
} else {
Dimension mainMenuSize = this.mainMenu.getSize();
Point mainMenuLocation = this.mainMenu.getLocation();
gameFrame.setSize(mainMenuSize);
gameFrame.setLocation(mainMenuLocation);
}
GameModeController.board = new Board(this.gameFrame,seed);
//this.gameModeFrame.setVisible(false);
GameModeController.board = new Board(this.gameFrame, seed);
this.gameFrame.setVisible(true);
this.gameFrame.add(board);
}
/**
* Récupère le plateau de jeu actif.
*
* @return Le plateau de jeu actif
*/
public static Board getGameModeBoard() {
return board;
}