Ajouts d'un menu de pause

This commit is contained in:
2024-12-02 21:59:13 +01:00
parent 7f1128bc9a
commit f290336cc1
9 changed files with 196 additions and 0 deletions

View File

@@ -66,4 +66,6 @@ public class Options {
public static MainMenu mainMenu;
public static boolean isPlaying = false;
public static boolean isPaused = false;
}

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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
}
}
}
}

View File

@@ -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;
}
}

View File

@@ -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) {
}
}