diff --git a/ressources/images/Icone/Pause.png b/ressources/images/Icone/Pause.png new file mode 100644 index 0000000..971d99d Binary files /dev/null and b/ressources/images/Icone/Pause.png differ diff --git a/src/fr/monkhanny/dorfromantik/Options.java b/src/fr/monkhanny/dorfromantik/Options.java index c2a39b5..0e21cfd 100644 --- a/src/fr/monkhanny/dorfromantik/Options.java +++ b/src/fr/monkhanny/dorfromantik/Options.java @@ -66,4 +66,6 @@ public class Options { public static MainMenu mainMenu; public static boolean isPlaying = false; + + public static boolean isPaused = false; } diff --git a/src/fr/monkhanny/dorfromantik/controller/GameModeController.java b/src/fr/monkhanny/dorfromantik/controller/GameModeController.java index 9b7d334..4b90000 100644 --- a/src/fr/monkhanny/dorfromantik/controller/GameModeController.java +++ b/src/fr/monkhanny/dorfromantik/controller/GameModeController.java @@ -92,6 +92,9 @@ public class GameModeController implements ActionListener { // 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); diff --git a/src/fr/monkhanny/dorfromantik/game/Board.java b/src/fr/monkhanny/dorfromantik/game/Board.java index 8007383..2a7537c 100644 --- a/src/fr/monkhanny/dorfromantik/game/Board.java +++ b/src/fr/monkhanny/dorfromantik/game/Board.java @@ -82,6 +82,9 @@ public class Board extends JPanel{ this.addMouseListener(new GameMouseClickListener(this)); + gameFrame.addKeyListener(new PauseGame(gameFrame, game)); + gameFrame.setFocusable(true); + this.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(java.awt.event.MouseEvent e) { diff --git a/src/fr/monkhanny/dorfromantik/game/EscapeMenu.java b/src/fr/monkhanny/dorfromantik/game/EscapeMenu.java new file mode 100644 index 0000000..79264bb --- /dev/null +++ b/src/fr/monkhanny/dorfromantik/game/EscapeMenu.java @@ -0,0 +1,80 @@ +package fr.monkhanny.dorfromantik.game; + +import fr.monkhanny.dorfromantik.components.Title; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionListener; + +public class EscapeMenu extends JFrame { + + private JButton resumeButton; + private JButton mainMenuButton; + private JButton settingsButton; + + public EscapeMenu(JFrame gameFrame, Game game) { + // Paramétrer la fenêtre de la pause + setTitle("Menu de Pause"); + setSize(550, 200); // Taille de la fenêtre + setLocationRelativeTo(gameFrame); // Centrer la fenêtre sur le jeu + setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); // Fermer sans quitter l'application + setLayout(new BorderLayout()); // Utiliser BorderLayout pour gérer les composants + + // Ajouter l'image de fond + JLabel background = new JLabel(new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg")); + background.setLayout(new BorderLayout()); + this.add(background); + + // Créer un panneau principal + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.setOpaque(false); // Garder le fond transparent + background.add(panel, BorderLayout.CENTER); // Ajouter le panneau dans le centre de l'image + + // Ajouter le message "Jeu en pause" centré en haut + Title pauseLabel = new Title("Jeu en pause", 34f); + panel.add(pauseLabel, BorderLayout.NORTH); // Placer le titre dans la partie nord du BorderLayout + + // Créer le panneau des boutons avec un FlowLayout horizontal + JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 10)); + buttonPanel.setOpaque(false); // Garder le fond transparent + + // Créer les boutons et ajouter les écouteurs d'événements + resumeButton = createButton("Reprendre"); + settingsButton = createButton("Paramètres"); + mainMenuButton = createButton("Menu Principal"); + + // Ajouter les boutons dans le panneau + buttonPanel.add(resumeButton); + buttonPanel.add(settingsButton); + buttonPanel.add(mainMenuButton); + + // Ajouter le panneau des boutons au panneau principal + panel.add(buttonPanel, BorderLayout.SOUTH); + + setVisible(true); // Afficher la fenêtre + } + + private JButton createButton(String text) { + JButton button = new JButton(text); + button.setFont(new Font("Tahoma", Font.PLAIN, 18)); + button.setBackground(new Color(0, 122, 255)); // Bleu lumineux pour les boutons + button.setForeground(Color.WHITE); + button.setFocusPainted(false); + button.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2)); // Bordure blanche + button.setPreferredSize(new Dimension(150, 50)); // Taille des boutons + return button; + } + + public void setResumeButtonListener(ActionListener listener) { + resumeButton.addActionListener(listener); + } + + public void setMainMenuButtonListener(ActionListener listener) { + mainMenuButton.addActionListener(listener); + } + + public void setSettingsButtonListener(ActionListener listener) { + settingsButton.addActionListener(listener); + } +} diff --git a/src/fr/monkhanny/dorfromantik/game/MainMenuButtonListener.java b/src/fr/monkhanny/dorfromantik/game/MainMenuButtonListener.java new file mode 100644 index 0000000..2b64a86 --- /dev/null +++ b/src/fr/monkhanny/dorfromantik/game/MainMenuButtonListener.java @@ -0,0 +1,31 @@ +package fr.monkhanny.dorfromantik.game; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; + +import fr.monkhanny.dorfromantik.Main; +import fr.monkhanny.dorfromantik.Options; + +public class MainMenuButtonListener implements ActionListener { + private JFrame gameFrame; + private Game game; + + public MainMenuButtonListener(JFrame gameFrame, Game game) { + this.gameFrame = gameFrame; + this.game = game; + } + + @Override + public void actionPerformed(ActionEvent e) { + // Réinitialiser le jeu + //Main.resetGame(); + + // ou + + // Fermer la fenêtre de jeu et revenir au menu principal + gameFrame.setVisible(false); + Options.mainMenu.setVisible(true); + Options.isPaused = false; + } +} diff --git a/src/fr/monkhanny/dorfromantik/game/PauseGame.java b/src/fr/monkhanny/dorfromantik/game/PauseGame.java new file mode 100644 index 0000000..7df42ef --- /dev/null +++ b/src/fr/monkhanny/dorfromantik/game/PauseGame.java @@ -0,0 +1,37 @@ +package fr.monkhanny.dorfromantik.game; + +import fr.monkhanny.dorfromantik.Options; + +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import javax.swing.JFrame; + +public class PauseGame extends KeyAdapter { + private JFrame gameFrame; + private Game game; + private EscapeMenu escapeMenu; + + public PauseGame(JFrame gameFrame, Game game) { + this.gameFrame = gameFrame; + this.game = game; + } + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + if (Options.isPaused == false) { + // Afficher le menu de pause seulement si aucun menu n'est déjà ouvert + Options.isPaused = true; + if (escapeMenu == null || !escapeMenu.isVisible()) { + escapeMenu = new EscapeMenu(gameFrame, game); + escapeMenu.setResumeButtonListener(new ResumeButtonListener(gameFrame)); + escapeMenu.setMainMenuButtonListener(new MainMenuButtonListener(gameFrame, game)); + escapeMenu.setSettingsButtonListener(new SettingsButtonListener(gameFrame)); + } else { + escapeMenu.setVisible(true); // Si la fenêtre est déjà ouverte, la rendre visible + } + escapeMenu.toFront(); // Mettre la fenêtre au premier plan + } + } + } +} diff --git a/src/fr/monkhanny/dorfromantik/game/ResumeButtonListener.java b/src/fr/monkhanny/dorfromantik/game/ResumeButtonListener.java new file mode 100644 index 0000000..5e2106a --- /dev/null +++ b/src/fr/monkhanny/dorfromantik/game/ResumeButtonListener.java @@ -0,0 +1,22 @@ +package fr.monkhanny.dorfromantik.game; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; + +import fr.monkhanny.dorfromantik.Options; + +public class ResumeButtonListener implements ActionListener { + private JFrame gameFrame; + + public ResumeButtonListener(JFrame gameFrame) { + this.gameFrame = gameFrame; + } + + @Override + public void actionPerformed(ActionEvent e) { + // Fermer le menu de pause et afficher le jeu + gameFrame.setVisible(true); + Options.isPaused = false; + } +} diff --git a/src/fr/monkhanny/dorfromantik/game/SettingsButtonListener.java b/src/fr/monkhanny/dorfromantik/game/SettingsButtonListener.java new file mode 100644 index 0000000..f3ec70a --- /dev/null +++ b/src/fr/monkhanny/dorfromantik/game/SettingsButtonListener.java @@ -0,0 +1,18 @@ +package fr.monkhanny.dorfromantik.game; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; + +public class SettingsButtonListener implements ActionListener { + private JFrame gameFrame; + + public SettingsButtonListener(JFrame gameFrame) { + this.gameFrame = gameFrame; + } + + @Override + public void actionPerformed(ActionEvent e) { + + } +}