diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index e93c865cf1b72472cfa682758e98c3bb522c8cad..24f92def9427e1eb2fb7fa1d1b80b802329454ce 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 31a3a0a39e4212e4bc2c34425978194b02bdcfe2..b9623e111c2e3519d0d7451ff86d8c40bb498974 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 f45170b79721d972e35a42e3798d8da1c3dfb235..e6735fb5271f9b0ac021a90356e43e33b935e1b1 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 d5807fc55d5cdf8cc4db7c81c513ad88e7990446..1ef521d2fc05d60bf08236e1f7d536db41e93026 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 361ed8b74ba2225b1a38375ee4383f86dda21659..523eb83b498d61d5ed383b33e97a1e7d6942c023 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 1fa5114eb746698d290ca8906720c193c02e035f..4010607332a77182bc40b7835e59dd12503bbd11 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 c6949c5db30d34f39a15fc024f10e72ebe0dd2d0..83f842461bbbc81062b3633e7a0bcc6a515f6fa3 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 512cf272c882b47442e9f88abc2113d1a37fc039..f9f16e239ccd20b1d1fa268b802f40f47bf13cf3 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/BoardElement.class b/build/classes/java/main/model/BoardElement.class index 3dd8554cc2b26635b757e21bbcdc9bf3a97ec9ee..f13c75608e22866d9214df4c37452027e16e2464 100644 Binary files a/build/classes/java/main/model/BoardElement.class and b/build/classes/java/main/model/BoardElement.class differ diff --git a/build/classes/java/main/model/BoardFireFighterBehavior.class b/build/classes/java/main/model/BoardFireFighterBehavior.class index 1c537c58c8f903db8eeb2551e27ea4e4cbe95cad..c98e1d5ce384655a278c407abf4fad53ad459ff8 100644 Binary files a/build/classes/java/main/model/BoardFireFighterBehavior.class and b/build/classes/java/main/model/BoardFireFighterBehavior.class differ diff --git a/build/classes/java/main/model/FirefighterBoard.class b/build/classes/java/main/model/FirefighterBoard.class index 4464d98f7f268fd5b894fa609ae2ce2ed9c8b61e..77ae15b80a2fa9f3695271d7938e3cd301cd1031 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/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 68d5fbf7aa7887e8aba2f4d66d95ef312b18474f..1152e60afc282930b6f0635125dafd3d642ca116 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 b902612a14c0f5327dfaac5836f0090ab6e80245..bff0ea47cef5a22420975952fc0c7b4ba1f89bec 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -18,7 +18,7 @@ public class SimulatorApplication extends javafx.application.Application { private static final int BOX_WIDTH = 50; private static final int BOX_HEIGHT = 50; public static final int INITIAL_FIRE_COUNT = 3; - public static final int INITIAL_FIREFIGHTER_COUNT = 0; + public static final int INITIAL_FIREFIGHTER_COUNT = 3; public static final int INITIAL_CLOUD_COUNT = 3; public static final int INITIAL_MOTORIZED_COUNT = 3; diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 767265b176175e8171d8d4c51229016f173d2e2c..8b5c08dc89684de174a1bd32d7851e432430a13c 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -93,6 +93,10 @@ public class Controller { { return ViewElement.MOTORIZED; } + if(element instanceof Mountain) + { + return ViewElement.MOUNTAIN; + } } return ViewElement.EMPTY; diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java index 9a403ac16a13f0db51f491dc7433a78521c80f2e..c17510824ac41bf28a02ff347205b55801c3672e 100644 --- a/src/main/java/model/BoardElement.java +++ b/src/main/java/model/BoardElement.java @@ -16,10 +16,6 @@ public abstract class BoardElement implements ModelElement{ public void setPosition(Position position) { this.position = position; } - public boolean isAtPosition(Position position) { - return this.position.equals(position); - } - public abstract String getType(); // Ajout de la méthode abstraite diff --git a/src/main/java/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java index d5195ecbba9119f20075394a02a0a5b90a74abca..4e5debedc6ee6ad8cc8d4f7083b3ecfbda5393f4 100644 --- a/src/main/java/model/BoardFireFighterBehavior.java +++ b/src/main/java/model/BoardFireFighterBehavior.java @@ -16,6 +16,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{ private final ElementFactory<Cloud> cloudFactory; private final ElementFactory<MotorizedFireFighter> motorizedFactory; private List<Position> cloudPositions; + private final Map<Position, Terrain> terrainMap = new HashMap<>(); private int step; public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory ,ElementFactory<FireFighter> firefighterFactory, @@ -55,6 +56,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{ for (MotorizedFireFighter motorizedFirefighter : motorizedFirefighters) { motorizedFighters.add(motorizedFirefighter.getPosition()); } + generateMountainBlocks(rowCount, columnCount); } @@ -218,4 +220,49 @@ public class BoardFireFighterBehavior implements BoardBehavior{ public List<Position> getMotorizedFighters() { return motorizedFighters; } + private void generateMountainBlocks(int rowCount, int columnCount) { + Random random = new Random(); + int maxMountains = 5; // Par exemple, générer 5 blocs de montagnes + int blockSize = 4; // Taille du bloc de montagnes (4 cases) + + for (int i = 0; i < maxMountains; i++) { + // Générer un coin aléatoire pour chaque bloc de montagne (en s'assurant que les blocs ne dépassent pas la grille) + int startRow = random.nextInt(rowCount - 1); // -1 pour éviter le débordement + int startCol = random.nextInt(columnCount - 1); + + // Vérifier si les cases sont libres avant d'y placer une montagne + if (canPlaceMountainBlock(startRow, startCol)) { + // Placer les montagnes sur la grille + placeMountainBlock(startRow, startCol); + } + } + } + + private boolean canPlaceMountainBlock(int startRow, int startCol) { + // Vérifier si les 4 cases sont libres + for (int row = startRow; row < startRow + 2; row++) { + for (int col = startCol; col < startCol + 2; col++) { + Position pos = new Position(row, col); + if (terrainMap.containsKey(pos)) { + return false; // Une case est déjà occupée + } + } + } + return true; // Toutes les cases sont libres + } + + private void placeMountainBlock(int startRow, int startCol) { + // Placer les 4 cases de montagne + for (int row = startRow; row < startRow + 2; row++) { + for (int col = startCol; col < startCol + 2; col++) { + Position pos = new Position(row, col); + terrainMap.put(pos, new Mountain(pos)); + } + } + } + + public Map<Position, Terrain> getTerrainMap() { + return terrainMap; + } + } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 04b2acfe41b488e680720770f6cb6dc908db1a70..43a164ec19d71b6238f82c832fa251b264760e42 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -64,6 +64,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { .filter(pos -> pos.isAtPosition(position)) .forEach(pos -> result.add(new MotorizedFireFighter(pos))); + behavior.getTerrainMap().forEach((pos, value) -> { + if (pos.isAtPosition(position) && value instanceof Mountain) { + result.add((Mountain) value); // Ajouter uniquement un objet Mountain + } + }); + return result; } diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/MotorizedFireFighter.java index 4a88631dea86584bd0caac93644c8649a77bb8f0..4a1fe7ef57d1c180d5ce890c22ca813730664152 100644 --- a/src/main/java/model/MotorizedFireFighter.java +++ b/src/main/java/model/MotorizedFireFighter.java @@ -11,6 +11,7 @@ public class MotorizedFireFighter extends BoardElement{ super(position); } + @Override public String getType() { return "MotorizedFireFighter"; diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/Mountain.java new file mode 100644 index 0000000000000000000000000000000000000000..ddc825c8b30eb7d31ac2103d728d8f6ddc855bd4 --- /dev/null +++ b/src/main/java/model/Mountain.java @@ -0,0 +1,29 @@ +package model; + +import util.Position; + +public class Mountain extends BoardElement implements Terrain { + + public Mountain(Position position) { + super(position); + } + + @Override + public String getType() { + return null; + } + + @Override + public String toString() { + return null; + } + @Override + public boolean isTraversableByFire() { + return false; // Les montagnes ne sont pas franchissables par le feu + } + + @Override + public boolean isTraversableByFirefighter() { + return false; // Les pompiers ne peuvent pas passer non plus + } +} diff --git a/src/main/java/model/Terrain.java b/src/main/java/model/Terrain.java new file mode 100644 index 0000000000000000000000000000000000000000..bc195166771072bfc1dbf44327a6b35973b4a078 --- /dev/null +++ b/src/main/java/model/Terrain.java @@ -0,0 +1,8 @@ +package model; + + +public interface Terrain { + boolean isTraversableByFire(); + boolean isTraversableByFirefighter(); +} +