ajout d'un bouton d'aideà avec play/pause quand le menu aide est affiché

This commit is contained in:
ROGER
2025-05-20 14:34:08 +02:00
parent abd6ae07c8
commit ec3e46cbe8
6 changed files with 91 additions and 8 deletions

View File

@@ -4,24 +4,30 @@ import org.Models.Grille;
import org.Models.Musique; import org.Models.Musique;
import org.Views.VueBandeauControle; import org.Views.VueBandeauControle;
import javax.swing.*;
public class TetrisBandeauControleur { public class TetrisBandeauControleur {
private boolean partieEnPause = false; private boolean partieEnPause = false;
private boolean partieTerminee = false; private boolean partieTerminee = false;
private Musique musique; private Musique musique;
private VueBandeauControle vueControle; private VueBandeauControle vueControle;
private Grille grille; private Grille grille;
private JButton aideButton;
public TetrisBandeauControleur(VueBandeauControle vueControle, Musique musique, Grille grille) { public TetrisBandeauControleur(VueBandeauControle vueControle, Musique musique, Grille grille) {
this.vueControle = vueControle; this.vueControle = vueControle;
this.musique = musique; this.musique = musique;
this.grille = grille; this.grille = grille;
// action play/pause // action play/pause
//Listener pour le bouton play/pause
this.vueControle.getPauseButton().addActionListener(e -> switchPlayPause()); this.vueControle.getPauseButton().addActionListener(e -> switchPlayPause());
//Listener pour le bouton quitter
this.vueControle.getQuitterButton().addActionListener(e -> { this.vueControle.getQuitterButton().addActionListener(e -> {
System.out.println("Fermeture de l'application..."); System.out.println("Fermeture de l'application...");
System.exit(0); System.exit(0);
}); });
//Listener pour le bouton aide
this.vueControle.getAideButton().addActionListener(e -> afficherAide());
} }
public void switchPlayPause() { public void switchPlayPause() {
@@ -42,4 +48,21 @@ public class TetrisBandeauControleur {
System.out.println("Partie terminée"); System.out.println("Partie terminée");
} }
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();
}
}
} }

View File

@@ -350,8 +350,14 @@ public class Grille extends Observable { // TODO: ?? implements Runnable {
public int getScore(){ public int getScore(){
return score; return score;
} }
public void setScore(int score) {
this.score = score;
}
public int getNbLignesSupprimees() { public int getNbLignesSupprimees() {
return nbLignesSupprimees; return nbLignesSupprimees;
} }
public void setNbLignesSupprimees(int nbLignesSupprimees) {
this.nbLignesSupprimees = nbLignesSupprimees;
}
} }

View File

@@ -23,7 +23,6 @@ public class Jeu extends Observable implements Runnable {
private PieceCourante pieceSuivante; private PieceCourante pieceSuivante;
private int pieceSuivanteX; private int pieceSuivanteX;
private int pieceSuivanteY; private int pieceSuivanteY;
public boolean jeuEnCours = true; public boolean jeuEnCours = true;
public Jeu(Grille grille, Musique musique) { public Jeu(Grille grille, Musique musique) {
@@ -102,8 +101,9 @@ public class Jeu extends Observable implements Runnable {
public boolean estFinPartie() { public boolean estFinPartie() {
for (Point caseColoree : this.grille.motifPieceCouranteColoriee()) { for (Point caseColoree : this.grille.motifPieceCouranteColoriee()) {
if (this.grille.getCase(caseColoree.y, caseColoree.x)) { if (this.grille.getCase(caseColoree.y, caseColoree.x)) {
new VueGameOver(grille.getScore(),e -> System.exit(0),e->{ VueGameOver gameOver = new VueGameOver(grille.getScore(),e -> System.exit(0),()->{
System.out.println("Début d'une nouvelle partie"); System.out.println("\"rejouer\"clique");
reinitialiserPartie();
}); });
return true; return true;
} }
@@ -123,6 +123,33 @@ public class Jeu extends Observable implements Runnable {
notifyObservers(); notifyObservers();
} }
public void reinitialiserPartie(){
this.grille.initGrille();
this.grille.setPieceCourante(getNouvellePiece());
this.grille.setScore(0);
this.grille.setNbLignesSupprimees(0);
this.pieceSuivante= getNouvellePiece();
this.jeuEnCours = true;
this.ordonnanceur = new Ordonnanceur(this, 1000);
this.ordonnanceur.start();
setChanged();
notifyObservers();
}
public void pauseJeu(){
grille.setEnPause(true);
if (musique != null) {
musique.basculePlayPause();
}
}
public void reprendreJeu(){
grille.setEnPause(false);
if (musique != null) {
musique.basculePlayPause();
}
}
@Override @Override
public void run() { public void run() {
// TODO: game logic here // TODO: game logic here

View File

@@ -14,6 +14,7 @@ public class VueBandeauControle extends JPanel implements Observer {
private JLabel scoreLabel; private JLabel scoreLabel;
private JPanel nextPiecePanel; private JPanel nextPiecePanel;
private JButton pauseButton; private JButton pauseButton;
private JButton aideButton;
private JPanel[][] caseNextPiece = new JPanel[4][4]; private JPanel[][] caseNextPiece = new JPanel[4][4];
private JLabel nbLigneLabel; private JLabel nbLigneLabel;
private JButton quitterButton; private JButton quitterButton;
@@ -53,13 +54,29 @@ public class VueBandeauControle extends JPanel implements Observer {
quitterButton.setPreferredSize(buttonSize); quitterButton.setPreferredSize(buttonSize);
quitterButton.setMargin(margeBoutton); quitterButton.setMargin(margeBoutton);
JPanel boutonsPanel = new JPanel(); JPanel boutonsPanel = new JPanel();
boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0)); //boutonsPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 0));
boutonsPanel.setLayout(new BoxLayout(boutonsPanel, BoxLayout.X_AXIS));
boutonsPanel.setOpaque(false); boutonsPanel.setOpaque(false);
boutonsPanel.add(pauseButton); boutonsPanel.add(pauseButton);
boutonsPanel.add(Box.createRigidArea(new Dimension(10, 0)));
boutonsPanel.add(quitterButton); boutonsPanel.add(quitterButton);
pauseButton.setFocusable(false); pauseButton.setFocusable(false);
quitterButton.setFocusable(false); quitterButton.setFocusable(false);
// AIDE BUTTON
aideButton = new JButton("?");
aideButton.setToolTipText("AFFICHER L'AIDE");
aideButton.setPreferredSize(new Dimension(45, 20));
aideButton.setFocusable(false);
JPanel footerPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 10, 5));
footerPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 40));
footerPanel.setOpaque(false);
footerPanel.add(aideButton);
add(Box.createVerticalStrut(20)); add(Box.createVerticalStrut(20));
add(scoreLabel); add(scoreLabel);
add(Box.createVerticalStrut(20)); add(Box.createVerticalStrut(20));
@@ -68,6 +85,9 @@ public class VueBandeauControle extends JPanel implements Observer {
add(nextPiecePanel); add(nextPiecePanel);
add(Box.createVerticalStrut(20)); add(Box.createVerticalStrut(20));
add(boutonsPanel); add(boutonsPanel);
add(Box.createVerticalGlue()); //force le JPanel à prendre toute la hauteur
add(footerPanel);
// setVisible(true); // setVisible(true);
jeu.addObserver(this); jeu.addObserver(this);
@@ -129,6 +149,10 @@ public class VueBandeauControle extends JPanel implements Observer {
nextPiecePanel.repaint(); nextPiecePanel.repaint();
} }
public JButton getAideButton() {
return aideButton;
}
@Override @Override
public void update(Observable o, Object arg) { public void update(Observable o, Object arg) {
if (o instanceof Jeu) { if (o instanceof Jeu) {

View File

@@ -8,7 +8,7 @@ public class VueGameOver extends JFrame {
private JButton quitterButton; private JButton quitterButton;
private JButton rejouerButton; private JButton rejouerButton;
public VueGameOver(int score, ActionListener quitterListener, ActionListener rejouerListener) { public VueGameOver(int score, ActionListener quitterListener, Runnable rejouerListener) {
setTitle("FIN DE PARTIE"); setTitle("FIN DE PARTIE");
setSize(400,400); setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@@ -31,7 +31,10 @@ public class VueGameOver extends JFrame {
//mise en forme boutons //mise en forme boutons
quitterButton.addActionListener(quitterListener); quitterButton.addActionListener(quitterListener);
rejouerButton.addActionListener(rejouerListener); rejouerButton.addActionListener(e -> {
dispose();
rejouerListener.run();
});
buttonPanel.add(quitterButton); buttonPanel.add(quitterButton);
buttonPanel.add(rejouerButton); buttonPanel.add(rejouerButton);
panel.add(buttonPanel, BorderLayout.SOUTH); panel.add(buttonPanel, BorderLayout.SOUTH);