diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index cf042868aaad396297f8fd541f4668f2819d4134..44fd3c2512d327d67c150257255a0e1136af07f0 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -20,6 +20,7 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIRE_COUNT = 15; public static final int INITIAL_FIREFIGHTER_COUNT = 10; public static final int INITIAL_CLOUD_COUNT = 5; + public static final int INITIAL_ROAD_COUNT = 5; private Stage primaryStage; @@ -46,7 +47,7 @@ public class SimulatorApplication extends javafx.application.Application { view = loader.load(); Controller controller = loader.getController(); controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT,INITIAL_ROAD_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 0c9dfb7942e6772ea0f6c2dae5c83127312c8716..0c89bb2fa8a484ab2771a4d9ea2adc3463ae89d2 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -88,9 +88,12 @@ public class Controller { if (squareState.contains(ModelElement.FIRE)) { return ViewElement.FIRE; } - if (squareState.contains(ModelElement.CLOUD)) { // Assurez-vous que le modèle inclut bien le nuage + if (squareState.contains(ModelElement.CLOUD)) { return ViewElement.CLOUD; } + if (squareState.contains(ModelElement.ROAD)) { + return ViewElement.ROAD; + } return ViewElement.EMPTY; } @@ -128,9 +131,9 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount) { + int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudCount)); + this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudCount,initialRoadCount)); repaintGrid(); } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index b60c9ae13f8c843e33f8167fce5390221e548481..7db4034416a9240dfab547603bdf589c2003476f 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -12,8 +12,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final int initialFireCount; private final int initialFirefighterCount; private final int initialCloudCount; + private final int initialRoadCount; private final TargetStrategy targetStrategy = new TargetStrategy(); private List<FireFighter> firefighters; + private List<Road> roads; private Map<Position, Fire> fires = new HashMap<>(); private List<Cloud> clouds; private final Map<Position, List<Position>> neighbors = new HashMap<>(); @@ -21,7 +23,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private int step = 0; private final Random randomGenerator = new Random(); - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.positions = new Position[rowCount][columnCount]; @@ -31,6 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; this.initialCloudCount = initialCloudCount; + this.initialRoadCount = initialRoadCount; initializeElements(); } @@ -61,6 +64,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { firefighters = new ArrayList<>(); clouds = new ArrayList<>(); fires.clear(); + roads = new ArrayList<>(); for (int index = 0; index < initialFireCount; index++) { Position position = randomPosition(); @@ -74,6 +78,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { clouds.add(new Cloud(randomPosition())); } + for (int index = 0; index < initialRoadCount; index++) { + roads.add(new Road(randomPosition())); + } + } private Position randomPosition() { @@ -92,6 +100,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (Cloud cloud : clouds) { if (cloud.getPosition().equals(position)) result.add(ModelElement.CLOUD); } + for (Road road : roads) { + if (road.getPosition().equals(position)) result.add(ModelElement.ROAD); + } return result; } @@ -139,6 +150,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { if (step % 2 == 0) { Set<Position> newFirePositions = new HashSet<>(); for (Position fire : new HashSet<>(fires.keySet())) { + List<Position> neighboursAvaiable = neighbors.get(fire); + + newFirePositions.addAll(neighbors.get(fire)); } for (Position position : newFirePositions) { @@ -196,11 +210,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> { public void setState(List<ModelElement> state, Position position) { extinguish(position); firefighters.removeIf(firefighter -> firefighter.getPosition().equals(position)); + firefighters.removeIf(cloud -> cloud.getPosition().equals(position)); for (ModelElement element : state) { switch (element) { case FIRE -> fires.put(position, new Fire(position)); case FIREFIGHTER -> firefighters.add(new FireFighter(position)); + case CLOUD -> clouds.add(new Cloud(position)); } } } diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index 4613ca6034c1e7c76df1da76a87982b8fee1d716..b441468ecdb207a1e981278f4a2a7c19be8a46a1 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -3,6 +3,7 @@ package model; public enum ModelElement { FIREFIGHTER, FIRE, - CLOUD; + CLOUD, + ROAD; } diff --git a/src/main/java/model/Road.java b/src/main/java/model/Road.java index 21826f6ba84aa3868f06e104261940b00f62ab5f..5825a8440b20a9c6cdde1da7310065ee721af47b 100644 --- a/src/main/java/model/Road.java +++ b/src/main/java/model/Road.java @@ -19,4 +19,6 @@ public class Road { + + } diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index d3e00087e1a9d4e18edfcdbe07eb8be83adb16b3..c7fad49c1f47dae3484d671b744f6255b5310757 100644 --- a/src/main/java/view/ViewElement.java +++ b/src/main/java/view/ViewElement.java @@ -3,7 +3,7 @@ package view; import javafx.scene.paint.Color; public enum ViewElement { - FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.LIGHTSKYBLUE), EMPTY(Color.WHITE); + FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.LIGHTSKYBLUE),ROAD(Color.GRAY), EMPTY(Color.WHITE); final Color color; ViewElement(Color color) { this.color = color; diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java index 5e6540f1ab46921aed249bbc44f71e5eef939a9e..c435da49d9f2c52656a67dccd183cabae21b5805 100644 --- a/src/test/java/model/FirefighterBoardTest.java +++ b/src/test/java/model/FirefighterBoardTest.java @@ -10,17 +10,17 @@ import static org.assertj.core.api.Assertions.*; public class FirefighterBoardTest { @Test void testColumnCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5); assertThat(board.columnCount()).isEqualTo(20); } @Test void testRowCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5); assertThat(board.rowCount()).isEqualTo(10); } @Test void testStepNumber(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5); for(int index = 0; index < 10; index++){ assertThat(board.stepNumber()).isEqualTo(index); board.updateToNextGeneration(); @@ -29,7 +29,7 @@ public class FirefighterBoardTest { } @Test void testGetState_afterSet(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0,1); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0,1,5); Position position = new Position(1,2); assertThat(board.getState(position)).isEmpty(); board.setState(List.of(ModelElement.FIRE), position);