From 6c75a5363f470882d5974a82638f4e50e8a7e4cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?=
Date: Thu, 18 Dec 2025 21:00:13 +0100
Subject: [PATCH] feat: correction plupart des bug - TODO: hybridCar a regler
---
src/Main.java | 4 ++--
src/model/Game.java | 21 +++++++++++++--------
src/model/car/BasicCar.java | 7 ++-----
src/model/car/Car.java | 4 ++--
src/model/car/CarDecorator.java | 14 ++++++--------
src/model/car/DrunkCar.java | 9 +++++----
src/model/car/HybridCar.java | 13 ++++++++-----
src/model/car/SoundCar.java | 2 --
src/visual/Dashboard.java | 6 ++++--
src/visual/GameView.java | 1 +
src/visual/Rankboard.java | 1 +
11 files changed, 44 insertions(+), 38 deletions(-)
diff --git a/src/Main.java b/src/Main.java
index b4c05c6..d041a04 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,9 +1,9 @@
import java.awt.Color;
-import java.util.List;
import model.Game;
import model.car.BasicCar;
import model.car.DrunkCar;
+import model.car.HybridCar;
import model.map.Map;
public class Main {
@@ -22,7 +22,7 @@ public class Main {
});
Game game = new Game.Builder()
- .car(new BasicCar("Luwik", Color.RED))
+ .car(new HybridCar(new BasicCar("Luwik", Color.RED)))
.car(new DrunkCar(new BasicCar("Charazade", Color.PINK)))
.track("Piste Formule 1", 1000, 500, 1, 1)
.rankboard("Score", 200, 200, 0, 510)
diff --git a/src/model/Game.java b/src/model/Game.java
index a0e109f..fd3f262 100644
--- a/src/model/Game.java
+++ b/src/model/Game.java
@@ -69,24 +69,18 @@ public class Game {
}
public Game build() {
- Game game = new Game();
+ Game game = new Game(this.map, this.time, this.OBSERVERS);
- for (Game.Observer observer : this.OBSERVERS) {
+ for (Game.Observer observer : new ArrayList<>(this.OBSERVERS)) {
switch (observer) {
case GameView gameView -> {
gameView.setGame(game);
}
- case Car car -> {
- car.setMap(map);
- }
default -> {
}
}
}
- game.map = this.map;
- game.time = this.time;
- game.observers = this.OBSERVERS;
return game;
}
}
@@ -104,6 +98,16 @@ public class Game {
this.map = map;
this.time = time;
this.observers = observer;
+
+ for (Game.Observer obs : this.observers) {
+ switch (obs) {
+ case Car car -> {
+ car.setMap(map);
+ }
+ default -> {
+ }
+ }
+ }
}
public Game addObserver(Observer o) {
@@ -153,6 +157,7 @@ public class Game {
e.printStackTrace();
System.exit(1);
}
+
}
public synchronized boolean togglePause() {
diff --git a/src/model/car/BasicCar.java b/src/model/car/BasicCar.java
index 3369353..dc2e275 100644
--- a/src/model/car/BasicCar.java
+++ b/src/model/car/BasicCar.java
@@ -134,10 +134,8 @@ public class BasicCar implements Car {
* @param move nombre de positions à avancer
* @return cette même instance (pour chaînage fluide)
*/
- @Override
public void move() {
if (decreaseDamage()) {
- System.out.println(NAME + " est en\taccident " + damageRound);
return;
}
@@ -150,7 +148,6 @@ public class BasicCar implements Car {
Circuit element = map.getElement(point.x, point.y);
if (hasAccident(element, jump)) {
- System.out.println(NAME + " a un\taccident");
setDamage();
return;
}
@@ -167,7 +164,6 @@ public class BasicCar implements Car {
*
* @return cette même instance pour chaînage
*/
- @Override
public void consumeFuel() {
fuel = state.fuelConsumption(fuel);
if (fuel < 0)
@@ -190,6 +186,7 @@ public class BasicCar implements Car {
public boolean apply() {
if (fuel > 0) {
move();
+ consumeFuel();
}
return !hasFinished();
}
@@ -203,7 +200,7 @@ public class BasicCar implements Car {
* @return la position actuelle dans la boucle
*/
public int getPosition() {
- return pos;
+ return Math.floorMod(pos, map.getPathSize());
}
/**
diff --git a/src/model/car/Car.java b/src/model/car/Car.java
index 2884300..65fd8a0 100644
--- a/src/model/car/Car.java
+++ b/src/model/car/Car.java
@@ -12,8 +12,6 @@ public interface Car extends Observer {
public void move();
- public void consumeFuel();
-
public void reverse(boolean active);
public Color getColor();
@@ -31,4 +29,6 @@ public interface Car extends Observer {
public State getState();
public void setMap(Map map);
+
+ public void consumeFuel();
}
diff --git a/src/model/car/CarDecorator.java b/src/model/car/CarDecorator.java
index a6a3ae9..09497a2 100644
--- a/src/model/car/CarDecorator.java
+++ b/src/model/car/CarDecorator.java
@@ -26,16 +26,9 @@ public abstract class CarDecorator implements Car {
car.move();
}
- @Override
- public void consumeFuel() {
- car.consumeFuel();
- }
-
@Override
public boolean apply() {
- boolean response = car.apply();
- car.consumeFuel();
- return response;
+ return car.apply();
}
@Override
@@ -82,4 +75,9 @@ public abstract class CarDecorator implements Car {
public void setMap(Map map) {
car.setMap(map);
}
+
+ @Override
+ public void consumeFuel() {
+ car.consumeFuel();
+ }
}
\ No newline at end of file
diff --git a/src/model/car/DrunkCar.java b/src/model/car/DrunkCar.java
index 8871a57..b2cba16 100644
--- a/src/model/car/DrunkCar.java
+++ b/src/model/car/DrunkCar.java
@@ -20,13 +20,14 @@ public class DrunkCar extends CarDecorator {
public DrunkCar(Car car) {
super(car);
}
-
- @Override
+
// 50% : fait la bonne action,
// 50% : fait l'inverse
- public void move() {
+ @Override
+ public boolean apply() {
car.reverse(RANDOM.nextBoolean());
- car.move();
+ car.apply();
car.reverse(false);
+ return true;
}
}
\ No newline at end of file
diff --git a/src/model/car/HybridCar.java b/src/model/car/HybridCar.java
index db49a20..89a08cc 100644
--- a/src/model/car/HybridCar.java
+++ b/src/model/car/HybridCar.java
@@ -1,7 +1,5 @@
package model.car;
-import java.awt.Color;
-
/**
* HybridCar = décorateur "voiture hybride".
*
@@ -22,17 +20,22 @@ public class HybridCar extends CarDecorator {
return energy;
}
+ // TODO
@Override
public boolean apply() {
- boolean response = car.apply();
+ car.move();
+ consumeFuel();
+ return true;
+ }
+ // TODO
+ @Override
+ public void consumeFuel() {
if (energy > 0) {
energy -= 10;
} else {
car.consumeFuel();
}
-
- return response;
}
@Override
diff --git a/src/model/car/SoundCar.java b/src/model/car/SoundCar.java
index 234ee1c..d3e19c3 100644
--- a/src/model/car/SoundCar.java
+++ b/src/model/car/SoundCar.java
@@ -1,7 +1,5 @@
package model.car;
-import java.awt.Color;
-
/**
* Décorateur Sound :
* affiche un message sonore quand la voiture accélère.
diff --git a/src/visual/Dashboard.java b/src/visual/Dashboard.java
index 970a8f3..7657289 100644
--- a/src/visual/Dashboard.java
+++ b/src/visual/Dashboard.java
@@ -62,10 +62,12 @@ public class Dashboard extends GameView {
this.car = car;
if (car != null && game != null)
- init();
+ init(game);
}
- private void init() {
+ @Override
+ protected void init(Game game) {
+ super.init(game);
// Fond de la fenêtre = couleur de la voiture
frame.setBackground(car.getColor());
diff --git a/src/visual/GameView.java b/src/visual/GameView.java
index b40fdf7..c07f2b3 100644
--- a/src/visual/GameView.java
+++ b/src/visual/GameView.java
@@ -34,6 +34,7 @@ public abstract class GameView extends JComponent implements Game.Observer {
public void setGame(Game game) {
this.game = game;
+ init(game);
}
/**
diff --git a/src/visual/Rankboard.java b/src/visual/Rankboard.java
index 6f47cc5..6839e8c 100644
--- a/src/visual/Rankboard.java
+++ b/src/visual/Rankboard.java
@@ -57,6 +57,7 @@ public class Rankboard extends GameView {
*
*/
private void updateRankText() {
+ if (cars == null) return;
// cloner pour de modifier la classe principale
List cars_clone = new ArrayList<>(cars);
cars_clone.sort(Comparator.comparingInt(Car::getScore).reversed());