From b40b3c195ab89553edc7b6e4efa84c1e792a57bf Mon Sep 17 00:00:00 2001
From: ousseyn01 <ousseyn.ndiaye9@gmail.com>
Date: Wed, 27 Nov 2024 11:44:00 +0100
Subject: [PATCH] Modification of Cloud because it not works correctly We
 change methods and implements other methods

---
 src/main/java/model/Cloud.java            | 37 +++++++++++------------
 src/main/java/model/FirefighterBoard.java |  5 +--
 2 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
index 99620fd..6e33768 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 e6849c6..e684c39 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++;
 
-- 
GitLab