From a5d03178d97e3cd70b0dc25c4b16656ca8c92f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20GUEZO?= Date: Thu, 18 Dec 2025 14:09:52 +0100 Subject: [PATCH] feat(Car): nouveau constructor et fonction reverse - ajout nouveau constructor pour clone la voiture - ajout de la fonction reversing pour faire revenir en arriere la voiture --- src/Car.java | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/Car.java b/src/Car.java index eb55224..7beb30d 100644 --- a/src/Car.java +++ b/src/Car.java @@ -16,7 +16,7 @@ import java.util.Random; */ public class Car { /** Générateur de nombres aléatoires pour simuler la progression */ - private static final Random RANDOM = new Random(); + protected static final Random RANDOM = new Random(); /** Couleur de la voiture pour l'affichage */ private final Color COLOR; @@ -31,6 +31,8 @@ public class Car { /** Carburant restant */ private int fuel = 60; + private boolean isReversing = false; + /** * Construit une nouvelle voiture. * @@ -44,6 +46,12 @@ public class Car { this.MAP = map; } + public Car(Car other) { + this.NAME = other.NAME; + this.COLOR = other.COLOR; + this.MAP = other.MAP; + } + public static enum State { /** * L'état NORMAL du Vehicule avance selon un chiffre au alentour de 1 à 6 cases @@ -207,11 +215,14 @@ public class Car { return state; } - /** Clique sur "Accelerer" : change d'état et retourne un message (si nécessaire). */ + /** + * Clique sur "Accelerer" : change d'état et retourne un message (si + * nécessaire). + */ public String accelerate() { // Si endommagée => l'énoncé dit qu'on ne peut pas bouger if (state.isDamaged()) { - return "Voiture endommagée : impossible d'accélérer"; + return "Voiture endommagée : impossible d'accélérer"; } State next = state.accelerate(); @@ -223,7 +234,10 @@ public class Car { return ""; } - /** Clique sur "Rallentir" : change d'état et retourne un message (si nécessaire). */ + /** + * Clique sur "Rallentir" : change d'état et retourne un message (si + * nécessaire). + */ public String decelerate() { if (state.isDamaged()) { return "Voiture endommagée : impossible de ralentir"; @@ -258,24 +272,31 @@ public class Car { } int jump = RANDOM.nextInt(state.MIN, state.MAX); + int direction = (isReversing) ? -1 : 1; for (int i = 0; i < jump; i++) { - pos = state.move(pos, 1); + pos = state.move(pos, direction); Point point = MAP.getPath(pos); Map.Circuit element = MAP.getElement(point.x, point.y); - - if (element.isYRoad() && element.getValue() <= jump) { + + if (hasAccident(element, jump)) { System.out.println(NAME + " a un\taccident"); setDamage(); return; } - - if (pos >= MAP.getPathSize()) { - pos = 0; - round++; - } + round = pos / MAP.getPathSize(); } + + isReversing = false; + } + + private boolean hasAccident(Map.Circuit element, int jump) { + return element.isYRoad() && element.getValue() <= jump; + } + + public void reverse() { + isReversing = !isReversing; } /** @@ -324,4 +345,4 @@ public class Car { public String getName() { return NAME; } -} \ No newline at end of file +}