diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index d272bec8c57c280c71a26cb9b0aa10bf9f185d95..f567d5f7ce5b11998269acfd4c7d8a9f89b82b5a 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 2f4203bae8d2a9c93bc24f9885e80fbd8ed8195e..41256fd6bdd2feeb94411d3f9c8abf8dd3f964bf 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 e9c1239a490550c9a7aafb79ea24146e616cbe0d..d5a8d63e3c99c5de7f76ef64fcf34933be1ab73d 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 1b189eae87aec7e4ebe829113003dcaecfda3b4e..6795a91ed07dcef1a1806b94068b6e52bc41e914 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 0aeba1240cd74ee4653e37f5f98873ffe354b6ab..349443662d1a52034982aba983801e0138f4ff52 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 cc5b4199f6c5be3ce5ef9cc7e3475cbf712d34eb..9d683f8b3c97ae148796b21c6603b9159514adfb 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 8cdb4ed274b5f200e38a2680759e2fac291ccc49..dc15d24f41d9b56ad21c677748caa45a03a443f0 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 5f68e7f4e063d23203364a3372c90dffc83ea3d6..00792338e3a8a4002978bd91ac30ddd07c212774 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 340e59817ded726fe7aa0bc607d15840ee0e0c47..50363e95c461a5ed1a144909bef70c30f2caf46d 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 5d0dad747dedc784fd9b0104c23704c1fac1e7e3..6dfe63690e08e385f5a68dbef03a51342697a22e 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 fe891d9e06c9418e7108a3585c3bace42b77ae48..873561ee1e63e20eb4cddda40a1cc402c0e986a1 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/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class index 37d92b1265d1f3a542d09824b51c0426c2cbafa8..09f09cb8b7734d04883d1aa19b58d938f72c765a 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 4ec4d11099f238606374670516d33c8f2f1da147..a8677ee28dfc53505bfb2ab19387baa449307753 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 31689a20dc0bd9f5bf307eeee5951f019bea16b8..cb0f20ee0d09d048909b28a5ac2ea423aa8d4081 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -20,7 +20,8 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIRE_COUNT = 5; public static final int INITIAL_FIREFIGHTER_COUNT = 4; public static final int INITIAL_ROAD_COUNT = 10; - public static final int INITIAL_CLAUD_COUNT = 3; + public static final int INITIAL_CLOUD_COUNT = 5; + public static final int INITIAL_MOUTAIN_COUNT = 5; private Stage primaryStage; private Parent view; @@ -48,7 +49,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_CLAUD_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_ROAD_COUNT,INITIAL_CLOUD_COUNT, INITIAL_MOUTAIN_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 8800ae20468a081bb23742381f360a45a7fbb224..1b7d8c4433b61b49eb6936c3975d77902c92d6ca 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 initialclaudCount) { + public void initialize(int boxWidth, int boxHeight, int columns, int rows, int fireCount, int firefighterCount, int initialRoadCount,int initialcloudCount, int initialMountainsCount) { // Initialize the simulation board and connect it to the grid - board = new FirefighterBoard(columns, rows, fireCount, firefighterCount, initialRoadCount,initialclaudCount); + board = new FirefighterBoard(columns, rows, fireCount, firefighterCount, initialRoadCount,initialcloudCount, initialMountainsCount); 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 e545e7094ef5576f816ce0e6b9ca052968ef18ee..cdc229d98201fbb8d07e7f4d52f233dc195b5bbb 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -13,6 +13,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final int initialFirefighterCount; private final int initialRoadCount; private final int initialcloudCount; + private final int initialmountainsCount; private List<Position> firefighterPositions; private Set<Position> firePositions; @@ -20,23 +21,26 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final Map<Position, List<Position>> neighbors; private final Position[][] positions; private List<Position> cloudPositions; + private Set<Position> moutainsPositions; private int step = 0; // Constructor for FirefighterBoard - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, int initialcloudCount) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, int initialcloudCount, int initialmountainsCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; this.initialRoadCount = initialRoadCount; this.initialcloudCount = initialcloudCount; + this.initialmountainsCount = initialmountainsCount; this.positions = new Position[rowCount][columnCount]; this.firefighterPositions = new ArrayList<>(); this.firePositions = new HashSet<>(); this.neighbors = new HashMap<>(); this.cloudPositions = new ArrayList<>(); + this.moutainsPositions = new HashSet<>(); this.roadPositions = new HashSet<>(); initializeBoard(); @@ -62,6 +66,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (int i = 0; i < initialcloudCount; i++) { cloudPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount))); } + // Initialize Moutains Positions + for (int i = 0; i < initialmountainsCount; i++) { + moutainsPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount))); + } // Initialize neighbors map @@ -107,6 +115,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { result.add(ModelElement.ROAD); } } + case MOUTAIN -> { + if (moutainsPositions.contains(position)) { + result.add(ModelElement.MOUTAIN); + } + } default ->{ } } @@ -132,10 +145,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { @Override public void reset() { step = 0; - Initializer initializer = new Initializer(columnCount,rowCount,initialFireCount,initialFirefighterCount, initialRoadCount,initialcloudCount); + Initializer initializer = new Initializer(columnCount,rowCount,initialFireCount,initialFirefighterCount, initialRoadCount,initialcloudCount, initialmountainsCount); resetPos(firePositions,initializer.getFirePositions()); resetPos(firefighterPositions,initializer.getFirefighterPositions()); resetPos(cloudPositions,initializer.getCloudPositions()); + resetPos(moutainsPositions,initializer.getMountainsPositions()); resetPos(roadPositions,initializer.getRoadPositions()); neighbors.clear(); @@ -173,7 +187,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for(ModelElement element : elements) { Strategy strategy = switch(element) { - case FIRE -> new SimpleFireSpreadStrategy(firePositions, neighbors,step); + case FIRE -> new SimpleFireSpreadStrategy(firePositions, neighbors,moutainsPositions,roadPositions, 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); @@ -232,6 +246,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (Position roadPosition : roadPositions) { updatedElements.add(new Pair<>(roadPosition, ModelElement.ROAD)); } + for (Position moutainPosition : moutainsPositions){ + updatedElements.add(new Pair<>(moutainPosition, ModelElement.MOUTAIN)); + } return updatedElements; } diff --git a/src/main/java/model/Initializer.java b/src/main/java/model/Initializer.java index b5d4dde0a076dfdd233334b6b9d7f9a63ef3038e..575b4dcd9ae55da2c64fa0352ba48534c3e00d3e 100644 --- a/src/main/java/model/Initializer.java +++ b/src/main/java/model/Initializer.java @@ -4,6 +4,8 @@ import util.Position; import java.util.*; +import static app.SimulatorApplication.*; + public class Initializer { private final int columnCount; private final int rowCount; @@ -11,6 +13,8 @@ public class Initializer { private final int initialFirefighterCount; private final int initialRoadCount; private final int initialcloudCount; + private final int initialMoutainCount; + private final Position[][] positions; private final Map<Position, List<Position>> neighbors; @@ -18,20 +22,20 @@ public class Initializer { private final List<Position> firefighterPositions; private final Set<Position> firePositions; private final List<Position> cloudPositions; + private final Set<Position> mountainsPositions; private int step = 0; private final Random randomGenerator = new Random(); - private static final int cloudCount = 3; - - public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount) { + public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount, int initialMoutainCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; this.initialRoadCount = initialRoadCount; this.initialcloudCount = initialcloudCount; + this.initialMoutainCount = initialMoutainCount; this.positions = new Position[rowCount][columnCount]; this.neighbors = new HashMap<>(); @@ -39,6 +43,7 @@ public class Initializer { this.firefighterPositions = new ArrayList<>(); this.RoadPositions = new ArrayList<>(); this.cloudPositions = new ArrayList<>(); + this.mountainsPositions = new HashSet<>(); } private void initializePositions() { @@ -65,6 +70,7 @@ public class Initializer { initializeFirefighters(); initializeRoadPositions(); initializeCloudsPositions(); + initializeMoutainsPositions(); } private void initializeFirePositions() { @@ -76,8 +82,9 @@ public class Initializer { private void initializeRoadPositions() { addRandomPositions(RoadPositions, initialRoadCount);} private void initializeCloudsPositions() { - addRandomPositions(cloudPositions, cloudCount); + addRandomPositions(cloudPositions, initialcloudCount); } + private void initializeMoutainsPositions() {addRandomPositions(mountainsPositions, initialMoutainCount);} private void addRandomPositions(Collection<Position> targetCollection, int count) { @@ -129,7 +136,12 @@ public class Initializer { public List<Position> getRoadPositions() { return RoadPositions; } - public List<Position> getCloudPositions() {return cloudPositions;} + public List<Position> getCloudPositions() { + return cloudPositions; + } + public Set<Position> getMountainsPositions() { + return mountainsPositions; + } public int getStep() {return step;} } diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index 8a0f27b21509a2424ae25f2c8309a8d885b2ff72..e3b38449c108a162f6105648e9d3e6cd2a892a93 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"); + FIREFIGHTER("blue"), FIRE("red"), CLOUD("darkgrey"),ROAD("grey"),EMPTY("white"), MOUTAIN("brown"); private final String color; diff --git a/src/main/java/model/SimpleFireSpreadStrategy.java b/src/main/java/model/SimpleFireSpreadStrategy.java index b8f9e863c81fd4dc39c42301da89345524b2d43d..0f7c42b3b7838d3adeccee49367901955f8dddb6 100644 --- a/src/main/java/model/SimpleFireSpreadStrategy.java +++ b/src/main/java/model/SimpleFireSpreadStrategy.java @@ -6,11 +6,15 @@ import java.util.*; public class SimpleFireSpreadStrategy implements Strategy { private final Set<Position> firePositions; private final Map<Position, List<Position>> neighbors; + private final Set<Position> mountainPositions; + private final Set<Position> roadPositions; private final int step; - public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors, int step) { + public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors,Set<Position> moutainsPositions,Set<Position> roadPositions, int step) { this.firePositions = firePositions; this.neighbors = neighbors; + this.mountainPositions = moutainsPositions; + this.roadPositions = roadPositions; this.step = step; } @@ -37,7 +41,10 @@ public class SimpleFireSpreadStrategy implements Strategy { } } } - private boolean canPropagateTo(Position firePosition) { + private boolean canPropagateTo(Position newPosition) { + if(mountainPositions.contains(newPosition) || roadPositions.contains(newPosition)){ + return false; + } return true; } diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java index 4f4d0aa35418321ab9599804e3d57a61e956ee44..39af292166cd1a17c9f90bba024c8ef075c0dbfc 100644 --- a/src/main/java/view/FirefighterGrid.java +++ b/src/main/java/view/FirefighterGrid.java @@ -45,8 +45,10 @@ public class FirefighterGrid extends Canvas { gc.setFill(Color.BLUE); // Firefighter is blue }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) { + gc.setFill(Color.GREEN); } else { gc.setFill(Color.WHITE); // Empty space is white }