mise à jour le Dashboard (accélérer, ralentir, état)

This commit is contained in:
Chahrazad650
2025-12-13 07:15:26 +01:00
parent 8f01299b30
commit c222ec3c8d
2 changed files with 96 additions and 71 deletions

View File

@@ -1,27 +1,42 @@
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Dashboard représente une vue graphique pour une voiture spécifique.
* <p>
*
* Il affiche :
* <ul>
* <li>Le carburant restant</li>
* <li>Le nombre de tours complétés</li>
* </ul>
* et fournit un bouton pour mettre en pause ou reprendre le jeu.
* </p>
* - le carburant restant
* - le nombre de tours complétés
* - l'état courant de la voiture
* - un message (info utilisateur)
*
* Il fournit :
* - un bouton Pause/Reprise du jeu
* - un bouton Accelerer
* - un bouton Rallentir
*/
public class Dashboard extends GameView
{
/** Label affichant le carburant et les tours */
private final JLabel label;
public class Dashboard extends GameView {
/** Bouton pause/reprise */
private final JButton button;
/** Label affichant carburant et nombre de tours */
private final JLabel infoLabel = new JLabel();
/** Label affichant l'état courant de la voiture */
private final JLabel stateLabel = new JLabel();
/** Label affichant les messages utilisateur */
private final JLabel messageLabel = new JLabel();
/** Bouton pause / reprise du jeu */
private final JButton pauseButton = new JButton();
/** Bouton pour accélérer la voiture */
private final JButton accelerateButton = new JButton("Accelerer");
/** Bouton pour ralentir la voiture */
private final JButton decelerateButton = new JButton("Rallentir");
/** Voiture associée à ce dashboard */
private final Car car;
@@ -29,75 +44,83 @@ public class Dashboard extends GameView
/**
* Construit un dashboard pour une voiture donnée.
*
* @param car la voiture suivie par ce dashboard
* @param title titre du dashboard
* @param width largeur de la fenêtre
* @param game moteur du jeu
* @param car voiture suivie par ce dashboard
* @param title titre du dashboard
* @param width largeur de la fenêtre
* @param height hauteur de la fenêtre
* @param x position horizontale de la fenêtre
* @param y position verticale de la fenêtre
* @param x position horizontale de la fenêtre
* @param y position verticale de la fenêtre
*/
public Dashboard(Game game, Car car, String title, int width, int height, int x, int y)
{
public Dashboard(Game game, Car car, String title, int width, int height, int x, int y) {
super(game, "Dashboard: " + title, width, height, x, y);
this.car = car;
this.label = new JLabel();
this.button = new JButton();
// Fond de la fenêtre = couleur de la voiture
frame.setBackground(car.getColor());
init();
// ----- Partie centrale : infos -----
JPanel centerPanel = new JPanel(new GridLayout(3, 1));
centerPanel.add(infoLabel);
centerPanel.add(stateLabel);
centerPanel.add(messageLabel);
this.add(label, BorderLayout.CENTER);
this.add(button, BorderLayout.SOUTH);
// ----- Partie boutons -----
JPanel buttonPanel = new JPanel(new GridLayout(1, 3));
buttonPanel.add(decelerateButton);
buttonPanel.add(pauseButton);
buttonPanel.add(accelerateButton);
setLayout(new BorderLayout());
add(centerPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
// listeners + texte initial
initListeners();
updatePauseButtonText();
}
/** Met à jour le texte du bouton Pause en fonction de l'état du jeu. */
private void updatePauseButtonText() {
pauseButton.setText(game.getPause() ? "En Pause" : "En Cours");
}
/** Initialise les listeners des 3 boutons. */
private void initListeners() {
// Pause / reprise
pauseButton.addActionListener(e -> {
game.togglePause();
updatePauseButtonText();
game.notifyObservers();
});
// Accélérer
accelerateButton.addActionListener(e -> {
String msg = car.accelerate();
messageLabel.setText(msg);
game.notifyObservers();
});
// Ralentir
decelerateButton.addActionListener(e -> {
String msg = car.decelerate();
messageLabel.setText(msg);
game.notifyObservers();
});
}
/**
* Met à jour le texte du bouton en fonction de l'état de pause.
*/
private void updateButtonText()
{
button.setText(game.getPause() ? "En Pause" : "En Cours");
}
/**
* Initialise le listener du bouton pour gérer la pause.
*
* @param fn fonction appelée lorsque l'on clique sur le bouton pour inverser l'état de pause
*/
private void init()
{
updateButtonText();
// classe anonyme pour le bouton
MouseAdapter ma = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e)
{
game.togglePause();
updateButtonText();
game.notifyObservers();
}
};
this.button.addMouseListener(ma);
}
/**
* Met à jour l'affichage du dashboard pour refléter
* le carburant et le nombre de tours de la voiture.
* Cette méthode est appelée périodiquement par le moteur de jeu.
* Mise à jour de la vue.
* Cette méthode est appelée par Game via notifyObservers().
*/
@Override
public boolean apply()
{
label.setText(
"<html><table><tr><td>Carburant Restant: " + car.getFuel()
+ "</td></tr><tr><td>Nombre de Tour: " + car.getRound()
+ "</td></tr></table></html>"
);
public boolean apply() {
updateButtonText();
infoLabel.setText("Carburant : " + car.getFuel() + " | Tours : " + car.getRound());
stateLabel.setText("Etat : " + car.getState());
updatePauseButtonText();
return true;
}
}
}

View File

@@ -1,3 +1,5 @@
import java.util.List;
public class Main {
public static void main(String[] args) throws InterruptedException {
Map map = Game.GameFactory.defaultMap();