package model; /** * Représente une cellule du circuit. *

* Chaque cellule possède un type ({@link Cell}) et éventuellement une valeur * numérique (par exemple pour indiquer une intensité, une vitesse, ou un identifiant de route). *

*/ public class Circuit { /** * Cell est un enum * représentant les différents types de * cases qui composent le circuit de * course. */ public static enum Cell { /** * Case hors piste, non * praticable par les * voitures. */ EMPTY, /** * Case de route normale * sur laquelle les voitures * peuvent circuler. */ ROAD, /** * Case correspondant à la * ligne de départ du circuit. */ START, /** * Case correspondant à la * ligne d'arrivée du circuit. */ FINISH, /** * Case de route jaune, plus * d'information sur le * livrable 2 */ YROAD; } /** Type de la cellule (vide, route, départ, arrivée, etc.) */ private final Cell type; /** Valeur associée à la cellule (optionnelle, dépend du type) */ private int value; /** * Construit une cellule avec un type défini et une valeur par défaut * égale à l’indice ordinal du type. * * @param type le type de la cellule */ public Circuit(Cell type) { this.type = type; this.value = type.ordinal(); } /** * Construit une cellule avec un type et une valeur spécifique. * * @param type le type de la cellule * @param value la valeur associée à la cellule */ public Circuit(Cell type, int value) { this.type = type; this.value = value; } /** * Modifie la valeur associée à la cellule. * * @param value la nouvelle valeur * @return cette même instance (pour chaînage fluide) */ public Circuit setValue(int value) { this.value = value; return this; } /** * @return le type de la cellule */ public Cell getType() { return type; } /** * @return la valeur associée à la cellule */ public int getValue() { return value; } /** * Vérifie si la cellule est une route (ROAD ou YROAD). * * @return vrai si la cellule représente une route */ public boolean isRoad() { return type == Cell.ROAD || type == Cell.YROAD; } /** * Vérifie si la cellule est un point de départ. * * @return vrai si la cellule représente le départ */ public boolean isStart() { return type == Cell.START; } /** * Vérifie si la cellule est un point d’arrivée. * * @return vrai si la cellule représente la fin du circuit */ public boolean isFinish() { return type == Cell.FINISH; } }