diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index f567d5f7ce5b11998269acfd4c7d8a9f89b82b5a..051fd35cbd1aaf2f2f60edf3b880204cfcc98c2e 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.bin and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock index 41256fd6bdd2feeb94411d3f9c8abf8dd3f964bf..0be82c63efdc8504b711e35446e2a45e13b056e2 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.lock and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin index d5a8d63e3c99c5de7f76ef64fcf34933be1ab73d..27b724348ee342ec8d4b5724953555a9bdf2bde5 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.bin and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock index 6795a91ed07dcef1a1806b94068b6e52bc41e914..e68c6953a46e5070226bdc0295ae1d3dd8787e56 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin index 349443662d1a52034982aba983801e0138f4ff52..efa19decb6e32ae5cef9eac1e52b8b7bcfa7c061 100644 Binary files a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 9d683f8b3c97ae148796b21c6603b9159514adfb..d0e0f9f97184b7335603179be1962ff8f3a3232d 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class index dc15d24f41d9b56ad21c677748caa45a03a443f0..b735608fdbebd05cb7e9eb1ca39511b3fbfe80a5 100644 Binary files a/build/classes/java/main/app/SimulatorApplication.class and b/build/classes/java/main/app/SimulatorApplication.class differ diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class index 00792338e3a8a4002978bd91ac30ddd07c212774..d065bd5dfaab8640cbea20806d61f79d0867da45 100644 Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ diff --git a/build/classes/java/main/model/FirefighterBoard$1.class b/build/classes/java/main/model/FirefighterBoard$1.class index 50363e95c461a5ed1a144909bef70c30f2caf46d..c678800e340a424d63f8419f3426761f04bc6d45 100644 Binary files a/build/classes/java/main/model/FirefighterBoard$1.class and b/build/classes/java/main/model/FirefighterBoard$1.class differ diff --git a/build/classes/java/main/model/FirefighterBoard.class b/build/classes/java/main/model/FirefighterBoard.class index 6dfe63690e08e385f5a68dbef03a51342697a22e..d90530e8d72b19736694ba88f2525b738af4bb8d 100644 Binary files a/build/classes/java/main/model/FirefighterBoard.class and b/build/classes/java/main/model/FirefighterBoard.class differ diff --git a/build/classes/java/main/model/ModelElement.class b/build/classes/java/main/model/ModelElement.class index 873561ee1e63e20eb4cddda40a1cc402c0e986a1..ef86abea6c0b56da02b5a42cfd91a39108401c81 100644 Binary files a/build/classes/java/main/model/ModelElement.class and b/build/classes/java/main/model/ModelElement.class differ diff --git a/build/classes/java/main/model/SimpleFireSpreadStrategy.class b/build/classes/java/main/model/SimpleFireSpreadStrategy.class index 595ad5f73d206af2527a6fdd05093fffdca17a2e..99f37d9599a845f4357686ac641025aef33c3430 100644 Binary files a/build/classes/java/main/model/SimpleFireSpreadStrategy.class and b/build/classes/java/main/model/SimpleFireSpreadStrategy.class differ diff --git a/build/classes/java/main/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class index 09f09cb8b7734d04883d1aa19b58d938f72c765a..2b66bfdf17fed85e7539d1b0a714e09803e4efaa 100644 Binary files a/build/classes/java/main/view/FirefighterGrid.class and b/build/classes/java/main/view/FirefighterGrid.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index a8677ee28dfc53505bfb2ab19387baa449307753..687f3d658c2b5616b6cc79b89347e94a27d1cf12 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index cb0f20ee0d09d048909b28a5ac2ea423aa8d4081..acce2f1264bd3fcbb1556523b4695f0f05f8a7e2 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -22,6 +22,7 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_ROAD_COUNT = 10; public static final int INITIAL_CLOUD_COUNT = 5; public static final int INITIAL_MOUTAIN_COUNT = 5; + public static final int INITIAL_ROCKS_COUNT = 5; private Stage primaryStage; private Parent view; @@ -49,7 +50,7 @@ public class SimulatorApplication extends javafx.application.Application { Controller controller = loader.getController(); controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_ROAD_COUNT,INITIAL_CLOUD_COUNT, INITIAL_MOUTAIN_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_ROAD_COUNT,INITIAL_CLOUD_COUNT, INITIAL_MOUTAIN_COUNT, INITIAL_ROCKS_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 1b7d8c4433b61b49eb6936c3975d77902c92d6ca..fd265eb44ebb73210ad4782931fd4772a2318c38 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -33,9 +33,9 @@ public class Controller { @FXML private FirefighterGrid grid; - public void initialize(int boxWidth, int boxHeight, int columns, int rows, int fireCount, int firefighterCount, int initialRoadCount,int initialcloudCount, int initialMountainsCount) { + public void initialize(int boxWidth, int boxHeight, int columns, int rows, int fireCount, int firefighterCount, int initialRoadCount,int initialcloudCount, int initialMountainsCount, int initialRocksCount) { // Initialize the simulation board and connect it to the grid - board = new FirefighterBoard(columns, rows, fireCount, firefighterCount, initialRoadCount,initialcloudCount, initialMountainsCount); + board = new FirefighterBoard(columns, rows, fireCount, firefighterCount, initialRoadCount,initialcloudCount, initialMountainsCount, initialRocksCount); grid.initialize(columns, rows, boxWidth, boxHeight, board); // Initialize timeline for automatic progression diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index cdc229d98201fbb8d07e7f4d52f233dc195b5bbb..55c698be17be5604a5a89a0cc2f0dcdb4d234687 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -14,6 +14,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final int initialRoadCount; private final int initialcloudCount; private final int initialmountainsCount; + private final int initialrocksCount; private List<Position> firefighterPositions; private Set<Position> firePositions; @@ -22,11 +23,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final Position[][] positions; private List<Position> cloudPositions; private Set<Position> moutainsPositions; + private Set<Position> rocksPositions; private int step = 0; // Constructor for FirefighterBoard - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, int initialcloudCount, int initialmountainsCount) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, int initialcloudCount, int initialmountainsCount, int initialrocksCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; @@ -34,6 +36,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { this.initialRoadCount = initialRoadCount; this.initialcloudCount = initialcloudCount; this.initialmountainsCount = initialmountainsCount; + this.initialrocksCount = initialrocksCount; this.positions = new Position[rowCount][columnCount]; this.firefighterPositions = new ArrayList<>(); @@ -42,6 +45,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { this.cloudPositions = new ArrayList<>(); this.moutainsPositions = new HashSet<>(); this.roadPositions = new HashSet<>(); + this.rocksPositions = new HashSet<>(); initializeBoard(); } @@ -70,6 +74,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (int i = 0; i < initialmountainsCount; i++) { moutainsPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount))); } + // Initialize rocks positions + for (int i = 0; i < initialrocksCount; i++) { + rocksPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount))); + } // Initialize neighbors map @@ -120,6 +128,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { result.add(ModelElement.MOUTAIN); } } + case ROCKS -> { + if (rocksPositions.contains(position)) { + result.add(ModelElement.ROCKS); + } + } default ->{ } } @@ -145,12 +158,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> { @Override public void reset() { step = 0; - Initializer initializer = new Initializer(columnCount,rowCount,initialFireCount,initialFirefighterCount, initialRoadCount,initialcloudCount, initialmountainsCount); + Initializer initializer = new Initializer(columnCount,rowCount,initialFireCount,initialFirefighterCount, initialRoadCount,initialcloudCount, initialmountainsCount, initialrocksCount); resetPos(firePositions,initializer.getFirePositions()); resetPos(firefighterPositions,initializer.getFirefighterPositions()); resetPos(cloudPositions,initializer.getCloudPositions()); resetPos(moutainsPositions,initializer.getMountainsPositions()); resetPos(roadPositions,initializer.getRoadPositions()); + resetPos(rocksPositions,initializer.getRoadPositions()); neighbors.clear(); neighbors.putAll(initializer.getNeighbors()); @@ -187,7 +201,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for(ModelElement element : elements) { Strategy strategy = switch(element) { - case FIRE -> new SimpleFireSpreadStrategy(firePositions, neighbors,moutainsPositions,roadPositions, step); + case FIRE -> new SimpleFireSpreadStrategy(firePositions, neighbors,moutainsPositions,roadPositions, rocksPositions,step); case FIREFIGHTER -> new FirefighterMovementStrategy(firefighterPositions,firePositions,neighbors); case CLOUD -> new CloudStrategy(cloudPositions,firePositions,neighbors,rowCount,columnCount); default -> throw new IllegalStateException("Type de modèle inconnu : " + element); @@ -249,6 +263,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (Position moutainPosition : moutainsPositions){ updatedElements.add(new Pair<>(moutainPosition, ModelElement.MOUTAIN)); } + for (Position rockPosition : rocksPositions){ + updatedElements.add(new Pair<>(rockPosition,ModelElement.ROCKS)); + } return updatedElements; } diff --git a/src/main/java/model/Initializer.java b/src/main/java/model/Initializer.java index 575b4dcd9ae55da2c64fa0352ba48534c3e00d3e..07cff900ecce9bb6161865cd6d0e54f34919f330 100644 --- a/src/main/java/model/Initializer.java +++ b/src/main/java/model/Initializer.java @@ -14,6 +14,7 @@ public class Initializer { private final int initialRoadCount; private final int initialcloudCount; private final int initialMoutainCount; + private final int initialRocksCount; private final Position[][] positions; @@ -23,12 +24,13 @@ public class Initializer { private final Set<Position> firePositions; private final List<Position> cloudPositions; private final Set<Position> mountainsPositions; + private final Set<Position> rocksPositions; private int step = 0; private final Random randomGenerator = new Random(); - public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount, int initialMoutainCount) { + public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount, int initialMoutainCount,int initialRocksCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; @@ -36,6 +38,7 @@ public class Initializer { this.initialRoadCount = initialRoadCount; this.initialcloudCount = initialcloudCount; this.initialMoutainCount = initialMoutainCount; + this.initialRocksCount = initialRocksCount; this.positions = new Position[rowCount][columnCount]; this.neighbors = new HashMap<>(); @@ -44,6 +47,10 @@ public class Initializer { this.RoadPositions = new ArrayList<>(); this.cloudPositions = new ArrayList<>(); this.mountainsPositions = new HashSet<>(); + this.rocksPositions = new HashSet<>(); + initializePositions(); + initializeNeighbors(); + initializeElements(); } private void initializePositions() { @@ -71,6 +78,7 @@ public class Initializer { initializeRoadPositions(); initializeCloudsPositions(); initializeMoutainsPositions(); + initializeRocksPositions(); } private void initializeFirePositions() { @@ -85,6 +93,7 @@ public class Initializer { addRandomPositions(cloudPositions, initialcloudCount); } private void initializeMoutainsPositions() {addRandomPositions(mountainsPositions, initialMoutainCount);} + private void initializeRocksPositions() {addRandomPositions(rocksPositions, initialRocksCount);} private void addRandomPositions(Collection<Position> targetCollection, int count) { @@ -142,6 +151,9 @@ public class Initializer { public Set<Position> getMountainsPositions() { return mountainsPositions; } + public Set<Position> getRocksPositions() { + return rocksPositions; + } public int getStep() {return step;} } diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index e3b38449c108a162f6105648e9d3e6cd2a892a93..8db860b59e5e2906e2611e3414241c326a4353f0 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -2,7 +2,7 @@ package model; public enum ModelElement { - FIREFIGHTER("blue"), FIRE("red"), CLOUD("darkgrey"),ROAD("grey"),EMPTY("white"), MOUTAIN("brown"); + FIREFIGHTER("blue"), FIRE("red"), CLOUD("darkgrey"),ROAD("grey"),EMPTY("white"), MOUTAIN("brown"), ROCKS("lightBrown"); private final String color; diff --git a/src/main/java/model/SimpleFireSpreadStrategy.java b/src/main/java/model/SimpleFireSpreadStrategy.java index 0f7c42b3b7838d3adeccee49367901955f8dddb6..84e2c39aa5c3e8bc7b07b7526c02466237f1c8d5 100644 --- a/src/main/java/model/SimpleFireSpreadStrategy.java +++ b/src/main/java/model/SimpleFireSpreadStrategy.java @@ -8,13 +8,15 @@ public class SimpleFireSpreadStrategy implements Strategy { private final Map<Position, List<Position>> neighbors; private final Set<Position> mountainPositions; private final Set<Position> roadPositions; + private final Set<Position> rocksPositions; private final int step; - public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors,Set<Position> moutainsPositions,Set<Position> roadPositions, int step) { + public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors,Set<Position> moutainsPositions,Set<Position> roadPositions,Set<Position> rocksPositions, int step) { this.firePositions = firePositions; this.neighbors = neighbors; this.mountainPositions = moutainsPositions; this.roadPositions = roadPositions; + this.rocksPositions = rocksPositions; this.step = step; } @@ -45,6 +47,9 @@ public class SimpleFireSpreadStrategy implements Strategy { if(mountainPositions.contains(newPosition) || roadPositions.contains(newPosition)){ return false; } + if (rocksPositions.contains(newPosition)){ + return step % 4 ==0; + } return true; } diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java index 39af292166cd1a17c9f90bba024c8ef075c0dbfc..16c1969b52165833705b52d9b0f4784abff33da2 100644 --- a/src/main/java/view/FirefighterGrid.java +++ b/src/main/java/view/FirefighterGrid.java @@ -41,14 +41,16 @@ public class FirefighterGrid extends Canvas { // Set the color based on the element type if (element == ModelElement.FIRE) { gc.setFill(Color.RED); // Fire is red - }else if (element == ModelElement.FIREFIGHTER) { + } else if (element == ModelElement.FIREFIGHTER) { gc.setFill(Color.BLUE); // Firefighter is blue - }else if (element== ModelElement.ROAD){ + } else if (element == ModelElement.ROAD) { gc.setFill(Color.WHITE); - }else if (element == ModelElement.CLOUD) { + } else if (element == ModelElement.CLOUD) { gc.setFill(Color.YELLOW); - }else if (element == ModelElement.MOUTAIN) { + } else if (element == ModelElement.MOUTAIN) { gc.setFill(Color.GREEN); + } else if (element == ModelElement.ROCKS) { + gc.setFill(Color.LIGHTSKYBLUE); } else { gc.setFill(Color.WHITE); // Empty space is white }