mirror of
https://github.com/guezoloic/L3-racing-game.git
synced 2026-03-31 12:21:34 +00:00
feat: ajout Menu selection
This commit is contained in:
87
src/visual/RankboardView.java
Normal file
87
src/visual/RankboardView.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package visual;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import model.Game;
|
||||
import model.car.Car;
|
||||
|
||||
/**
|
||||
* Rankboard est une vue graphique affichant le classement des voitures.
|
||||
* <p>
|
||||
* Elle hérite de GameView et met à jour dynamiquement le score de chaque
|
||||
* voiture.
|
||||
* Les scores sont triés du plus grand au plus petit.
|
||||
* </p>
|
||||
*/
|
||||
public class RankboardView extends GameView {
|
||||
/** Liste des voitures à afficher */
|
||||
List<Car> cars;
|
||||
|
||||
/** Composant JLabel pour afficher le classement */
|
||||
private JLabel label;
|
||||
|
||||
@Override
|
||||
protected void init(Game game) {
|
||||
super.init(game);
|
||||
this.cars = game.getCars();
|
||||
this.label = new JLabel();
|
||||
this.add(label, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Construit un Rankboard.
|
||||
*
|
||||
* @param title Titre de la fenêtre
|
||||
* @param cars Liste des voitures à suivre
|
||||
* @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
|
||||
*/
|
||||
public RankboardView(Game game, String title, int width, int height, int x, int y) {
|
||||
super(game, title, width, height, x, y);
|
||||
if (game != null)
|
||||
init(game);
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour le texte affiché dans le JLabel.
|
||||
* <p>
|
||||
* Trie les voitures par score décroissant et construit
|
||||
* un tableau HTML pour l'affichage.
|
||||
* </p>
|
||||
*/
|
||||
private void updateRankText() {
|
||||
if (cars == null) return;
|
||||
// cloner pour de modifier la classe principale
|
||||
List<Car> cars_clone = new ArrayList<>(cars);
|
||||
cars_clone.sort(Comparator.comparingInt(Car::getScore).reversed());
|
||||
|
||||
StringBuilder s = new StringBuilder();
|
||||
s.append("<html><table>");
|
||||
for (Car c : cars_clone) {
|
||||
s.append("<tr><td>" + c.getName() + ": " + c.getScore() + "%</td></tr>");
|
||||
}
|
||||
s.append("</table></html>");
|
||||
label.setText(s.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
/**
|
||||
* Méthode appelée par GameView.update().
|
||||
* Elle met à jour le classement affiché.
|
||||
*/
|
||||
public boolean apply() {
|
||||
if (!super.apply()) {
|
||||
System.out.println("ERREUR Rankboard: game est null");
|
||||
return false;
|
||||
}
|
||||
updateRankText();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user