mirror of
https://github.com/guezoloic/racing-game.git
synced 2026-03-28 18:03:50 +00:00
feat: ajout fonction ajout visuel
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user