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