diff --git a/TestV2/ressources/images/Icone/ExitIcon.png b/TestV2/ressources/images/Icone/ExitIcon.png new file mode 100644 index 0000000..693b92a Binary files /dev/null and b/TestV2/ressources/images/Icone/ExitIcon.png differ diff --git a/TestV2/ressources/images/Icone/ExitIcon2.png b/TestV2/ressources/images/Icone/ExitIcon2.png new file mode 100644 index 0000000..40aeff1 Binary files /dev/null and b/TestV2/ressources/images/Icone/ExitIcon2.png differ diff --git a/TestV2/src/fr/monkhanny/dorfromantik/Main.java b/TestV2/src/fr/monkhanny/dorfromantik/Main.java index b60f67c..4ecb435 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/Main.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/Main.java @@ -27,6 +27,9 @@ public class Main { * @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"); @@ -41,7 +44,7 @@ public class Main { MusicPlayer.playMusic(); MainMenu mainMenu = new MainMenu(); MainMenuResizeController MainMenuResizeController = new MainMenuResizeController(mainMenu); - MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameFrame); + MainMenuButtonController MainMenuButtonController = new MainMenuButtonController(mainMenu,settingsFrame,howToPlayFrame,gameModeFrame); // Fenêtre des paramètres @@ -52,14 +55,16 @@ public class Main { // Fenêtre du tutoriel CloseWindowListener howToPlayWindowListener = new CloseWindowListener(mainMenu, howToPlayFrame); - TutorialController tutorialController = new TutorialController(); + TutorialController tutorialController = new TutorialController(mainMenu, howToPlayFrame); howToPlayFrame.addWindowListener(howToPlayWindowListener); howToPlayFrame.add(tutorialController.getTutorialPanel()); // Fenêtre du choix des modes de jeu + CloseWindowListener gameModeWindowListener = new CloseWindowListener(mainMenu, gameModeFrame); GameModeController gameModeController = new GameModeController(); GameModeSelectionPanel gameModeSelectionPanel = new GameModeSelectionPanel(gameModeController); + gameModeFrame.addWindowListener(gameModeWindowListener); gameModeController.setGameModeSelectionPanel(gameModeSelectionPanel); - gameFrame.add(gameModeSelectionPanel); + gameModeFrame.add(gameModeSelectionPanel); } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java b/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java index 5cdfd79..0ae71e2 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/controller/TutorialController.java @@ -3,6 +3,7 @@ package fr.monkhanny.dorfromantik.controller; import fr.monkhanny.dorfromantik.gui.TutorialPanel; import fr.monkhanny.dorfromantik.gui.Step; import fr.monkhanny.dorfromantik.enums.Images; +import fr.monkhanny.dorfromantik.gui.MainMenu; import javax.swing.*; import java.util.ArrayList; @@ -11,14 +12,20 @@ import java.util.List; public class TutorialController { private TutorialPanel tutorialPanel; - public TutorialController() { + private MainMenu mainMenu; + private JFrame tutorialFrame; + + public TutorialController(MainMenu mainMenu, JFrame tutorialFrame) { + this.mainMenu = mainMenu; + this.tutorialFrame = tutorialFrame; + List steps = new ArrayList<>(); steps.add(new Step("Étape n°1", "Explication de la première étape ici.", Images.TUTORIAL_GIF1.getImagePath())); steps.add(new Step("Étape n°2", "Explication de la deuxième étape ici.", Images.TUTORIAL_GIF2.getImagePath())); steps.add(new Step("Étape n°3", "Explication de la troisième étape ici.", Images.TUTORIAL_GIF3.getImagePath())); steps.add(new Step("Étape n°4", "Explication de la quatrième étape ici.", Images.TUTORIAL_GIF4.getImagePath())); - tutorialPanel = new TutorialPanel(steps); + tutorialPanel = new TutorialPanel(steps, mainMenu, tutorialFrame); } public JPanel getTutorialPanel() { diff --git a/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java b/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java index 3b78b06..c138182 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/gui/SettingsPanel.java @@ -4,6 +4,7 @@ import fr.monkhanny.dorfromantik.Options; import fr.monkhanny.dorfromantik.components.Title; import fr.monkhanny.dorfromantik.listeners.*; import fr.monkhanny.dorfromantik.utils.MusicPlayer; +import fr.monkhanny.dorfromantik.enums.Images; import javax.swing.*; import java.awt.*; @@ -18,9 +19,11 @@ public class SettingsPanel extends JPanel { this.mainMenu = mainMenu; this.settingsFrame = settingsFrame; + setLayout(new BorderLayout()); initializeSettingsFrame(); setupBackground(); - setupMainPanel(); + setupTopPanel(); // Nouveau panneau pour le titre et le bouton de retour + setupMainPanel(); // Configuration du panneau principal pour les sliders et boutons } private void initializeSettingsFrame() { @@ -30,56 +33,47 @@ public class SettingsPanel extends JPanel { private void setupBackground() { JLabel background = new JLabel(new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg")); background.setLayout(new GridBagLayout()); - this.setLayout(new BorderLayout()); - this.add(background); + this.add(background, BorderLayout.CENTER); // Déplacer l'ajout du fond au centre + } + + private void setupTopPanel() { + JPanel topPanel = new JPanel(new BorderLayout()); + topPanel.setOpaque(false); + + Title title = new Title("Paramètres", 70, Color.WHITE); + title.setHorizontalAlignment(JLabel.CENTER); + topPanel.add(title, BorderLayout.CENTER); + + JButton returnButton = createReturnButtonWithIcon(); + JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + leftPanel.setOpaque(false); + leftPanel.add(returnButton); + topPanel.add(leftPanel, BorderLayout.WEST); + + this.add(topPanel, BorderLayout.NORTH); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + ImageIcon backgroundImage = new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg"); + g.drawImage(backgroundImage.getImage(), 0, 0, getWidth(), getHeight(), this); } private void setupMainPanel() { - JPanel mainPanel = createMainPanel(); - JLabel title = createTitle(); - - mainPanel.add(title, createGridBagConstraints(0, 0, 2)); - mainPanel.add(Box.createVerticalStrut(30), createGridBagConstraints(0, 1, 1)); - - // Musique Panel - JSlider musicSlider = new JSlider(0, 100, Options.MUSIC_MUTED ? 0 : Options.MUSIC_VOLUME); - JPanel musicPanel = createSoundPanel("Musique", musicSlider, new MusicVolumeChangeListener(musicSlider), new MuteCheckBoxListener("Musique")); - mainPanel.add(musicPanel, createGridBagConstraints(0, 2, 1)); - - mainPanel.add(Box.createVerticalStrut(30), createGridBagConstraints(0, 3, 1)); - - // SFX Panel - JSlider sfxSlider = new JSlider(0, 100, Options.SOUNDS_MUTED ? 0 : Options.SOUNDS_VOLUME); - JPanel sfxPanel = createSoundPanel("SFX", sfxSlider, new SoundsVolumeChangeListener(sfxSlider), new MuteCheckBoxListener("SFX")); - mainPanel.add(sfxPanel, createGridBagConstraints(0, 4, 1)); - - // Close Button - JButton closeButton = createCloseButton(); - mainPanel.add(closeButton, createGridBagConstraints(0, 5, 1)); - - // Add to background - ((JLabel) this.getComponent(0)).add(mainPanel); - } - - private JPanel createMainPanel() { JPanel mainPanel = new JPanel(new GridBagLayout()); mainPanel.setOpaque(false); - return mainPanel; - } - private Title createTitle() { - Title title = new Title("Paramètres", 70, Color.WHITE); - return title; - } + JSlider musicSlider = new JSlider(0, 100, Options.MUSIC_MUTED ? 0 : Options.MUSIC_VOLUME); + JPanel musicPanel = createSoundPanel("Musique", musicSlider, new MusicVolumeChangeListener(musicSlider), new MuteCheckBoxListener("Musique")); + mainPanel.add(musicPanel, createGridBagConstraints(0, 0, 1)); - private GridBagConstraints createGridBagConstraints(int x, int y, int gridWidth) { - GridBagConstraints gbc = new GridBagConstraints(); - gbc.gridx = x; - gbc.gridy = y; - gbc.gridwidth = gridWidth; - gbc.fill = GridBagConstraints.HORIZONTAL; - gbc.insets = new Insets(20, 30, 20, 30); - return gbc; + JSlider sfxSlider = new JSlider(0, 100, Options.SOUNDS_MUTED ? 0 : Options.SOUNDS_VOLUME); + JPanel sfxPanel = createSoundPanel("SFX", sfxSlider, new SoundsVolumeChangeListener(sfxSlider), new MuteCheckBoxListener("SFX")); + mainPanel.add(sfxPanel, createGridBagConstraints(0, 1, 1)); + + mainPanel.add(Box.createVerticalStrut(30), createGridBagConstraints(0, 2, 1)); + this.add(mainPanel, BorderLayout.CENTER); } private JPanel createSoundPanel(String labelText, JSlider volumeSlider, ChangeListener sliderChangeListener, MuteCheckBoxListener muteCheckBoxListener) { @@ -128,15 +122,31 @@ public class SettingsPanel extends JPanel { return sliderPanel; } - private JButton createCloseButton() { - JButton closeButton = new JButton("Retour"); - closeButton.setFont(new Font("Roboto", Font.BOLD, 24)); - closeButton.setForeground(Color.BLACK); - closeButton.setBackground(Color.WHITE); - closeButton.setOpaque(true); - closeButton.setPreferredSize(new Dimension(75, 50)); - closeButton.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); - closeButton.addActionListener(new CloseButtonListener(mainMenu, settingsFrame)); - return closeButton; + private GridBagConstraints createGridBagConstraints(int x, int y, int gridWidth) { + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = x; + gbc.gridy = y; + gbc.gridwidth = gridWidth; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.insets = new Insets(20, 30, 20, 30); + return gbc; + } + + + private JButton createReturnButtonWithIcon() { + ImageIcon originalIcon = new ImageIcon(Images.EXIT_ICON.getImagePath()); + + // Redimensionner l'image à la taille du bouton + Image scaledImage = originalIcon.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaledImage); + + JButton returnButton = new JButton(resizedIcon); + returnButton.setPreferredSize(new Dimension(50, 50)); // Ajuster la taille du bouton selon l'icône + returnButton.setContentAreaFilled(false); // Bouton transparent + returnButton.setBorderPainted(false); // Pas de bordure + returnButton.setFocusPainted(false); // Pas de focus + returnButton.addActionListener(new CloseButtonListener(mainMenu, settingsFrame)); + + return returnButton; } } diff --git a/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java b/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java index c1214e9..66b2eb1 100644 --- a/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java +++ b/TestV2/src/fr/monkhanny/dorfromantik/gui/TutorialPanel.java @@ -2,6 +2,9 @@ package fr.monkhanny.dorfromantik.gui; import fr.monkhanny.dorfromantik.components.Title; import fr.monkhanny.dorfromantik.gui.Step; +import fr.monkhanny.dorfromantik.listeners.CloseButtonListener; +import fr.monkhanny.dorfromantik.gui.MainMenu; +import fr.monkhanny.dorfromantik.enums.Images; import javax.swing.*; import java.awt.*; @@ -11,16 +14,19 @@ public class TutorialPanel extends JPanel { private List steps; private int currentStepIndex; - private Title title; private JLabel stepText; private JLabel stepImage; private JButton nextButton; private JButton prevButton; + private MainMenu mainMenu; + private JFrame tutorialFrame; - public TutorialPanel(List steps) { + public TutorialPanel(List steps, MainMenu mainMenu, JFrame tutorialFrame) { this.steps = steps; this.currentStepIndex = 0; + this.mainMenu = mainMenu; + this.tutorialFrame = tutorialFrame; // Utiliser BorderLayout pour la disposition principale setLayout(new BorderLayout()); @@ -29,12 +35,25 @@ public class TutorialPanel extends JPanel { title = new Title("Comment jouer ?", 70f, Color.WHITE); title.setHorizontalAlignment(JLabel.CENTER); title.setOpaque(false); - add(title, BorderLayout.NORTH); + + // Panneau contenant le titre et le bouton de retour + JPanel northPanel = new JPanel(new BorderLayout()); + northPanel.setOpaque(false); + northPanel.add(title, BorderLayout.CENTER); + + // Ajouter l'icône de retour à droite du panneau nord + JButton returnButton = createReturnButtonWithIcon(); + JPanel topRightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + topRightPanel.setOpaque(false); + topRightPanel.add(returnButton); + northPanel.add(topRightPanel, BorderLayout.WEST); + + add(northPanel, BorderLayout.NORTH); // Conteneur principal pour les étapes, centré JPanel centerPanel = new JPanel(); centerPanel.setLayout(new GridBagLayout()); - centerPanel.setOpaque(false); // Rendre le conteneur transparent + centerPanel.setOpaque(false); // Rendre le conteneur transparent // Utiliser GridBagConstraints pour centrer le contenu verticalement GridBagConstraints gbc = new GridBagConstraints(); @@ -46,19 +65,19 @@ public class TutorialPanel extends JPanel { // Conteneur pour le texte et l'image JPanel stepContainer = new JPanel(); stepContainer.setLayout(new BoxLayout(stepContainer, BoxLayout.Y_AXIS)); - stepContainer.setOpaque(false); // Transparent + stepContainer.setOpaque(false); // Transparent stepText = new JLabel(); stepText.setFont(new Font("Arial", Font.BOLD, 28)); stepText.setForeground(Color.WHITE); - stepText.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer le texte horizontalement + stepText.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer le texte horizontalement stepImage = new JLabel(); - stepImage.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer l'image horizontalement + stepImage.setAlignmentX(Component.CENTER_ALIGNMENT); // Centrer l'image horizontalement // Ajouter les composants au conteneur d'étapes stepContainer.add(stepText); - stepContainer.add(Box.createVerticalStrut(10)); // Espace entre texte et image + stepContainer.add(Box.createVerticalStrut(10)); // Espace entre texte et image stepContainer.add(stepImage); // Ajouter le conteneur d'étapes au centre du panel @@ -67,13 +86,19 @@ public class TutorialPanel extends JPanel { // Panneau pour les boutons de navigation JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); // Centrer les boutons - buttonPanel.setOpaque(false); // Transparent + buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); // Centrer les boutons + buttonPanel.setOpaque(false); // Transparent prevButton = new JButton("Précédent"); nextButton = new JButton("Suivant"); + + // Personnalisation des boutons + styleButton(prevButton); + styleButton(nextButton); + prevButton.addActionListener(e -> showPreviousStep()); nextButton.addActionListener(e -> showNextStep()); + buttonPanel.add(prevButton); buttonPanel.add(nextButton); @@ -86,12 +111,12 @@ public class TutorialPanel extends JPanel { @Override protected void paintComponent(Graphics g) { - super.paintComponent(g); // Appel à super pour s'assurer que le panneau est dessiné + super.paintComponent(g); // Appel à super pour s'assurer que le panneau est dessiné // Dessin de l'image de fond pour couvrir tout le panneau ImageIcon backgroundImage = new ImageIcon("./ressources/images/MainMenu/backgroundBlured.jpg"); Image image = backgroundImage.getImage(); - g.drawImage(image, 0, 0, getWidth(), getHeight(), this); // Dessiner l'image pour couvrir tout le panneau + g.drawImage(image, 0, 0, getWidth(), getHeight(), this); // Dessiner l'image pour couvrir tout le panneau } private void updateStepDisplay() { @@ -104,6 +129,32 @@ public class TutorialPanel extends JPanel { nextButton.setEnabled(currentStepIndex < steps.size() - 1); } + private void styleButton(JButton button) { + // Police et taille + button.setFont(new Font("Arial", Font.BOLD, 18)); + button.setForeground(Color.WHITE); + + // Taille et forme des boutons + button.setPreferredSize(new Dimension(150, 50)); // Ajuster la taille des boutons + button.setBackground(new Color(34, 34, 34)); // Couleur de fond sombre + button.setBorder(BorderFactory.createLineBorder(Color.WHITE, 2)); // Bordure blanche + + // Effet au survol + button.setRolloverEnabled(true); + button.setContentAreaFilled(true); + button.setFocusPainted(false); // Pas de focus visible + + // Ajout de l'effet de survol + button.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseEntered(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(60, 60, 60)); // Couleur plus claire au survol + } + public void mouseExited(java.awt.event.MouseEvent evt) { + button.setBackground(new Color(34, 34, 34)); // Retour à la couleur originale + } + }); + } + private void showPreviousStep() { if (currentStepIndex > 0) { currentStepIndex--; @@ -117,4 +168,21 @@ public class TutorialPanel extends JPanel { updateStepDisplay(); } } + + private JButton createReturnButtonWithIcon() { + ImageIcon originalIcon = new ImageIcon(Images.EXIT_ICON.getImagePath()); + + // Redimensionnement de l'image à la taille du bouton + Image scaledImage = originalIcon.getImage().getScaledInstance(50, 50, Image.SCALE_SMOOTH); + ImageIcon resizedIcon = new ImageIcon(scaledImage); + + JButton returnButton = new JButton(resizedIcon); + returnButton.setPreferredSize(new Dimension(50, 50)); // Ajuste la taille du bouton selon l'icône + returnButton.setContentAreaFilled(false); // Bouton transparent + returnButton.setBorderPainted(false); // Pas de bordure + returnButton.setFocusPainted(false); // Pas de focus + returnButton.addActionListener(new CloseButtonListener(mainMenu, tutorialFrame)); + + return returnButton; + } }