diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index 99620fdb81b920e24505f9fe576d23d8b100b655..6e33768d746076da1fd701e80f8434dbb4bf178b 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -3,7 +3,6 @@ package model; import util.Position; import java.util.*; -import java.util.Map; public class Cloud { private Position position; @@ -15,32 +14,32 @@ public class Cloud { this.neighbors = neighbors; } - public void moveAndExtinguishFire(Fire fire) { - Position newPosition = moveToNewPosition(); - this.position = newPosition; + // Déplacement du nuage d'une case aléatoire parmi ses voisins + public void move(Fire fire, Set<Position> mountains) { + List<Position> validNeighbors = neighbors.get(position).stream() + .filter(neighbor -> !mountains.contains(neighbor)) // Exclure les montagnes + .toList(); - extinguishNeighboringFires(fire); - } + if (!validNeighbors.isEmpty()) { + this.position = validNeighbors.get(randomGenerator.nextInt(validNeighbors.size())); + } - private Position moveToNewPosition() { - List<Position> neighborsList = neighbors.get(position); - return neighborsList.get((int) (Math.random() * neighborsList.size())); + // Éteindre les feux après déplacement + extinguishFires(fire); } - private void extinguishNeighboringFires(Fire fire) { - List<Position> neighboringPositions = neighbors.get(position); - for (Position neighbor : neighboringPositions) { - if (fire.getFirePositions().contains(neighbor)) { - fire.extinguishFire(neighbor); - } + // Éteint les feux sur la position du nuage et ses voisins + private void extinguishFires(Fire fire) { + // Éteindre le feu à la position actuelle + fire.extinguishFire(position); + + // Éteindre les feux voisins + for (Position neighbor : neighbors.get(position)) { + fire.extinguishFire(neighbor); } } public Position getPosition() { return position; } - - public void extinguishFireCloud(Fire fire) { - fire.getFirePositions().remove(position); - } } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index e6849c6fb8f0a9e1a9f33f78bd6d17c33701e9cd..e684c39bf542508cae5b48f16d81544c00218f48 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -125,8 +125,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } // Déplacer les nuages et éteindre les feux for (Cloud cloud : clouds) { - cloud.moveAndExtinguishFire(fire); - cloud.extinguishFireCloud(fire); + //cloud.moveAndExtinguishFire(fire); + //cloud.extinguishFireCloud(fire); + cloud.move(fire, getMountainPositions()); } step++;