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 : - *

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