From c222ec3c8d76f54dd8ca11ea370f415ee52b79a3 Mon Sep 17 00:00:00 2001
From: Chahrazad650
Date: Sat, 13 Dec 2025 07:15:26 +0100
Subject: [PATCH] =?UTF-8?q?mise=20=C3=A0=20jour=20le=20Dashboard=20(acc?=
=?UTF-8?q?=C3=A9l=C3=A9rer,=20ralentir,=20=C3=A9tat)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/Dashboard.java | 165 ++++++++++++++++++++++++++-------------------
src/Main.java | 2 +
2 files changed, 96 insertions(+), 71 deletions(-)
diff --git a/src/Dashboard.java b/src/Dashboard.java
index 8fdb112..bfd02ee 100644
--- a/src/Dashboard.java
+++ b/src/Dashboard.java
@@ -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.
- *
+ *
* Il affiche :
- *
- * - Le carburant restant
- * - Le nombre de tours complétés
- *
- * et fournit un bouton pour mettre en pause ou reprendre le jeu.
- *
+ * - 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(
- "| Carburant Restant: " + car.getFuel()
- + " |
| Nombre de Tour: " + car.getRound()
- + " |
"
- );
+ public boolean apply() {
- updateButtonText();
+ infoLabel.setText("Carburant : " + car.getFuel() + " | Tours : " + car.getRound());
+ stateLabel.setText("Etat : " + car.getState());
+
+ updatePauseButtonText();
return true;
}
-}
\ No newline at end of file
+}
diff --git a/src/Main.java b/src/Main.java
index a15303f..ac3aef4 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,3 +1,5 @@
+import java.util.List;
+
public class Main {
public static void main(String[] args) throws InterruptedException {
Map map = Game.GameFactory.defaultMap();