mirror of
https://github.com/guezoloic/racing-game.git
synced 2026-03-28 18:03:50 +00:00
feat: modification et deplacement des decorateurs
This commit is contained in:
108
src/Car.java
108
src/Car.java
@@ -346,3 +346,111 @@ public class Car {
|
|||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DrunkCar = décorateur "pilote ivre".
|
||||||
|
*
|
||||||
|
* Idée :
|
||||||
|
* - Quand l'utilisateur demande "Accelerer", le pilote peut se tromper
|
||||||
|
* et faire "Rallentir" à la place (au hasard).
|
||||||
|
* - Pareil quand on demande "Rallentir".
|
||||||
|
*
|
||||||
|
* => On modifie seulement les actions utilisateur (accelerate/decelerate),
|
||||||
|
* sans modifier la classe Car.
|
||||||
|
*/
|
||||||
|
class DrunkCar extends Car {
|
||||||
|
private Car car;
|
||||||
|
|
||||||
|
public DrunkCar(Car car) {
|
||||||
|
super(car);
|
||||||
|
this.car = car;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 50% : fait la bonne action,
|
||||||
|
// 50% : fait l'inverse
|
||||||
|
private void mayReverse() {
|
||||||
|
if (RANDOM.nextBoolean()) {
|
||||||
|
car.reverse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void move() {
|
||||||
|
mayReverse();
|
||||||
|
super.move();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Décorateur Sound :
|
||||||
|
* affiche un message sonore quand la voiture accélère.
|
||||||
|
*/
|
||||||
|
class SoundCar extends Car {
|
||||||
|
private Car car;
|
||||||
|
|
||||||
|
public SoundCar(Car car) {
|
||||||
|
super(car);
|
||||||
|
this.car = car;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String accelerate() {
|
||||||
|
System.out.println("VROOOOM VROOOOOOM");
|
||||||
|
return car.accelerate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HybridCar = décorateur "voiture hybride".
|
||||||
|
*
|
||||||
|
* Idée :
|
||||||
|
* - La voiture avance à chaque tour
|
||||||
|
* - Mais elle consomme du carburant seulement 1 fois sur 2
|
||||||
|
* => donc elle économise du carburant.
|
||||||
|
*/
|
||||||
|
class HybridCar extends Car {
|
||||||
|
private Car car;
|
||||||
|
private int energy = 100; // énergie batterie (0..100)
|
||||||
|
|
||||||
|
public HybridCar(Car car) {
|
||||||
|
super(car);
|
||||||
|
this.car = car;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** pour afficher l'énergie dans le Dashboard */
|
||||||
|
public int getEnergy() {
|
||||||
|
return energy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// 1) La voiture avance toujours
|
||||||
|
car.move();
|
||||||
|
|
||||||
|
// 2) Gestion énergie : elle perd 10% à chaque boucle
|
||||||
|
energy -= 10;
|
||||||
|
if (energy < 0)
|
||||||
|
energy = 0;
|
||||||
|
|
||||||
|
// 3) Consommation :
|
||||||
|
// - si on a encore de l'énergie, on économise le fuel (pas de conso)
|
||||||
|
// - sinon, on consomme normalement
|
||||||
|
if (energy == 0) {
|
||||||
|
car.consumeFuel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String decelerate() {
|
||||||
|
// 1) On applique le ralentissement normal (State pattern)
|
||||||
|
String msg = car.decelerate();
|
||||||
|
|
||||||
|
// 2) Recharge +5% quand on ralentit
|
||||||
|
energy += 5;
|
||||||
|
if (energy > 100)
|
||||||
|
energy = 100;
|
||||||
|
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
/**
|
|
||||||
* Décorateur abstrait pour une voiture.
|
|
||||||
*
|
|
||||||
* Il encapsule une voiture existante et délègue
|
|
||||||
* toutes les actions à celle-ci.
|
|
||||||
*
|
|
||||||
* Pattern Decorator : on ajoute un comportement
|
|
||||||
* sans modifier la classe Car.
|
|
||||||
*/
|
|
||||||
public abstract class CarDecorator {
|
|
||||||
|
|
||||||
protected final Car car;
|
|
||||||
|
|
||||||
public CarDecorator(Car car) {
|
|
||||||
this.car = car;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Délégation ---
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
car.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getFuel() {
|
|
||||||
return car.getFuel();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getRound() {
|
|
||||||
return car.getRound();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getScore() {
|
|
||||||
return car.getScore();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPos() {
|
|
||||||
return car.getPos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Car.State getState() {
|
|
||||||
return car.getState();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String accelerate() {
|
|
||||||
return car.accelerate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String decelerate() {
|
|
||||||
return car.decelerate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return car.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public java.awt.Color getColor() {
|
|
||||||
return car.getColor();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
import java.util.Random;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DrunkCar = décorateur "pilote ivre".
|
|
||||||
*
|
|
||||||
* Idée :
|
|
||||||
* - Quand l'utilisateur demande "Accelerer", le pilote peut se tromper
|
|
||||||
* et faire "Rallentir" à la place (au hasard).
|
|
||||||
* - Pareil quand on demande "Rallentir".
|
|
||||||
*
|
|
||||||
* => On modifie seulement les actions utilisateur (accelerate/decelerate),
|
|
||||||
* sans modifier la classe Car.
|
|
||||||
*/
|
|
||||||
public class DrunkCar extends CarDecorator {
|
|
||||||
|
|
||||||
private static final Random RANDOM = new Random();
|
|
||||||
|
|
||||||
public DrunkCar(Car car) {
|
|
||||||
super(car);
|
|
||||||
}
|
|
||||||
// 50% : fait la bonne action, 50% : fait l'inverse
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String accelerate() {
|
|
||||||
if (RANDOM.nextBoolean()) {
|
|
||||||
return car.accelerate();
|
|
||||||
} else {
|
|
||||||
return car.decelerate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String decelerate() {
|
|
||||||
if (RANDOM.nextBoolean()) {
|
|
||||||
return car.decelerate();
|
|
||||||
} else {
|
|
||||||
return car.accelerate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
/**
|
|
||||||
* HybridCar = décorateur "voiture hybride".
|
|
||||||
*
|
|
||||||
* Idée :
|
|
||||||
* - La voiture avance à chaque tour
|
|
||||||
* - Mais elle consomme du carburant seulement 1 fois sur 2
|
|
||||||
* => donc elle économise du carburant.
|
|
||||||
*/
|
|
||||||
public class HybridCar extends CarDecorator {
|
|
||||||
|
|
||||||
private int energy = 100; // énergie batterie (0..100)
|
|
||||||
|
|
||||||
public HybridCar(Car car) {
|
|
||||||
super(car);
|
|
||||||
}
|
|
||||||
/** pour afficher l'énergie dans le Dashboard */
|
|
||||||
public int getEnergy() {
|
|
||||||
return energy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
// 1) La voiture avance toujours
|
|
||||||
car.move();
|
|
||||||
|
|
||||||
// 2) Gestion énergie : elle perd 10% à chaque boucle
|
|
||||||
energy -= 10;
|
|
||||||
if (energy < 0) energy = 0;
|
|
||||||
|
|
||||||
// 3) Consommation :
|
|
||||||
// - si on a encore de l'énergie, on économise le fuel (pas de conso)
|
|
||||||
// - sinon, on consomme normalement
|
|
||||||
if (energy == 0) {
|
|
||||||
car.consumeFuel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String decelerate() {
|
|
||||||
// 1) On applique le ralentissement normal (State pattern)
|
|
||||||
String msg = car.decelerate();
|
|
||||||
|
|
||||||
// 2) Recharge +5% quand on ralentit
|
|
||||||
energy += 5;
|
|
||||||
if (energy > 100) energy = 100;
|
|
||||||
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
/**
|
|
||||||
* Décorateur Sound :
|
|
||||||
* affiche un message sonore quand la voiture accélère.
|
|
||||||
*/
|
|
||||||
public class SoundCar extends CarDecorator {
|
|
||||||
public SoundCar(Car car) {
|
|
||||||
super(car);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String accelerate() {
|
|
||||||
String msg = car.accelerate();
|
|
||||||
System.out.println("VROOOOM VROOOOOOM");
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user