feat: ajout fonction ajout visuel

This commit is contained in:
2025-11-10 16:01:38 +01:00
parent f9e1580da5
commit d9f3d848e0
3 changed files with 53 additions and 43 deletions

View File

@@ -21,14 +21,11 @@ public class Game
public final String name; public final String name;
/** Couleur de la voiture */ /** Couleur de la voiture */
public final Color color; public final Color color;
/** Visuel de la voiture */
private final boolean visual;
public CarInfo(String name, Color color, boolean visual) public CarInfo(String name, Color color, boolean visual)
{ {
this.name = name; this.name = name;
this.color = color; this.color = color;
this.visual = visual;
} }
} }
@@ -101,22 +98,21 @@ public class Game
return new Game(map, cars, state, time); return new Game(map, cars, state, time);
} }
} }
/** Carte sur laquelle le jeu se déroule */
private final Map map; private final Map map;
/** État du jeu (par exemple, positions, carburant) */ /** État du jeu (par exemple, positions, carburant) */
private final State state; private final State state;
/** Temps entre chaque étape du jeu en millisecondes */ /** Temps entre chaque étape du jeu en millisecondes */
private final int time; private final int time;
/** Liste des voitures du jeu */ /** Liste des voitures du jeu */
private final ArrayList<Car> cars = new ArrayList<>(); private final ArrayList<Car> cars = new ArrayList<>();
/** Liste des observateurs pour la mise à jour des vues */ /** Liste des observateurs pour la mise à jour des vues */
private final ArrayList<GObserver> obs = new ArrayList<>(); private final ArrayList<GObserver> obs = new ArrayList<>();
/** Indique si le jeu est en pause */ /** Indique si le jeu est en pause */
private boolean isPaused = false; private boolean isPaused = false;
/** /**
* Constructeur principal. * Constructeur principal.
* *
@@ -130,10 +126,10 @@ public class Game
this.map = map; this.map = map;
this.state = state; this.state = state;
this.time = time; this.time = time;
init(carInfos); init(carInfos);
} }
/** /**
* Initialise le jeu en créant les vues et les objets {@link Car}. * Initialise le jeu en créant les vues et les objets {@link Car}.
* <p> * <p>
@@ -146,26 +142,15 @@ public class Game
*/ */
private Game init(ArrayList<CarInfo> carInfos) private Game init(ArrayList<CarInfo> carInfos)
{ {
// Création des vues principales
new Track(this, "Piste Formule 1", 1000, 500, 1, 1);
new Rankboard(this, "Score", 200, 200, 0, 510);
final int loop = map.getPathSize(); final int loop = map.getPathSize();
// Création de chaque voiture avec son Dashboard // Création de chaque voiture avec son Dashboard
int i = 0;
for (CarInfo ci : carInfos) for (CarInfo ci : carInfos)
{ cars.add(new Car(ci.name, ci.color, loop, state));
Car car = new Car(ci.name, ci.color, loop, state);
String name = car.getName();
new Dashboard(this, car, name, 300, 200, 1000, 200*i);
cars.add(car);
i++;
}
return this; return this;
} }
/** /**
* Vérifie si le jeu est terminé. * Vérifie si le jeu est terminé.
* <p> * <p>
@@ -179,11 +164,11 @@ public class Game
for (Car car : cars) for (Car car : cars)
{ {
if (car.getFuel() == 0) if (car.getFuel() == 0)
return true; return true;
} }
return false; return false;
} }
/** /**
* Ajoute un observateur pour recevoir les mises à jour du jeu. * Ajoute un observateur pour recevoir les mises à jour du jeu.
* *
@@ -195,7 +180,7 @@ public class Game
obs.add(o); obs.add(o);
return this; return this;
} }
/** /**
* Supprime un observateur. * Supprime un observateur.
* *
@@ -207,7 +192,7 @@ public class Game
obs.remove(o); obs.remove(o);
return this; return this;
} }
/** /**
* Bascule l'état de pause du jeu. * Bascule l'état de pause du jeu.
* <p> * <p>
@@ -222,13 +207,12 @@ public class Game
isPaused = !isPaused; isPaused = !isPaused;
return isPaused; return isPaused;
} }
public void notifyObservers() public void notifyObservers()
{ {
for (GObserver o : obs) for (GObserver o : obs)
{ {
boolean isSuccess = o.apply(); boolean isSuccess = o.apply();
System.out.println(o.getClass());
if (!isSuccess) if (!isSuccess)
{ {
System.err.println("Une erreur s'est produite pendant le jeu."); System.err.println("Une erreur s'est produite pendant le jeu.");
@@ -236,7 +220,7 @@ public class Game
} }
} }
} }
/** /**
* Exécute un cycle du jeu * Exécute un cycle du jeu
* <p> * <p>
@@ -250,17 +234,17 @@ public class Game
{ {
for (Car car : cars) for (Car car : cars)
{ {
synchronized(this) synchronized(this)
{ {
while (isPaused) while (isPaused)
wait(); wait();
} }
car.run(); car.run();
notifyObservers(); notifyObservers();
} }
} }
/** /**
* Boucle principale du jeu. * Boucle principale du jeu.
* <p> * <p>
@@ -283,24 +267,44 @@ public class Game
} }
} }
} }
public ArrayList<Car> getCars() public ArrayList<Car> getCars()
{ {
return cars; return cars;
} }
public Map getMap() public Map getMap()
{ {
return map; return map;
} }
public State getState() public State getState()
{ {
return state; return state;
} }
public boolean getPause() public boolean getPause()
{ {
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

@@ -23,8 +23,15 @@ public class Main {
.addCar(new Game.CarInfo("Voiture 1", Color.BLUE, true)) .addCar(new Game.CarInfo("Voiture 1", Color.BLUE, true))
.addCar(new Game.CarInfo("Voiture 2", Color.PINK, true)) .addCar(new Game.CarInfo("Voiture 2", Color.PINK, true))
.addCar(new Game.CarInfo("Voiture 3", Color.RED, true)) .addCar(new Game.CarInfo("Voiture 3", Color.RED, true))
.setTime(1000)
.setMap(m) .setMap(m)
.build(); .build();
game.run(); game
.addVisual(Dashboard.class, "Voiture 1", 300, 200, 1000, 0)
.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();
} }
} }

View File

@@ -59,7 +59,6 @@ public class Rankboard extends GameView
s.append("<tr><td>" + c.getName() + ": " + c.getScore() + "%</td></tr>"); s.append("<tr><td>" + c.getName() + ": " + c.getScore() + "%</td></tr>");
} }
s.append("</table></html>"); s.append("</table></html>");
System.out.println(s);
label.setText(s.toString()); label.setText(s.toString());
} }