diff --git a/src/Game.java b/src/Game.java index 3833f3c..dd50846 100644 --- a/src/Game.java +++ b/src/Game.java @@ -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 cars = new ArrayList<>(); /** Liste des observateurs pour la mise à jour des vues */ private final ArrayList 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}. *

@@ -146,26 +142,15 @@ public class Game */ private Game init(ArrayList 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é. *

@@ -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. *

@@ -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 *

@@ -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. *

@@ -283,24 +267,44 @@ public class Game } } } - + public ArrayList 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 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; + } } \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index bb10fa3..7bd48af 100644 --- a/src/Main.java +++ b/src/Main.java @@ -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(); } } \ No newline at end of file diff --git a/src/Rankboard.java b/src/Rankboard.java index 03541f0..2ddb7a8 100644 --- a/src/Rankboard.java +++ b/src/Rankboard.java @@ -59,7 +59,6 @@ public class Rankboard extends GameView s.append("" + c.getName() + ": " + c.getScore() + "%"); } s.append(""); - System.out.println(s); label.setText(s.toString()); }