mirror of
https://github.com/guezoloic/racing-game.git
synced 2026-03-28 18:03:50 +00:00
fix(Game.java): deplacer addVisual dans le Builder
This commit is contained in:
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user