fix(Game.java): deplacer addVisual dans le Builder

This commit is contained in:
2025-11-10 21:38:52 +01:00
parent 7415af4b72
commit 9570ed96fd
2 changed files with 74 additions and 45 deletions

View File

@@ -15,19 +15,30 @@ public class Game
* {@link CarInfo} est une structure simple qui contient les informations * {@link CarInfo} est une structure simple qui contient les informations
* nécessaires pour créer une voiture dans le jeu : son nom et sa couleur. * nécessaires pour créer une voiture dans le jeu : son nom et sa couleur.
*/ */
public static class CarInfo public record CarInfo(String name, Color color) {}
{
/** Nom de la voiture */ /**
public final String name; * {@link VisualInfo} est un enregistrement (record) qui décrit une vue graphique
/** Couleur de la voiture */ * à afficher dans le jeu (par exemple un tableau de bord, une piste ou un classement).
public final Color color; * <p>
* Chaque instance contient toutes les informations nécessaires pour créer et positionner
public CarInfo(String name, Color color, boolean visual) * cette vue à lécran.
{ * </p>
this.name = name; *
this.color = color; * @param type le type concret de la vue (classe héritant de {@link GameView})
} * @param title le titre de la fenêtre ou du panneau associé
} * @param width la largeur en pixels de la vue
* @param height la hauteur en pixels de la vue
* @param x la position horizontale (en pixels) de la vue sur lécran
* @param y la position verticale (en pixels) de la vue sur lécran
*/
public record VisualInfo
(
Class<? extends GameView> type,
String title,
int width, int height,
int x, int y
) {}
/** /**
* Builder pour créer une instance de {@link Game} de façon fluide. * Builder pour créer une instance de {@link Game} de façon fluide.
@@ -40,6 +51,8 @@ public class Game
{ {
/** Liste des voitures à créer pour le jeu */ /** Liste des voitures à créer pour le jeu */
private ArrayList<CarInfo> cars = new ArrayList<>(); private ArrayList<CarInfo> cars = new ArrayList<>();
/** Liste des voitures à créer pour le jeu */
private ArrayList<VisualInfo> visuals = new ArrayList<>();
/** État initial du jeu */ /** État initial du jeu */
private State state = new State(); private State state = new State();
/** Temps entre chaque step du jeu */ /** Temps entre chaque step du jeu */
@@ -82,6 +95,39 @@ public class Game
return this; return this;
} }
public Builder addVisual(Class<? extends GameView> type, String title, int width, int height, int x, int y)
{
visuals.add(new VisualInfo(type, title, width, height, x, y));
return this;
}
private void buildVisual(Game game)
{
for (VisualInfo v : visuals)
{
if (v.type == Rankboard.class)
game.addObserver(new Rankboard(game, v.title, v.width, v.height, v.x, v.y));
else if (v.type == Track.class)
game.addObserver(new Track(game, v.title, v.width, v.height, v.x, v.y));
else if (v.type == Dashboard.class)
{
for (CarInfo info : cars)
{
if (info.name.equals(v.title))
{
Car car = game.getCars().stream()
.filter(c -> c.getName().equals(info.name))
.findFirst()
.orElse(null);
if (car != null)
game.addObserver(new Dashboard(game, car, v.title, v.width, v.height, v.x, v.y));
break;
}
}
}
}
}
/** /**
* Construit l'instance de {@link Game} avec les paramètres définis. * Construit l'instance de {@link Game} avec les paramètres définis.
* <p> * <p>
@@ -95,7 +141,10 @@ public class Game
System.err.println("Vous devez définir une carte avant de construire le jeu !"); System.err.println("Vous devez définir une carte avant de construire le jeu !");
System.exit(1); System.exit(1);
} }
return new Game(map, cars, state, time);
Game game = new Game(map, cars, state, time);
buildVisual(game);
return game;
} }
} }
@@ -294,24 +343,4 @@ public class Game
{ {
return isPaused; return isPaused;
} }
}
/** Carte sur laquelle le jeu se déroule */
public Game addVisual(Class<? extends GameView> c, String title, int width, int height, int x, int y)
{
if (c == Rankboard.class)
obs.add(new Rankboard(this, title, width, height, x, y));
else if (c == Track.class)
obs.add(new Track(this, title, width, height, x, y));
else if (c == Dashboard.class)
{
for (Car car : cars)
if (car.getName().equals(title))
{
obs.add(new Dashboard(this, car, title, width, height, x, y));
break;
}
}
return this;
}
}

View File

@@ -20,18 +20,18 @@ public class Main {
Map m = Map.fromInts(map); Map m = Map.fromInts(map);
Game game = new Game.Builder() Game game = new Game.Builder()
.addCar(new Game.CarInfo("Voiture 1", Color.BLUE, true)) .addCar(new Game.CarInfo("Voiture à LUWIK", Color.BLUE))
.addCar(new Game.CarInfo("Voiture 2", Color.PINK, true)) .addCar(new Game.CarInfo("Voiture à CHARAZADE", Color.PINK))
.addCar(new Game.CarInfo("Voiture 3", Color.RED, true)) .addCar(new Game.CarInfo("Voiture de UPEC", Color.RED))
.setTime(1000) .setTime(1000)
.setMap(m) .setMap(m)
.addVisual(Dashboard.class, "Voiture à LUWIK", 300, 200, 1000, 0)
.addVisual(Dashboard.class, "Voiture à CHARAZADE", 300, 200, 1000, 200)
.addVisual(Dashboard.class, "Voiture de UPEC", 300, 200, 1000, 400)
.addVisual(Track.class, "Piste Formule 1", 1000, 500, 1, 1)
.addVisual(Rankboard.class, "Score", 200, 200, 0, 510)
.build(); .build();
game
.addVisual(Dashboard.class, "Voiture 1", 300, 200, 1000, 0) game.run();
.addVisual(Dashboard.class, "Voiture 2", 300, 200, 1000, 200)
.addVisual(Dashboard.class, "Voiture 3", 300, 200, 1000, 400)
.addVisual(Track.class, "Piste Formule 1", 1000, 500, 1, 1)
.addVisual(Rankboard.class, "Score", 200, 200, 0, 510)
.run();
} }
} }