diff --git a/TestV2/src/fr/monkhanny/dorfromantik/Main.java b/TestV2/src/fr/monkhanny/dorfromantik/Main.java index 51c4eb9..f17b21a 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/Main.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/Main.java @@ -12,7 +12,6 @@ import fr.monkhanny.dorfromantik.controller.TutorialController; import fr.monkhanny.dorfromantik.controller.GameModeController; import fr.monkhanny.dorfromantik.gui.GameModeSelectionPanel; - import javax.swing.JFrame; /** @@ -23,62 +22,89 @@ import javax.swing.JFrame; * @see MainMenuResizeController */ public class Main { - /** - * Méthode principale du jeu - * @param args Tableau de String contenant les arguments passé en paramètre au programme - */ - public static void main(String[] args) { - // Créer la fenêtre des modes de jeu - JFrame gameModeFrame = new JFrame("Choix des modes de jeu - Dorfromantik"); - // Créer la fenêtre du jeu - JFrame gameFrame = new JFrame("Jeu - Dorfromantik"); + private static JFrame gameModeFrame; + private static JFrame gameFrame; + private static JFrame settingsFrame; + private static JFrame howToPlayFrame; + private static JFrame rewardsFrame; - // Créer la fenêtre des paramètres - JFrame settingsFrame = new JFrame("Paramètres - Dorfromantik"); + // Variable statique pour savoir si la musique a été jouée + private static boolean isMusicPlayed = false; - // Créer la fenêtre du tutoriel - JFrame howToPlayFrame = new JFrame("Comment jouer ? - Dorfromantik"); + // Fonction pour réinitialiser tout le jeu + public static void resetGame() { + // 1. Fermer toutes les fenêtres ouvertes + if (gameModeFrame != null) { + gameModeFrame.dispose(); // Ferme la fenêtre du choix des modes de jeu + } + if (gameFrame != null) { + gameFrame.dispose(); // Ferme la fenêtre de jeu + } + if (settingsFrame != null) { + settingsFrame.dispose(); // Ferme la fenêtre des paramètres + } + if (howToPlayFrame != null) { + howToPlayFrame.dispose(); // Ferme la fenêtre du tutoriel + } + if (rewardsFrame != null) { + rewardsFrame.dispose(); // Ferme la fenêtre des récompenses + } - // Créer la fenêtre des récompenses - JFrame rewardsFrame = new JFrame("Récompenses - Dorfromantik"); + // 2. Réinitialiser les variables globales ou statiques si nécessaire + Options.mainMenu = new MainMenu(); // Réinitialiser le menu principal - // Menu principal - MusicPlayer.loadMusic(Musics.MAIN_MENU_MUSIC); - MusicPlayer.playMusic(); - MainMenu mainMenu = new MainMenu(); - @SuppressWarnings("unused") - MainMenuResizeController MainMenuResizeController = new MainMenuResizeController(mainMenu); - @SuppressWarnings("unused") - MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameModeFrame,gameFrame, rewardsFrame); + // 3. Lancer la musique uniquement si ce n'est pas déjà fait + if (!isMusicPlayed) { + MusicPlayer.loadMusic(Musics.MAIN_MENU_MUSIC); // Recharger la musique du menu principal + MusicPlayer.playMusic(); // Reprendre la musique + isMusicPlayed = true; // Marquer la musique comme jouée + } + // 4. Créer les fenêtres à nouveau comme au début + gameModeFrame = new JFrame("Choix des modes de jeu - Dorfromantik"); + gameFrame = new JFrame("Jeu - Dorfromantik"); + settingsFrame = new JFrame("Paramètres - Dorfromantik"); + howToPlayFrame = new JFrame("Comment jouer ? - Dorfromantik"); + rewardsFrame = new JFrame("Récompenses - Dorfromantik"); - // Fenêtre des paramètres - CloseWindowListener settingsWindowListener = new CloseWindowListener(mainMenu, settingsFrame); - SettingsPanel settingsPanel = new SettingsPanel(mainMenu, settingsFrame); - settingsFrame.addWindowListener(settingsWindowListener); - settingsFrame.add(settingsPanel); + // Re-créer et réinitialiser les panels et les contrôleurs + MainMenuResizeController mainMenuResizeController = new MainMenuResizeController(Options.mainMenu); + MainMenuButtonController mainMenuButtonController = new MainMenuButtonController(Options.mainMenu, settingsFrame, howToPlayFrame, gameModeFrame, gameFrame, rewardsFrame); - // Fenêtre du tutoriel - CloseWindowListener howToPlayWindowListener = new CloseWindowListener(mainMenu, howToPlayFrame); - TutorialController tutorialController = new TutorialController(mainMenu, howToPlayFrame); - howToPlayFrame.addWindowListener(howToPlayWindowListener); - howToPlayFrame.add(tutorialController.getTutorialPanel()); + // Fenêtre des paramètres + CloseWindowListener settingsWindowListener = new CloseWindowListener(Options.mainMenu, settingsFrame); + SettingsPanel settingsPanel = new SettingsPanel(Options.mainMenu, settingsFrame); + settingsFrame.addWindowListener(settingsWindowListener); + settingsFrame.add(settingsPanel); - // Fenêtre du choix des modes de jeu - CloseWindowListener gameModeWindowListener = new CloseWindowListener(mainMenu, gameModeFrame); - GameModeController gameModeController = new GameModeController(gameFrame,mainMenu); - GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController); - gameModeFrame.addWindowListener(gameModeWindowListener); - gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel); - gameModeFrame.add(gameModeSelectionPanel); + // Fenêtre du tutoriel + CloseWindowListener howToPlayWindowListener = new CloseWindowListener(Options.mainMenu, howToPlayFrame); + TutorialController tutorialController = new TutorialController(Options.mainMenu, howToPlayFrame); + howToPlayFrame.addWindowListener(howToPlayWindowListener); + howToPlayFrame.add(tutorialController.getTutorialPanel()); - // Fenêtre des récompenses - CloseWindowListener rewardsWindowListener = new CloseWindowListener(mainMenu, rewardsFrame); - rewardsFrame.addWindowListener(rewardsWindowListener); - RewardsPanel rewardsPanel = new RewardsPanel(); - rewardsFrame.setContentPane(rewardsPanel); - rewardsFrame.pack(); - - } + // Fenêtre du choix des modes de jeu + CloseWindowListener gameModeWindowListener = new CloseWindowListener(Options.mainMenu, gameModeFrame); + GameModeController gameModeController = new GameModeController(gameFrame, Options.mainMenu, gameModeFrame); + GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController); + gameModeFrame.addWindowListener(gameModeWindowListener); + gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel); + gameModeFrame.add(gameModeSelectionPanel); + + // Fenêtre des récompenses + CloseWindowListener rewardsWindowListener = new CloseWindowListener(Options.mainMenu, rewardsFrame); + rewardsFrame.addWindowListener(rewardsWindowListener); + RewardsPanel rewardsPanel = new RewardsPanel(); + rewardsFrame.setContentPane(rewardsPanel); + rewardsFrame.pack(); + + // Afficher à nouveau le menu principal + Options.mainMenu.setVisible(true); + } + + public static void main(String[] args) { + // Appel initial pour créer les fenêtres et démarrer le jeu + resetGame(); // Appel à la fonction de réinitialisation + } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/Options.java b/TestV2/src/fr/monkhanny/dorfromantik/Options.java index fc25213..c9c8fa0 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/Options.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/Options.java @@ -2,6 +2,7 @@ package fr.monkhanny.dorfromantik; import java.awt.Color; import java.awt.Dimension; +import fr.monkhanny.dorfromantik.gui.MainMenu; public class Options { @@ -54,11 +55,15 @@ public class Options { public static boolean AUTO_FOCUS = true; - public static final int MAX_TILE_NUMBER = 2; + public static final int MAX_TILE_NUMBER = 50; public static boolean FULL_SCREEN = false; public static final float SCORE_SIZE = 30f; public static long SEED = 0; + + public static MainMenu mainMenu; + + public static boolean isPlaying = false; } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java b/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java index aa4a86b..9b7d334 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/controller/GameModeController.java @@ -19,11 +19,14 @@ public class GameModeController implements ActionListener { private JFrame gameFrame; private MainMenu mainMenu; private Database database; + private JFrame gameModeFrame; + private static Board board; // Constructeur sans le panneau - public GameModeController(JFrame gameFrame, MainMenu mainMenu) { + public GameModeController(JFrame gameFrame, MainMenu mainMenu, JFrame gameModeFrame) { this.gameFrame = gameFrame; this.mainMenu = mainMenu; + this.gameModeFrame = gameModeFrame; // Connexion à la base de données try { @@ -86,18 +89,27 @@ public class GameModeController implements ActionListener { } private void startGame(String mode, long seed) { + // Supprimer la potentielle ancienne instance de board + GameModeController.board = null; + + // 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.setUndecorated(true); } else { Dimension mainMenuSize = this.mainMenu.getSize(); Point mainMenuLocation = this.mainMenu.getLocation(); gameFrame.setSize(mainMenuSize); - gameFrame.setLocation(mainMenuLocation); - gameFrame.setUndecorated(false); + gameFrame.setLocation(mainMenuLocation); } - Board board = new Board(this.gameFrame,seed); + GameModeController.board = new Board(this.gameFrame,seed); + //this.gameModeFrame.setVisible(false); this.gameFrame.setVisible(true); this.gameFrame.add(board); } + + public static Board getGameModeBoard() { + return board; + } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java b/TestV2/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java index 529369f..675d907 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/controller/MainMenuButtonController.java @@ -95,6 +95,7 @@ public class MainMenuButtonController implements ActionListener { private void openRecompense() { adjustFrameDisplay(this.rewardsFrame); + this.mainMenu.setVisible(false); this.rewardsFrame.setVisible(true); } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java index 0816607..ca2f38a 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/Board.java @@ -9,6 +9,7 @@ import fr.monkhanny.dorfromantik.Options; import fr.monkhanny.dorfromantik.enums.Biome; import fr.monkhanny.dorfromantik.enums.Fonts; import fr.monkhanny.dorfromantik.enums.TileOrientation; +import fr.monkhanny.dorfromantik.controller.GameModeController; import fr.monkhanny.dorfromantik.utils.Database; import java.util.ArrayList; @@ -91,26 +92,26 @@ public class Board extends JPanel{ } public void handleMouseMove(java.awt.event.MouseEvent e) { - // Récupérer les coordonnées du curseur - Point cursorPoint = e.getPoint(); + // Récupérer les coordonnées du curseur + Point cursorPoint = e.getPoint(); - // Ajuster la position de la souris en fonction du zoom et des offsets - int adjustedX = (int)((cursorPoint.x - offsetX) / zoomFactor); - int adjustedY = (int)((cursorPoint.y - offsetY) / zoomFactor); + // Ajuster la position de la souris en fonction du zoom et des offsets + int adjustedX = (int)((cursorPoint.x - offsetX) / zoomFactor); + int adjustedY = (int)((cursorPoint.y - offsetY) / zoomFactor); - // Vérifier si la souris est proche d'une des positions disponibles - for (Point position : availablePositions) { - if (new Point(adjustedX, adjustedY).distance(position) < 20) { - mousePosition = position; - repaint(); // Redessiner le plateau avec la tuile transparente - return; + // Vérifier si la souris est proche d'une des positions disponibles + for (Point position : availablePositions) { + if (new Point(adjustedX, adjustedY).distance(position) < 20) { + mousePosition = position; + repaint(); // Redessiner le plateau avec la tuile transparente + return; + } } - } - // Si la souris n'est pas proche d'une position valide, ne rien faire - mousePosition = null; - repaint(); // Redessiner sans la tuile transparente -} + // Si la souris n'est pas proche d'une position valide, ne rien faire + mousePosition = null; + repaint(); // Redessiner sans la tuile transparente + } private void initializeNextTile() { @@ -335,7 +336,7 @@ public class Board extends JPanel{ } catch (Exception e) { System.err.println("Erreur lors de la connexion à la base de données: " + e.getMessage()); } - GameOver gameOverPanel = new GameOver(gameFrame, currentScore, database); + GameOver gameOverPanel = new GameOver(gameFrame, currentScore, database,Options.mainMenu); gameFrame.getContentPane().removeAll(); // Supprime l'ancien contenu gameFrame.getContentPane().add(gameOverPanel); // Ajoute le GameOver gameFrame.revalidate(); // Revalidate pour mettre à jour la fenêtre @@ -344,7 +345,6 @@ public class Board extends JPanel{ } } - public void autoReFocus(Tile newlyPlacedTile) { if (Options.AUTO_FOCUS) { // Récupérer les coordonnées de la nouvelle tuile diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java b/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java index 4d76853..42bf226 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/GameOver.java @@ -1,6 +1,8 @@ package fr.monkhanny.dorfromantik.game; import fr.monkhanny.dorfromantik.utils.Database; +import fr.monkhanny.dorfromantik.gui.MainMenu; +import fr.monkhanny.dorfromantik.Main; import fr.monkhanny.dorfromantik.Options; import fr.monkhanny.dorfromantik.enums.Fonts; @@ -15,9 +17,11 @@ public class GameOver extends JPanel { private JFrame gameFrame; private int finalScore; private Database database; + private MainMenu mainMenu; - public GameOver(JFrame gameFrame, int finalScore, Database database) { + public GameOver(JFrame gameFrame, int finalScore, Database database, MainMenu mainMenu) { this.gameFrame = gameFrame; + this.mainMenu = mainMenu; this.finalScore = finalScore; this.database = database; @@ -213,10 +217,9 @@ public class GameOver extends JPanel { } // Fermer la fenêtre de jeu - gameFrame.setVisible(false); + Main.resetGame(); } }); - return inputPanel; } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/game/ScoreManager.java b/TestV2/src/fr/monkhanny/dorfromantik/game/ScoreManager.java index 0b0ba76..14785d2 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/game/ScoreManager.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/game/ScoreManager.java @@ -36,5 +36,9 @@ public class ScoreManager { calculateScore(); } - + // Réinitialiser le score + public void resetScore() { + currentScore = 0; + } + }