diff --git a/Makefile2 b/Makefile2 new file mode 100644 index 0000000..bce576d --- /dev/null +++ b/Makefile2 @@ -0,0 +1,248 @@ +# Définition des variables +JC = javac +JVM = java +JCFLAGS = -d build -classpath "libs/mariadb-client.jar:build" -sourcepath src +JVMFLAGS = -classpath ".:libs/mariadb-client.jar:build" +JARNAME = dorfromantik.jar +ENTRY = fr.monkhanny.dorfromantik.Main +PACKAGE = build/fr/monkhanny/dorfromantik +SRC = src/fr/monkhanny/dorfromantik + +# Compilation des fichiers .java +${PACKAGE}/Main.class ${PACKAGE}/listeners/GameModeFilterButtonActionListener.class ${PACKAGE}/listeners/GameMainMenuButtonListener.class ${PACKAGE}/controller/GameModeController.class: ${SRC}/Main.java ${SRC}/listeners/GameModeFilterButtonActionListener.java ${SRC}/listeners/GameMainMenuButtonListener.java ${SRC}/controller/GameModeController.java ${PACKAGE}/Options.class ${PACKAGE}/utils/MusicPlayer.class ${PACKAGE}/controller/MainMenuResizeController.class ${PACKAGE}/controller/MainMenuButtonController.class ${PACKAGE}/enums/Musics.class ${PACKAGE}/listeners/CloseWindowListener.class ${PACKAGE}/gui/SettingsPanel.class ${PACKAGE}/controller/TutorialController.class ${PACKAGE}/gui/GameModeSelectionPanel.class ${PACKAGE}/utils/Database.class ${PACKAGE}/game/Board.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/GameModeSelectionPanel.class + ${JC} ${JCFLAGS} ${SRC}/Main.java ${SRC}/listeners/GameModeFilterButtonActionListener.java ${SRC}/listeners/GameMainMenuButtonListener.java ${SRC}/controller/GameModeController.java + + +${PACKAGE}/Options.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/controller/MainMenuMouseController.class ${PACKAGE}/gui/ButtonPanel.class ${PACKAGE}/gui/ButtonHoverAnimator.class ${PACKAGE}/controller/ButtonHoverAnimationListener.class ${PACKAGE}/utils/MusicPlayer.class ${PACKAGE}/controller/ButtonHoverListener.class: ${SRC}/Options.java ${SRC}/gui/MainMenu.java ${SRC}/controller/MainMenuMouseController.java ${SRC}/gui/ButtonPanel.java ${SRC}/gui/ButtonHoverAnimator.java ${SRC}/controller/ButtonHoverAnimationListener.java ${SRC}/utils/MusicPlayer.java ${SRC}/controller/ButtonHoverListener.java ${PACKAGE}/utils/FontManager.class ${PACKAGE}/utils/ImageLoader.class ${PACKAGE}/enums/Fonts.class ${PACKAGE}/components/Title.class ${PACKAGE}/gui/Leaderboard.class ${PACKAGE}/gui/LeaderboardWorldWide.class ${PACKAGE}/components/Button.class ${PACKAGE}/enums/Musics.class ${PACKAGE}/enums/Sounds.class ${PACKAGE}/utils/SoundLoader.class + ${JC} ${JCFLAGS} ${SRC}/Options.java ${SRC}/gui/MainMenu.java ${SRC}/controller/MainMenuMouseController.java ${SRC}/gui/ButtonPanel.java ${SRC}/gui/ButtonHoverAnimator.java ${SRC}/controller/ButtonHoverAnimationListener.java ${SRC}/utils/MusicPlayer.java ${SRC}/controller/ButtonHoverListener.java + + +################################ +# Compilation des composants +${PACKAGE}/components/Button.class: ${SRC}/components/Button.java ${PACKAGE}/utils/FontManager.class + ${JC} ${JCFLAGS} ${SRC}/components/Button.java + +${PACKAGE}/components/Title.class: ${SRC}/components/Title.java ${PACKAGE}/utils/FontManager.class + ${JC} ${JCFLAGS} ${SRC}/components/Title.java + +################################ +# -----------------------------# +################################ +# Compilation des enums + +${PACKAGE}/enums/Biome.class: ${SRC}/enums/Biome.java + ${JC} ${JCFLAGS} ${SRC}/enums/Biome.java + +${PACKAGE}/enums/Fonts.class: ${SRC}/enums/Fonts.java + ${JC} ${JCFLAGS} ${SRC}/enums/Fonts.java + +${PACKAGE}/enums/Images.class: ${SRC}/enums/Images.java + ${JC} ${JCFLAGS} ${SRC}/enums/Images.java + +${PACKAGE}/enums/Musics.class: ${SRC}/enums/Musics.java + ${JC} ${JCFLAGS} ${SRC}/enums/Musics.java + +${PACKAGE}/enums/Sounds.class: ${SRC}/enums/Sounds.java + ${JC} ${JCFLAGS} ${SRC}/enums/Sounds.java + +${PACKAGE}/enums/TileOrientation.class: ${SRC}/enums/TileOrientation.java + ${JC} ${JCFLAGS} ${SRC}/enums/TileOrientation.java +################################ +# -----------------------------# +################################ +# Compilation des utilitaires + +${PACKAGE}/utils/SoundLoader.class: ${SRC}/utils/SoundLoader.java + ${JC} ${JCFLAGS} ${SRC}/utils/SoundLoader.java + +${PACKAGE}/utils/PlayerScore.class: ${SRC}/utils/PlayerScore.java + ${JC} ${JCFLAGS} ${SRC}/utils/PlayerScore.java + +${PACKAGE}/utils/ImageLoader.class: ${SRC}/utils/ImageLoader.java + ${JC} ${JCFLAGS} ${SRC}/utils/ImageLoader.java + +${PACKAGE}/utils/Hexagon.class: ${SRC}/utils/Hexagon.java + ${JC} ${JCFLAGS} ${SRC}/utils/Hexagon.java + +${PACKAGE}/utils/FontManager.class: ${SRC}/utils/FontManager.java ${PACKAGE}/enums/Fonts.class ${PACKAGE}/utils/FontLoader.class + ${JC} ${JCFLAGS} ${SRC}/utils/FontManager.java + +${PACKAGE}/utils/FontLoader.class: ${SRC}/utils/FontLoader.java ${PACKAGE}/enums/Fonts.class + ${JC} ${JCFLAGS} ${SRC}/utils/FontLoader.java + +${PACKAGE}/utils/Database.class: ${SRC}/utils/Database.java ${PACKAGE}/utils/PlayerScore.class + ${JC} ${JCFLAGS} ${SRC}/utils/Database.java + + +################################ +# -----------------------------# +################################ +# Compilation des listeners + +${PACKAGE}/listeners/TutorialButtonHoverListener.class: ${SRC}/listeners/TutorialButtonHoverListener.java + ${JC} ${JCFLAGS} ${SRC}/listeners/TutorialButtonHoverListener.java + +${PACKAGE}/listeners/TilePanningActionListener.class: ${SRC}/listeners/TilePanningActionListener.java ${PACKAGE}/game/Board.class + ${JC} ${JCFLAGS} ${SRC}/listeners/TilePanningActionListener.java + +${PACKAGE}/listeners/SoundsVolumeChangeListener.class: ${SRC}/listeners/SoundsVolumeChangeListener.java ${PACKAGE}/utils/MusicPlayer.class ${PACKAGE}/Options.class + ${JC} ${JCFLAGS} ${SRC}/listeners/SoundsVolumeChangeListener.java + +${PACKAGE}/listeners/MuteCheckBoxListener.class: ${SRC}/listeners/MuteCheckBoxListener.java ${PACKAGE}/utils/MusicPlayer.class ${PACKAGE}/Options.class + ${JC} ${JCFLAGS} ${SRC}/listeners/MuteCheckBoxListener.java + +${PACKAGE}/listeners/MusicVolumeChangeListener.class: ${SRC}/listeners/MusicVolumeChangeListener.java ${PACKAGE}/utils/MusicPlayer.class ${PACKAGE}/Options.class + ${JC} ${JCFLAGS} ${SRC}/listeners/MusicVolumeChangeListener.java + +${PACKAGE}/listeners/GameSettingsWindowListener.class: ${SRC}/listeners/GameSettingsWindowListener.java + ${JC} ${JCFLAGS} ${SRC}/listeners/GameSettingsWindowListener.java + +${PACKAGE}/listeners/GameSettingsButtonListener.class: ${SRC}/listeners/GameSettingsButtonListener.java ${PACKAGE}/Options.class ${PACKAGE}/game/EscapeMenu.class ${PACKAGE}/gui/SettingsPanel.class + ${JC} ${JCFLAGS} ${SRC}/listeners/GameSettingsButtonListener.java + +${PACKAGE}/listeners/GameResumeButtonListener.class: ${SRC}/listeners/GameResumeButtonListener.java ${PACKAGE}/Options.class ${PACKAGE}/game/EscapeMenu.class + ${JC} ${JCFLAGS} ${SRC}/listeners/GameResumeButtonListener.java + +${PACKAGE}/listeners/GameQuitButtonListener.class: ${SRC}/listeners/GameQuitButtonListener.java + ${JC} ${JCFLAGS} ${SRC}/listeners/GameQuitButtonListener.java + + +${PACKAGE}/listeners/GameModePrevButtonActionListener.class: ${SRC}/listeners/GameModePrevButtonActionListener.java ${PACKAGE}/gui/GameModeSelectionPanel.class + ${JC} ${JCFLAGS} ${SRC}/listeners/GameModePrevButtonActionListener.java + +${PACKAGE}/listeners/GameModeNextButtonActionListener.class: ${SRC}/listeners/GameModeNextButtonActionListener.java ${PACKAGE}/gui/GameModeSelectionPanel.class + ${JC} ${JCFLAGS} ${SRC}/listeners/GameModeNextButtonActionListener.java + +${PACKAGE}/listeners/GameModeHoverEffectMouseListener.class: ${SRC}/listeners/GameModeHoverEffectMouseListener.java ${PACKAGE}/enums/Sounds.class ${PACKAGE}/utils/MusicPlayer.class + ${JC} ${JCFLAGS} ${SRC}/listeners/GameModeHoverEffectMouseListener.java + +${PACKAGE}/listeners/EscapeMenuCloseListener.class: ${SRC}/listeners/EscapeMenuCloseListener.java ${PACKAGE}/Options.class + ${JC} ${JCFLAGS} ${SRC}/listeners/EscapeMenuCloseListener.java + +${PACKAGE}/listeners/CloseWindowListener.class: ${SRC}/listeners/CloseWindowListener.java ${PACKAGE}/gui/MainMenu.class + ${JC} ${JCFLAGS} ${SRC}/listeners/CloseWindowListener.java + +${PACKAGE}/listeners/CloseButtonListener.class: ${SRC}/listeners/CloseButtonListener.java ${PACKAGE}/gui/MainMenu.class + ${JC} ${JCFLAGS} ${SRC}/listeners/CloseButtonListener.java + + +################################ +# -----------------------------# +################################ +# Compilation des GUI + +${PACKAGE}/gui/TutorialPanel.class: ${SRC}/gui/TutorialPanel.java ${PACKAGE}/components/Title.class ${PACKAGE}/listeners/CloseButtonListener.class ${PACKAGE}/listeners/TutorialButtonHoverListener.class ${PACKAGE}/enums/Images.class ${PACKAGE}/gui/Step.class + ${JC} ${JCFLAGS} ${SRC}/gui/TutorialPanel.java + +${PACKAGE}/gui/Step.class: ${SRC}/gui/Step.java + ${JC} ${JCFLAGS} ${SRC}/gui/Step.java + +${PACKAGE}/gui/SettingsPanel.class: ${SRC}/gui/SettingsPanel.java ${PACKAGE}/enums/Images.class ${PACKAGE}/components/Title.class ${PACKAGE}/Options.class ${PACKAGE}/listeners/MusicVolumeChangeListener.class ${PACKAGE}/listeners/SoundsVolumeChangeListener.class ${PACKAGE}/listeners/MuteCheckBoxListener.class ${PACKAGE}/listeners/CloseButtonListener.class + ${JC} ${JCFLAGS} ${SRC}/gui/SettingsPanel.java + +${PACKAGE}/gui/Reward.class: ${SRC}/gui/Reward.java + ${JC} ${JCFLAGS} ${SRC}/gui/Reward.java + +${PACKAGE}/gui/LeaderboardWorldWide.class: ${SRC}/gui/LeaderboardWorldWide.java ${PACKAGE}/utils/Database.class ${PACKAGE}/utils/PlayerScore.class ${PACKAGE}/gui/Leaderboard.class + ${JC} ${JCFLAGS} ${SRC}/gui/LeaderboardWorldWide.java + +${PACKAGE}/gui/LeaderboardByTier.class: ${SRC}/gui/LeaderboardByTier.java ${PACKAGE}/gui/Leaderboard.class + ${JC} ${JCFLAGS} ${SRC}/gui/LeaderboardByTier.java + +${PACKAGE}/gui/LeaderboardBarChartPanel.class: ${SRC}/gui/LeaderboardBarChartPanel.java + ${JC} ${JCFLAGS} ${SRC}/gui/LeaderboardBarChartPanel.java + +${PACKAGE}/gui/Leaderboard.class: ${SRC}/gui/Leaderboard.java + ${JC} ${JCFLAGS} ${SRC}/gui/Leaderboard.java + +${PACKAGE}/gui/GameOver.class: ${SRC}/gui/GameOver.java ${PACKAGE}/utils/Database.class ${PACKAGE}/listeners/GameMainMenuButtonListener.class ${PACKAGE}/Options.class ${PACKAGE}/enums/Fonts.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/BarChartPanel.class ${PACKAGE}/listeners/GameMainMenuButtonListener.class + ${JC} ${JCFLAGS} ${SRC}/gui/GameOver.java + +${PACKAGE}/gui/GameModeSelectionPanel.class: ${SRC}/gui/GameModeSelectionPanel.java ${PACKAGE}/components/Title.class ${PACKAGE}/listeners/CloseButtonListener.class ${PACKAGE}/listeners/GameModeFilterButtonActionListener.class ${PACKAGE}/listeners/GameModeHoverEffectMouseListener.class ${PACKAGE}/listeners/GameModeNextButtonActionListener.class ${PACKAGE}/listeners/GameModePrevButtonActionListener.class ${PACKAGE}/utils/Database.class ${PACKAGE}/gui/MainMenu.class + ${JC} ${JCFLAGS} ${SRC}/gui/GameModeSelectionPanel.java + +${PACKAGE}/gui/GameControlsMenu.class: ${SRC}/gui/GameControlsMenu.java + ${JC} ${JCFLAGS} ${SRC}/gui/GameControlsMenu.java + + +${PACKAGE}/gui/BarChartPanel.class: ${SRC}/gui/BarChartPanel.java + ${JC} ${JCFLAGS} ${SRC}/gui/BarChartPanel.java + +################################ +# -----------------------------# +################################ +# Compilation des game + +${PACKAGE}/game/TilePanningTransition.class: ${SRC}/game/TilePanningTransition.java ${PACKAGE}/listeners/TilePanningActionListener.class ${PACKAGE}/game/Board.class + ${JC} ${JCFLAGS} ${SRC}/game/TilePanningTransition.java + +${PACKAGE}/listeners/GameMouseClickListener.class ${PACKAGE}/listeners/GameMouseWheelListener.class ${SRC}/listeners/GameSpaceKeyListener.class ${SRC}/listeners/GameArrowKeyListener.java ${SRC}/listeners/GameZoomListener.java ${PACKAGE}/game/ScoreManager.class ${PACKAGE}/game/Tile.class ${PACKAGE}/utils/HexagonDrawer.class ${PACKAGE}/game/Pocket.class ${PACKAGE}/game/Board.class ${PACKAGE}/game/Cell.class: ${SRC}/listeners/GameMouseClickListener.java ${SRC}/listeners/GameMouseWheelListener.java ${SRC}/listeners/GameSpaceKeyListener.java ${SRC}/listeners/GameArrowKeyListener.java ${SRC}/listeners/GameZoomListener.java ${SRC}/game/ScoreManager.java ${SRC}/game/Tile.java ${SRC}/utils/HexagonDrawer.java ${SRC}/game/Pocket.java ${SRC}/game/Board.java ${SRC}/game/Cell.java ${PACKAGE}/enums/Biome.class ${PACKAGE}/enums/TileOrientation.class ${PACKAGE}/utils/Hexagon.class ${PACKAGE}/game/Game.class ${PACKAGE}/utils/Database.class ${PACKAGE}/game/RemainingTilesIndicator.class ${PACKAGE}/gui/GameControlsMenu.class ${PACKAGE}/game/ScoreDisplay.class ${PACKAGE}/Options.class ${PACKAGE}/enums/Fonts.class ${PACKAGE}/gui/GameOver.class + ${JC} ${JCFLAGS} ${SRC}/listeners/GameMouseClickListener.java ${SRC}/listeners/GameMouseWheelListener.java ${SRC}/listeners/GameSpaceKeyListener.java ${SRC}/listeners/GameArrowKeyListener.java ${SRC}/listeners/GameZoomListener.java ${SRC}/game/ScoreManager.java ${SRC}/game/Tile.java ${SRC}/utils/HexagonDrawer.java ${SRC}/game/Pocket.java ${SRC}/game/Board.java ${SRC}/game/Cell.java + +${PACKAGE}/game/ScoreDisplay.class: ${SRC}/game/ScoreDisplay.java + ${JC} ${JCFLAGS} ${SRC}/game/ScoreDisplay.java + +${PACKAGE}/game/RemainingTilesIndicator.class: ${SRC}/game/RemainingTilesIndicator.java + ${JC} ${JCFLAGS} ${SRC}/game/RemainingTilesIndicator.java + + +${PACKAGE}/game/PauseGame.class: ${SRC}/game/PauseGame.java ${PACKAGE}/Options.class ${PACKAGE}/listeners/EscapeMenuCloseListener.class ${PACKAGE}/listeners/GameQuitButtonListener.class ${PACKAGE}/listeners/GameResumeButtonListener.class ${PACKAGE}/listeners/GameSettingsButtonListener.class ${PACKAGE}/game/EscapeMenu.class + ${JC} ${JCFLAGS} ${SRC}/game/PauseGame.java + +${PACKAGE}/game/Game.class: ${SRC}/game/Game.java + ${JC} ${JCFLAGS} ${SRC}/game/Game.java + +${PACKAGE}/game/EscapeMenu.class: ${SRC}/game/EscapeMenu.java ${PACKAGE}/components/Title.class + ${JC} ${JCFLAGS} ${SRC}/game/EscapeMenu.java + +${PACKAGE}/game/CustomMouseMotionAdapter.class: ${SRC}/game/CustomMouseMotionAdapter.java ${PACKAGE}/game/Board.class + ${JC} ${JCFLAGS} ${SRC}/game/CustomMouseMotionAdapter.java + +${PACKAGE}/game/CustomKeyAdapter.class: ${SRC}/game/CustomKeyAdapter.java ${PACKAGE}/game/Board.class + ${JC} ${JCFLAGS} ${SRC}/game/CustomKeyAdapter.java + + + +################################ +# -----------------------------# +################################ +# Compilation des controllers + +${PACKAGE}/controller/TutorialController.class: ${SRC}/controller/TutorialController.java ${PACKAGE}/gui/TutorialPanel.class ${PACKAGE}/gui/Step.class ${PACKAGE}/enums/Images.class ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/TutorialPanel.class ${PACKAGE}/gui/MainMenu.class + ${JC} ${JCFLAGS} ${SRC}/controller/TutorialController.java + + +${PACKAGE}/controller/MainMenuResizeHandler.class: ${SRC}/controller/MainMenuResizeHandler.java ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/Options.class ${PACKAGE}/gui/ButtonHoverAnimator.class + ${JC} ${JCFLAGS} ${SRC}/controller/MainMenuResizeHandler.java + +${PACKAGE}/controller/MainMenuResizeController.class: ${SRC}/controller/MainMenuResizeController.java ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/controller/MainMenuResizeHandler.class + ${JC} ${JCFLAGS} ${SRC}/controller/MainMenuResizeController.java + + +${PACKAGE}/controller/MainMenuButtonController.class: ${SRC}/controller/MainMenuButtonController.java ${PACKAGE}/gui/MainMenu.class ${PACKAGE}/gui/ButtonPanel.class + ${JC} ${JCFLAGS} ${SRC}/controller/MainMenuButtonController.java + + + +# Cibles supplémentaires +run: + ${JVM} ${JVMFLAGS} ${ENTRY} + +clean: + rm -rf build + rm -rf docs + +# Génération du fichier .jar +jar: + jar cvfm ${JARNAME} Manifest.MF -C build/ . -C libs/ . + +# Extraction des fichiers MariaDB +extract-mariadb: + rm -rf build/org + unzip -qo libs/mariadb-client.jar -d build + rm -rf build/Version.java.template + rm -rf build/META-INF + +# Documentation JavaDoc +javadoc: + javadoc -d docs -sourcepath src -subpackages fr.monkhanny.dorfromantik -classpath libs/mariadb-client.jar diff --git a/src/fr/monkhanny/dorfromantik/Main.java b/src/fr/monkhanny/dorfromantik/Main.java index 8f077ac..4745bc8 100644 --- a/src/fr/monkhanny/dorfromantik/Main.java +++ b/src/fr/monkhanny/dorfromantik/Main.java @@ -11,7 +11,6 @@ import fr.monkhanny.dorfromantik.controller.TutorialController; import fr.monkhanny.dorfromantik.controller.GameModeController; import fr.monkhanny.dorfromantik.gui.GameModeSelectionPanel; -import javax.swing.ImageIcon; import javax.swing.JFrame; /** diff --git a/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java b/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java index a6e73e0..915c12a 100644 --- a/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java +++ b/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java @@ -2,6 +2,7 @@ package fr.monkhanny.dorfromantik.controller; import fr.monkhanny.dorfromantik.gui.MainMenu; import fr.monkhanny.dorfromantik.gui.ButtonPanel; +import fr.monkhanny.dorfromantik.listeners.GameWindowCloseListener; import javax.swing.*; import java.awt.event.ActionEvent; @@ -75,6 +76,8 @@ public class MainMenuButtonController implements ActionListener { this.gameFrame = gameFrame; configureFrame(this.gameFrame); + this.gameFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + this.gameFrame.addWindowListener(new GameWindowCloseListener(this.gameFrame)); } /** diff --git a/src/fr/monkhanny/dorfromantik/gui/MainMenu.java b/src/fr/monkhanny/dorfromantik/gui/MainMenu.java index 75f943c..ca9107e 100644 --- a/src/fr/monkhanny/dorfromantik/gui/MainMenu.java +++ b/src/fr/monkhanny/dorfromantik/gui/MainMenu.java @@ -3,6 +3,7 @@ package fr.monkhanny.dorfromantik.gui; import fr.monkhanny.dorfromantik.utils.FontManager; import fr.monkhanny.dorfromantik.utils.ImageLoader; import fr.monkhanny.dorfromantik.enums.Fonts; +import fr.monkhanny.dorfromantik.listeners.GameWindowCloseListener; import fr.monkhanny.dorfromantik.components.Title; import fr.monkhanny.dorfromantik.Options; @@ -49,7 +50,8 @@ public class MainMenu extends JFrame { // Paramétrage de la fenêtre principale this.setTitle("Dorfromantik - Menu Principal"); - this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + this.addWindowListener(new GameWindowCloseListener(this)); super.setIconImage(ImageLoader.APPLICATION_ICON); this.setMinimumSize(Options.MINIMUM_FRAME_SIZE); this.setSize(1200, 800); diff --git a/src/fr/monkhanny/dorfromantik/listeners/GameWindowCloseListener.java b/src/fr/monkhanny/dorfromantik/listeners/GameWindowCloseListener.java new file mode 100644 index 0000000..8c15cd7 --- /dev/null +++ b/src/fr/monkhanny/dorfromantik/listeners/GameWindowCloseListener.java @@ -0,0 +1,53 @@ +package fr.monkhanny.dorfromantik.listeners; + +import javax.swing.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +/** + * Gestionnaire pour la fermeture de la fenêtre de jeu avec confirmation. + * Ce gestionnaire affiche une boîte de dialogue de confirmation avant de quitter le jeu. + * + * @version 1.0 + * @author Moncef STITI + */ +public class GameWindowCloseListener extends WindowAdapter { + + /** + * Fenêtre à gérer. + */ + private final JFrame frame; + + /** + * Constructeur pour initialiser le gestionnaire avec la fenêtre cible. + * + * @param frame La fenêtre à gérer + */ + public GameWindowCloseListener(JFrame frame) { + this.frame = frame; + } + + /** + * Méthode appelée lorsque la fenêtre est en cours de fermeture. + * Affiche une boîte de dialogue de confirmation avant de quitter le jeu. + * + * @param e l'événement de fermeture de la fenêtre. + */ + @Override + public void windowClosing(WindowEvent e) { + Object[] options = {"Oui", "Non"}; // Options personnalisées en français + int choice = JOptionPane.showOptionDialog( + frame, + "Êtes-vous sûr de vouloir quitter le jeu ?", // Message + "Quitter le jeu", // Titre + JOptionPane.YES_NO_OPTION, // Type d'option + JOptionPane.QUESTION_MESSAGE, // Icône + null, // Icône personnalisée (null pour l'icône par défaut) + options, // Options de boutons personnalisées + options[1] // Valeur par défaut ("Non") + ); + if (choice == JOptionPane.YES_OPTION) { + System.exit(0); + } + } +}