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;
}
}

View File

@@ -23,8 +23,15 @@ public class Main {
.addCar(new Game.CarInfo("Voiture 1", Color.BLUE, true))
.addCar(new Game.CarInfo("Voiture 2", Color.PINK, true))
.addCar(new Game.CarInfo("Voiture 3", Color.RED, true))
.setTime(1000)
.setMap(m)
.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("</table></html>");
System.out.println(s);
label.setText(s.toString());
}