package org.Controllers; import org.Models.Grille; import org.Models.Jeu; import org.Models.Musique; import org.Views.VueBandeauControle; import javax.swing.*; /** * Contrôleur pour le bandeau de contrôle du jeu Tetris. * Gère les actions des boutons (pause, quitter, aide, relancer) et l'état de la partie. */ public class TetrisBandeauControleur { private boolean partieEnPause = false; private boolean partieTerminee = false; private Musique musique; private VueBandeauControle vueControle; private Grille grille; private Jeu jeu; /** * Crée un contrôleur pour le bandeau de contrôle. * * @param vueControle la vue du bandeau de contrôle * @param musique le gestionnaire de musique * @param grille la grille de jeu * @param jeu l'instance du jeu */ public TetrisBandeauControleur(VueBandeauControle vueControle, Musique musique, Grille grille, Jeu jeu) { this.vueControle = vueControle; this.musique = musique; this.grille = grille; this.jeu = jeu; // action play/pause // Listener pour le bouton play/pause this.vueControle.getPauseButton().addActionListener(e -> switchPlayPause()); // Listener pour le bouton quitter this.vueControle.getQuitterButton().addActionListener(e -> { System.out.println("Fermeture de l'application..."); System.exit(0); }); // Listener pour le bouton aide this.vueControle.getAideButton().addActionListener(e -> afficherAide()); // Listener pour le bouton recommencer this.vueControle.getRelancerButton().addActionListener(e -> { this.jeu.reinitialiserPartie(); vueControle.getPauseButton().setText("PAUSE"); partieEnPause = false; partieTerminee = false; }); } /** * Bascule l'état de la partie entre pause et reprise. * Met à jour la grille, la musique et le texte du bouton pause. */ public void switchPlayPause() { if (partieTerminee) { return; } partieEnPause = !partieEnPause; grille.setEnPause(partieEnPause); grille.setEnPause(partieEnPause); musique.basculePlayPause(); vueControle.getPauseButton().setText(partieEnPause ? "PLAY" : "PAUSE"); System.out.println(partieEnPause ? "Partie en pause" : "Partie en cours"); } /** * Affiche une page d'aide avec les commandes du jeu. * Met la partie en pause pendant l'affichage de l'aide. */ public void afficherAide() { String messageAide = "Utilisez les flèches du clavier pour déplacer la pièce courante :\n" + "Flèche gauche : Déplacer à gauche\n" + "Flèche droite : Déplacer à droite\n" + "Flèche bas : Accélérer la chute\n" + "R : Faire pivoter la pièce sens horaire\n" + "E : Faire pivoter la pièce sens anti horaire\n" + "Espace : Hard drop\n"; if (!grille.estEnPause()) { grille.setEnPause(true); musique.basculePlayPause(); JOptionPane.showMessageDialog(vueControle, messageAide, "Aide", JOptionPane.INFORMATION_MESSAGE); grille.setEnPause(false); musique.basculePlayPause(); } } }