Files
archived-L3-racing-game/src/visual/RankboardView.java

93 lines
2.5 KiB
Java

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;
}
@Override
public void end() {
}
}