diff --git a/src/main/java/model/FireManager.java b/src/main/java/model/FireManager.java index 71d9659707b4d832d1adce2c928fc586f2f90b81..0ffd5df6a34cae0e5cd7e2702847a50be7fc0c1e 100644 --- a/src/main/java/model/FireManager.java +++ b/src/main/java/model/FireManager.java @@ -6,9 +6,12 @@ import java.util.*; public class FireManager implements FireBehavior, FireProperties{ private Set<Position> firePositions; + private FirefighterManager firefighterManager; - public FireManager(Set<Position> firePositions) { + public FireManager(Set<Position> firePositions,FirefighterManager firefighterManager) { this.firePositions = firePositions; + this.firefighterManager=firefighterManager; + } // Initialize fire positions randomly @@ -22,10 +25,11 @@ public class FireManager implements FireBehavior, FireProperties{ @Override public List<Position> updateFires(int step, Map<Position, List<Position>> neighbors) { List<Position> newFirePositions = new ArrayList<>(); - if (step % 2 == 0) { // Fires spread every other step + if (step % 2 == 0) { // Le feu se propage tous les deux pas for (Position fire : firePositions) { for (Position neighbor : neighbors.get(fire)) { - if (!firePositions.contains(neighbor)) { + // Vérifier si le voisin est déjà en feu ou s'il y a un pompier + if (!firePositions.contains(neighbor) && !firefighterManager.getFirefighterPositions().contains(neighbor)) { newFirePositions.add(neighbor); } } @@ -34,6 +38,8 @@ public class FireManager implements FireBehavior, FireProperties{ } return newFirePositions; } + + // Extinguish a fire at a specific position @Override public void extinguishFire(Position position) { @@ -47,4 +53,5 @@ public class FireManager implements FireBehavior, FireProperties{ @Override public Set<Position> getFirePosition() { return new HashSet<>(firePositions);} + } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 4f5681f6e8a9cdca5f91889d6a200f0ba0773b56..e195363c0514ffa0d356b8c86120b26b6a8d0d60 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -28,8 +28,9 @@ public class FirefighterBoard implements BoardBehavior<List<ModelElement>> ,Boa initializePositions(); initializeNeighbors(); // Initialize manager - this.fireManager = new FireManager(new HashSet<>()); - this.firefighterManager = new FirefighterManager(new ArrayList<>(), fireManager); + this.fireManager = new FireManager(new HashSet<>(),new FirefighterManager(new ArrayList<>())); + this.firefighterManager = new FirefighterManager(new ArrayList<>()); + this.firefighterManager.setFireManager(fireManager); initializeElements(); } diff --git a/src/main/java/model/FirefighterManager.java b/src/main/java/model/FirefighterManager.java index 386618393edd6d1be5a2eb96478d54a407081d5a..9cce634954552be7201fb2588e66122872ec5e49 100644 --- a/src/main/java/model/FirefighterManager.java +++ b/src/main/java/model/FirefighterManager.java @@ -12,9 +12,12 @@ public class FirefighterManager implements FirefighterBehavior, FirefighterPrope private List<Position> firefighterPositions; FireManager fireManager; - public FirefighterManager(List<Position> firefighterPositions, FireManager fireManager) { + public void setFireManager(FireManager fireManager) { + this.fireManager = fireManager; + } + + public FirefighterManager(List<Position> firefighterPositions) { this.firefighterPositions = firefighterPositions; - this.fireManager=fireManager; } @Override @@ -48,8 +51,10 @@ public class FirefighterManager implements FirefighterBehavior, FirefighterPrope Position newFirefighterPosition = moveToTarget(firefighterPosition, fireManager.getFirePosition(), neighbors); setFirefighterPosition(firefighterPosition, newFirefighterPosition); - // Extinction du feu - extinguishFire(newFirefighterPosition); + // Vérifier si un feu est à la nouvelle position et l'éteindre + if (fireManager.isOnFire(newFirefighterPosition)) { + extinguishFire(newFirefighterPosition); + } modifiedPositions.add(firefighterPosition); modifiedPositions.add(newFirefighterPosition); @@ -57,4 +62,5 @@ public class FirefighterManager implements FirefighterBehavior, FirefighterPrope return modifiedPositions; } + }