mirror of
https://github.com/guezoloic/L3-racing-game.git
synced 2026-03-28 19:13:41 +00:00
mise à jour le Dashboard (accélérer, ralentir, état)
This commit is contained in:
@@ -1,27 +1,42 @@
|
|||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.GridLayout;
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dashboard représente une vue graphique pour une voiture spécifique.
|
* Dashboard représente une vue graphique pour une voiture spécifique.
|
||||||
* <p>
|
*
|
||||||
* Il affiche :
|
* Il affiche :
|
||||||
* <ul>
|
* - le carburant restant
|
||||||
* <li>Le carburant restant</li>
|
* - le nombre de tours complétés
|
||||||
* <li>Le nombre de tours complétés</li>
|
* - l'état courant de la voiture
|
||||||
* </ul>
|
* - un message (info utilisateur)
|
||||||
* et fournit un bouton pour mettre en pause ou reprendre le jeu.
|
*
|
||||||
* </p>
|
* Il fournit :
|
||||||
|
* - un bouton Pause/Reprise du jeu
|
||||||
|
* - un bouton Accelerer
|
||||||
|
* - un bouton Rallentir
|
||||||
*/
|
*/
|
||||||
public class Dashboard extends GameView
|
public class Dashboard extends GameView {
|
||||||
{
|
|
||||||
/** Label affichant le carburant et les tours */
|
|
||||||
private final JLabel label;
|
|
||||||
|
|
||||||
/** Bouton pause/reprise */
|
/** Label affichant carburant et nombre de tours */
|
||||||
private final JButton button;
|
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 */
|
/** Voiture associée à ce dashboard */
|
||||||
private final Car car;
|
private final Car car;
|
||||||
@@ -29,75 +44,83 @@ public class Dashboard extends GameView
|
|||||||
/**
|
/**
|
||||||
* Construit un dashboard pour une voiture donnée.
|
* Construit un dashboard pour une voiture donnée.
|
||||||
*
|
*
|
||||||
* @param car la voiture suivie par ce dashboard
|
* @param game moteur du jeu
|
||||||
* @param title titre du dashboard
|
* @param car voiture suivie par ce dashboard
|
||||||
* @param width largeur de la fenêtre
|
* @param title titre du dashboard
|
||||||
|
* @param width largeur de la fenêtre
|
||||||
* @param height hauteur de la fenêtre
|
* @param height hauteur de la fenêtre
|
||||||
* @param x position horizontale de la fenêtre
|
* @param x position horizontale de la fenêtre
|
||||||
* @param y position verticale 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);
|
super(game, "Dashboard: " + title, width, height, x, y);
|
||||||
|
|
||||||
this.car = car;
|
this.car = car;
|
||||||
this.label = new JLabel();
|
|
||||||
this.button = new JButton();
|
|
||||||
|
|
||||||
|
// Fond de la fenêtre = couleur de la voiture
|
||||||
frame.setBackground(car.getColor());
|
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);
|
// ----- Partie boutons -----
|
||||||
this.add(button, BorderLayout.SOUTH);
|
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.
|
* Mise à jour de la vue.
|
||||||
*/
|
* Cette méthode est appelée par Game via notifyObservers().
|
||||||
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.
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean apply()
|
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>"
|
|
||||||
);
|
|
||||||
|
|
||||||
updateButtonText();
|
infoLabel.setText("Carburant : " + car.getFuel() + " | Tours : " + car.getRound());
|
||||||
|
stateLabel.setText("Etat : " + car.getState());
|
||||||
|
|
||||||
|
updatePauseButtonText();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
public static void main(String[] args) throws InterruptedException {
|
public static void main(String[] args) throws InterruptedException {
|
||||||
Map map = Game.GameFactory.defaultMap();
|
Map map = Game.GameFactory.defaultMap();
|
||||||
|
|||||||
Reference in New Issue
Block a user