From f290336cc157914fb37ae211ea8a38cc600a05c0 Mon Sep 17 00:00:00 2001 From: Moncef STITI Date: Mon, 2 Dec 2024 21:59:13 +0100 Subject: [PATCH] Ajouts d'un menu de pause --- ressources/images/Icone/Pause.png | Bin 0 -> 7769 bytes src/fr/monkhanny/dorfromantik/Options.java | 2 + .../controller/GameModeController.java | 3 + src/fr/monkhanny/dorfromantik/game/Board.java | 3 + .../dorfromantik/game/EscapeMenu.java | 80 ++++++++++++++++++ .../game/MainMenuButtonListener.java | 31 +++++++ .../dorfromantik/game/PauseGame.java | 37 ++++++++ .../game/ResumeButtonListener.java | 22 +++++ .../game/SettingsButtonListener.java | 18 ++++ 9 files changed, 196 insertions(+) create mode 100644 ressources/images/Icone/Pause.png create mode 100644 src/fr/monkhanny/dorfromantik/game/EscapeMenu.java create mode 100644 src/fr/monkhanny/dorfromantik/game/MainMenuButtonListener.java create mode 100644 src/fr/monkhanny/dorfromantik/game/PauseGame.java create mode 100644 src/fr/monkhanny/dorfromantik/game/ResumeButtonListener.java create mode 100644 src/fr/monkhanny/dorfromantik/game/SettingsButtonListener.java diff --git a/ressources/images/Icone/Pause.png b/ressources/images/Icone/Pause.png new file mode 100644 index 0000000000000000000000000000000000000000..971d99d4eb044f874a6e26eba31a5148aea079a1 GIT binary patch literal 7769 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 literal 0 HcmV?d00001 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) { + + } +}