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
This commit is contained in:
2025-12-18 14:09:52 +01:00
parent be6272c881
commit a5d03178d9

View File

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