Files
Tetris/app/src/main/java/org/Controllers/TetrisBandeauControleur.java
2025-05-22 11:07:37 +02:00

92 lines
3.3 KiB
Java

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