feat: fusion Circuit et CircuitCell

This commit is contained in:
2025-11-05 22:26:20 +01:00
parent d2847745ba
commit 8d280b1024
5 changed files with 74 additions and 71 deletions

View File

@@ -1,14 +1,55 @@
/** /**
* Représente une cellule du circuit. * Représente une cellule du circuit.
* <p> * <p>
* Chaque cellule possède un type ({@link CircuitCell}) et éventuellement une valeur * 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). * numérique (par exemple pour indiquer une intensité, une vitesse, ou un identifiant de route).
* </p> * </p>
*/ */
public class Circuit public class Circuit
{ {
/**
* <code>Cell</code> 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.) */ /** Type de la cellule (vide, route, départ, arrivée, etc.) */
private final CircuitCell type; private final Cell type;
/** Valeur associée à la cellule (optionnelle, dépend du type) */ /** Valeur associée à la cellule (optionnelle, dépend du type) */
private int value; private int value;
@@ -19,7 +60,7 @@ public class Circuit
* *
* @param type le type de la cellule * @param type le type de la cellule
*/ */
public Circuit(CircuitCell type) public Circuit(Cell type)
{ {
this.type = type; this.type = type;
this.value = type.ordinal(); this.value = type.ordinal();
@@ -31,7 +72,7 @@ public class Circuit
* @param type le type de la cellule * @param type le type de la cellule
* @param value la valeur associée à la cellule * @param value la valeur associée à la cellule
*/ */
public Circuit(CircuitCell type, int value) public Circuit(Cell type, int value)
{ {
this.type = type; this.type = type;
this.value = value; this.value = value;
@@ -52,7 +93,7 @@ public class Circuit
/** /**
* @return le type de la cellule * @return le type de la cellule
*/ */
public CircuitCell getType() public Cell getType()
{ {
return type; return type;
} }
@@ -72,7 +113,7 @@ public class Circuit
*/ */
public boolean isRoad() public boolean isRoad()
{ {
return type == CircuitCell.ROAD || type == CircuitCell.YROAD; return type == Cell.ROAD || type == Cell.YROAD;
} }
/** /**
@@ -82,7 +123,7 @@ public class Circuit
*/ */
public boolean isStart() public boolean isStart()
{ {
return type == CircuitCell.START; return type == Cell.START;
} }
/** /**
@@ -92,6 +133,6 @@ public class Circuit
*/ */
public boolean isFinish() public boolean isFinish()
{ {
return type == CircuitCell.FINISH; return type == Cell.FINISH;
} }
} }

View File

@@ -1,39 +0,0 @@
/**
* <code>CircuitCell</code> est un enum
* représentant les différents types de
* cases qui composent le circuit de
* course.
*/
public enum CircuitCell {
/**
* 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;
}

View File

@@ -6,6 +6,8 @@ public class Game
private Car[] cars; private Car[] cars;
private Map map; private Map map;
private ArrayList<GObserver> obs;
public static class Builder public static class Builder
{ {
private int pnumber = 3; private int pnumber = 3;
@@ -57,8 +59,6 @@ public class Game
} }
} }
private ArrayList<GObserver> obs;
public Game(int pnumber, Map map, State state) public Game(int pnumber, Map map, State state)
{ {
int loop = map.getPathSize(); int loop = map.getPathSize();
@@ -71,6 +71,7 @@ public class Game
{ {
Car car = new Car(loop, state); Car car = new Car(loop, state);
cars[i] = car; cars[i] = car;
// Observer pour avancer // Observer pour avancer
obs.add(car); obs.add(car);
} }

View File

@@ -1,13 +1,13 @@
public class Main { public class Main {
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
Map m = Map.fromChars(new Character[][] { // Map m = Map.fromChars(new Character[][] {
{'3', '#', '2'}, // {'3', '#', '2'},
{'#', ' ', 'S'}, // {'#', ' ', 'S'},
{'9', '#', 'F'}, // {'9', '#', 'F'},
}); // });
Game game = new Game.Builder() Game game = new Game.Builder()
.setMap(m) .defaultMap()
.setPlayers(3) .setPlayers(3)
.build(); .build();

View File

@@ -6,7 +6,7 @@ import java.util.function.Function;
* <p> <code>Map</code> représente le circuit de course.</p> * <p> <code>Map</code> représente le circuit de course.</p>
* <p>Cette classe contient: </p> * <p>Cette classe contient: </p>
* <ul> * <ul>
* <li>Un tableau 2D de CircuitCell</li> * <li>Un tableau 2D de Circuit.Cell</li>
* <li>Une liste de Points qui représente le chemin pour la voiture entre <code>START</code> et <code>FINISH</code></li> * <li>Une liste de Points qui représente le chemin pour la voiture entre <code>START</code> et <code>FINISH</code></li>
* </ul> * </ul>
*/ */
@@ -65,11 +65,11 @@ public class Map
public static Map fromInts(Integer[][] map) public static Map fromInts(Integer[][] map)
{ {
return create((i) -> switch (i) { return create((i) -> switch (i) {
case 0 -> new Circuit(CircuitCell.EMPTY); case 0 -> new Circuit(Circuit.Cell.EMPTY);
case -1 -> new Circuit(CircuitCell.ROAD); case -1 -> new Circuit(Circuit.Cell.ROAD);
case -2 -> new Circuit(CircuitCell.START); case -2 -> new Circuit(Circuit.Cell.START);
case -3 -> new Circuit(CircuitCell.FINISH); case -3 -> new Circuit(Circuit.Cell.FINISH);
default -> new Circuit(CircuitCell.YROAD, i); default -> new Circuit(Circuit.Cell.YROAD, i);
}, map); }, map);
} }
@@ -89,12 +89,12 @@ public class Map
public static Map fromChars(Character[][] map) public static Map fromChars(Character[][] map)
{ {
return create((i) -> switch (i) { return create((i) -> switch (i) {
case '#' -> new Circuit(CircuitCell.ROAD); case '#' -> new Circuit(Circuit.Cell.ROAD);
case 'S' -> new Circuit(CircuitCell.START); case 'S' -> new Circuit(Circuit.Cell.START);
case 'F' -> new Circuit(CircuitCell.FINISH); case 'F' -> new Circuit(Circuit.Cell.FINISH);
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
-> new Circuit(CircuitCell.YROAD, i - '0'); -> new Circuit(Circuit.Cell.YROAD, i - '0');
default -> new Circuit(CircuitCell.EMPTY); default -> new Circuit(Circuit.Cell.EMPTY);
}, map); }, map);
} }
@@ -152,11 +152,11 @@ public class Map
{ {
switch (map[i][j].getType()) switch (map[i][j].getType())
{ {
case CircuitCell.START: case Circuit.Cell.START:
if (start == null) start = new Point(j, i); if (start == null) start = new Point(j, i);
else return null; else return null;
break; break;
case CircuitCell.FINISH: case Circuit.Cell.FINISH:
if (end == null) end = new Point(j, i); if (end == null) end = new Point(j, i);
else return null; else return null;
break; break;
@@ -249,13 +249,13 @@ public class Map
} }
/** /**
* Retourne le type de cellule (CircuitCell) à la position (x, y). * Retourne le type de cellule (Circuit.Cell) à la position (x, y).
* *
* @param x Coordonnée X * @param x Coordonnée X
* @param y Coordonnée Y * @param y Coordonnée Y
* @return Le type de cellule <code>CircuitCell</code> * @return Le type de cellule <code>Circuit.Cell</code>
*/ */
public CircuitCell getCell(int x, int y) public Circuit.Cell getCell(int x, int y)
{ {
return getElement(x, y).getType(); return getElement(x, y).getType();
} }