diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index fbbec4bc8173cedc3afbb4b7ab14acb0997cbb50..f10fd04142434519de6368f2e833b6702350f0ae 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 98093e015bf73252d37edf85423197b5ea764caa..e4f51e9faead07a0f1f83c5970079a354f89b994 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 ba6fa9175ae3eaaad41652ce0faab1d37466bfcf..1b22c4c04236ef28508582721ff483d20c89209a 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 6a4ef9dcc1250cfe5c5414c2a5ada998cf6bca97..428592d54cd6781c1f8877ddd9406a7b01da33b7 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 e6c74ff88440a2ff33bb4e0843527d65ea3ab492..b586e8df05334b794db6a4112fc7f256a1c7430b 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 4f01d48e5400a253886033ccfa8fd4dacb0c21af..dbf9367bd91aea24327359fb883ea40ecc894897 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 727feaf679c59fc947283e1a9e98fc8f9760413b..fca1aceeefd58a020e52c53c7a879dadb8f147ed 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 de853c12783d647992fcf4e7ca958c1a6377670b..9eb1bc490d02495ed5a13b135b23e4e02aa9327b 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/BoardFireFighterBehavior.class b/build/classes/java/main/model/BoardFireFighterBehavior.class index 9151be9a956136fe5fe3a0fd07783409fd570deb..07204c3c3f123f9b13f3a54f72d36e3148c48a95 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 1705f8be13c2665ff1c36c425c8182c0e8943fe3..dfcfecbdaae1ba217fa185d9de40690d2b2a8d44 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/view/ViewElement.class b/build/classes/java/main/view/ViewElement.class index bb1c39d028cb3e62caebe67d080cf68269b12ae6..c05e30406fdf683dec6eff659e3688f0078e4faf 100644 Binary files a/build/classes/java/main/view/ViewElement.class and b/build/classes/java/main/view/ViewElement.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 0fdd7c3d56d8dacd1766eb2295a3b168273368b0..6edad65d0af5f26b7273ec9d559b16a75bf8eb89 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 8449ea1b5a6ed6f62d3a552b74f5f6c6c07ec895..280ec62c05c645c8291c85f8ec2d7c08b8bc4da4 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -21,6 +21,7 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIREFIGHTER_COUNT = 3; public static final int INITIAL_CLOUD_COUNT = 3; public static final int INITIAL_MOTORIZED_COUNT = 3; + public static final int INITIAL_ROCKY_COUNT = 3; private Stage primaryStage; private Parent view; @@ -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_MOTORIZED_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT,INITIAL_MOTORIZED_COUNT,INITIAL_ROCKY_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index c306d799ca76c731d7415dd67bfec1969e1cd756..32501c7095444f795c4727ab1732f414ac010071 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -101,6 +101,10 @@ public class Controller { { return ViewElement.ROAD; } + if (element instanceof Rocky) + { + return ViewElement.ROCKY; + } } return ViewElement.EMPTY; @@ -140,9 +144,9 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud,int initialMotorized) { + int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud,int initialMotorized,int initialRocky) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloud,initialMotorized)); + this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloud,initialMotorized,initialRocky)); repaintGrid(); } diff --git a/src/main/java/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java index 5daf21cf6daf7f26d2cbbc44b13b89e5cf803de1..ccd6b9a2d245c0b596ba670e20b16a72557f4b39 100644 --- a/src/main/java/model/BoardFireFighterBehavior.java +++ b/src/main/java/model/BoardFireFighterBehavior.java @@ -10,23 +10,26 @@ public class BoardFireFighterBehavior implements BoardBehavior{ private final Map<Position, List<Position>> neighbors; private List<Position> firefighterPositions; private List<Position> motorizedFighters; + private List<Position> rocky; private Set<Position> firePositions; private final ElementFactory<FireFighter> firefighterFactory; private final ElementFactory<Fire> fireFactory; private final ElementFactory<Cloud> cloudFactory; private final ElementFactory<MotorizedFireFighter> motorizedFactory; + private ElementFactory<Rocky> rockyFactory; 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, - ElementFactory<Cloud> cloudFactory,ElementFactory<MotorizedFireFighter> motorizedFactory) { + ElementFactory<Cloud> cloudFactory,ElementFactory<MotorizedFireFighter> motorizedFactory,ElementFactory<Rocky> rockyFactory) { this.step=0; this.neighbors = neighbors; this.firefighterFactory = firefighterFactory; this.fireFactory = fireFactory; this.cloudFactory=cloudFactory; this.motorizedFactory=motorizedFactory; + this.rockyFactory=rockyFactory; } public void initializeElements(int rowCount, int columnCount) { @@ -44,6 +47,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{ firefighterPositions.add(firefighter.getPosition()); } + // Nuages cloudPositions = new ArrayList<>(); List<Cloud> clouds = cloudFactory.createElements(rowCount, columnCount); @@ -56,6 +60,13 @@ public class BoardFireFighterBehavior implements BoardBehavior{ for (MotorizedFireFighter motorizedFirefighter : motorizedFirefighters) { motorizedFighters.add(motorizedFirefighter.getPosition()); } + // Rocky + rocky = new ArrayList<>(); + List<Rocky> rockies = rockyFactory.createElements(rowCount, columnCount); + for (Rocky rockyElement : rockies) { + rocky.add(rockyElement.getPosition()); + } + generateMountainBlocks(rowCount, columnCount); generateRoads(rowCount,columnCount); @@ -330,6 +341,10 @@ public class BoardFireFighterBehavior implements BoardBehavior{ if (terrainMap.get(position) != null && !cloudPositions.contains(position)) { return false; // Impossible de franchir une montagne, sauf pour un nuage } + if(rocky.contains(position)) + { + return Rocky.canFirePropagate(); + } return true; // La position est traversable } @@ -374,9 +389,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{ } } - - - - - + public List<Position> getRocky() { + return rocky; + } } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 887afb218a5f7c5097f98cefbcf9daa688a624cb..cf8e4e0631f8cf29a6c92ba9d77fa11de177166b 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -11,12 +11,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final Random randomGenerator = new Random(); - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud,int initialMotorized) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloud,int initialMotorized, + int initialRocky) { Map<Position, List<Position>> neighbors = initializeNeighbors(rowCount, columnCount); this.properties = new BoardFirefighterProperties(rowCount, columnCount); this.behavior = new BoardFireFighterBehavior(neighbors,new FireFactory(randomGenerator,initialFireCount),new FirefighterFactory(randomGenerator,initialFirefighterCount), - new CloudFactory(randomGenerator,initialCloud),new MotorizedFactory(randomGenerator,initialMotorized)); + new CloudFactory(randomGenerator,initialCloud),new MotorizedFactory(randomGenerator,initialMotorized),new RockyFactory(randomGenerator,initialRocky)); behavior.initializeElements( properties.rowCount(), properties.columnCount()); } @@ -74,6 +75,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { result.add((Road) value); // Ajouter uniquement un objet Mountain } }); + // Filtrage des éléments Rocky + behavior.getRocky().stream() + .filter(pos -> pos.isAtPosition(position)) + .forEach(pos -> result.add(new Rocky(pos))); return result; } @@ -97,7 +102,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { behavior.getCloudPositions().add(position); } else if (element instanceof MotorizedFireFighter) { behavior.getMotorizedFighters().add(position); - + }else if(element instanceof Rocky) + { + behavior.getRocky().add(position); } } diff --git a/src/main/java/model/Rocky.java b/src/main/java/model/Rocky.java index 1ed23605cb5480b9337c3a0e041708b8449b3605..099fabac4708e5e6ebf7b6acce1c117aa2dd05eb 100644 --- a/src/main/java/model/Rocky.java +++ b/src/main/java/model/Rocky.java @@ -3,10 +3,19 @@ package model; import util.Position; public class Rocky extends BoardElement{ - private final int fireDelay=4; + private static int firePropagationCounter; public Rocky(Position position) { super(position); } + public static boolean canFirePropagate() { + // Le feu ne peut se propager que tous les 4 tours + if (firePropagationCounter >= 4) { + firePropagationCounter = 0; // Reset le compteur + return true; + } + firePropagationCounter++; + return false; + } @Override public String getType() { @@ -17,4 +26,8 @@ public class Rocky extends BoardElement{ public String toString() { return null; } + + public static int getFirePropagationCounter() { + return firePropagationCounter; + } } diff --git a/src/main/java/model/RockyFactory.java b/src/main/java/model/RockyFactory.java index 4c324b802365ea3f652b40ee397377b8dc8ce960..f1f323f7e620babf91dfd76a9911438d2f46f86b 100644 --- a/src/main/java/model/RockyFactory.java +++ b/src/main/java/model/RockyFactory.java @@ -1,4 +1,40 @@ package model; -public class RockyFactory { +import util.Position; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class RockyFactory implements ElementFactory<Rocky>,PositionGenerator{ + private final Random random; + private int count; + + + public RockyFactory(Random random, int count) { + this.random = random; + this.count = count; + } + + @Override + public List<Rocky> createElements(int rowCount, int columnCount) { + List<Rocky> rocky = new ArrayList<>(); + for (int i = 0; i < count; i++) { + Position randomPosition = generateRandomPosition(rowCount, columnCount); + rocky.add(new Rocky(randomPosition)); + } + return rocky; + } + + @Override + public int getCount() { + return count; + } + + @Override + public Position generateRandomPosition(int rowCount, int columnCount) { + int row = random.nextInt(rowCount); + int column = random.nextInt(columnCount); + return new Position(row, column); + } } diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index ae5bb575a728aaa4a5e946c8b064213dc8b401e1..065b1a2e8fc2b380a06924d0251acbf48590e026 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), EMPTY(Color.WHITE) , CLOUD(Color.GRAY),MOTORIZED(Color.BLACK) , MOUNTAIN(Color.GREEN), ROCKY(Color.BLACK), + FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE) , CLOUD(Color.GRAY),MOTORIZED(Color.BLACK) , MOUNTAIN(Color.GREEN), ROCKY(Color.BISQUE), ROAD(Color.BROWN); final Color color; ViewElement(Color color) {