package model.car; import java.util.List; /** * {@code State} représente l'état dynamique d'un véhicule. * *
* Chaque état définit : *
* Ce design correspond au State Pattern : * le comportement du véhicule varie selon son état courant * sans avoir recours à des conditions {@code if / switch}. */ public enum State { /** * État NORMAL du véhicule. * *
* Le véhicule avance d'un nombre aléatoire de cases * compris entre 1 et 6 inclus. * Il consomme 2 unités de carburant par tour. * *
* Transitions possibles : *
* Le véhicule avance rapidement (entre 5 et 10 cases). * Il consomme 5 unités de carburant par tour. * *
* Transitions possibles : *
* Le véhicule avance lentement (entre 1 et 3 cases). * Il consomme 1 unité de carburant par tour. * *
* Transitions possibles : *
* Le véhicule est à l'arrêt : *
* Transitions possibles : *
* Le véhicule est endommagé : *
* Cet état est temporaire : après réparation,
* le véhicule repasse à l'état {@link #LOW}.
*/
DAMAGED(0, 0, 0) {
@Override
public State accelerate() {
return this;
}
@Override
public State decelerate() {
return this;
}
@Override
public int move(int pos, int jump) {
return pos;
}
@Override
public int fuelConsumption(int fuel) {
return fuel;
}
@Override
public boolean isDamaged() {
return true;
}
@Override
public State onDamageEnd() {
return LOW;
}
};
/* ==========================================================
* Attributs communs à tous les états
* ========================================================== */
/** Consommation de carburant par tour */
public final int FUELCOST;
/** Borne maximale (exclusive) de déplacement */
public final int MAX;
/** Borne minimale (inclusive) de déplacement */
public final int MIN;
/**
* Constructeur interne des états.
*
* @param fuelCost consommation par tour
* @param min déplacement minimal
* @param max déplacement maximal (inclus)
*/
private State(int fuelCost, int min, int max) {
this.FUELCOST = fuelCost;
this.MIN = min;
this.MAX = max + 1;
}
/**
* Retourne l'intervalle de déplacement possible pour cet état.
*
* @return liste contenant [MIN, MAX[
*/
public List