diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin
index 24f92def9427e1eb2fb7fa1d1b80b802329454ce..a8f96d75e06c648f54523535192c0778b5ebbf13 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 b9623e111c2e3519d0d7451ff86d8c40bb498974..82c86cabe8e28e7e1cc8922b1aa181f7d4a721aa 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 e6735fb5271f9b0ac021a90356e43e33b935e1b1..8477a2464b3725af3e04b824f9c1264a39c25f8e 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 1ef521d2fc05d60bf08236e1f7d536db41e93026..3b9fab559fcbf131fd719c12b0635ce3bb71ef8a 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 523eb83b498d61d5ed383b33e97a1e7d6942c023..c8f08e9807b5c74a3c7192f0c0b45de7f17b08b8 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 4010607332a77182bc40b7835e59dd12503bbd11..59300afb8dff4a66b15052eed24bbf756b523406 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 83f842461bbbc81062b3633e7a0bcc6a515f6fa3..727feaf679c59fc947283e1a9e98fc8f9760413b 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/model/BoardFireFighterBehavior.class b/build/classes/java/main/model/BoardFireFighterBehavior.class
index c98e1d5ce384655a278c407abf4fad53ad459ff8..bc326b5aa19727898f4ac7f353a0696dbd3ae8df 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/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index 1152e60afc282930b6f0635125dafd3d642ca116..a722c5845a8b0a1dd2e4f036f32407b625b41c76 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 bff0ea47cef5a22420975952fc0c7b4ba1f89bec..8449ea1b5a6ed6f62d3a552b74f5f6c6c07ec895 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -17,7 +17,7 @@ public class SimulatorApplication extends javafx.application.Application {
   private static final int COLUMN_COUNT = 20;
   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_FIRE_COUNT = 4;
   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/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java
index 4e5debedc6ee6ad8cc8d4f7083b3ecfbda5393f4..f1a4ad96655ce8cf7fa9e5fc3656b11f394b0de3 100644
--- a/src/main/java/model/BoardFireFighterBehavior.java
+++ b/src/main/java/model/BoardFireFighterBehavior.java
@@ -65,35 +65,68 @@ public class BoardFireFighterBehavior implements BoardBehavior{
         List<Position> modifiedPositions = new ArrayList<>();
         if (step % 2 == 0) {
             List<Position> newFirePositions = new ArrayList<>();
+
+            // Pour chaque feu existant, vérifier ses voisins
             for (Position fire : firePositions) {
-                newFirePositions.addAll(neighbors.get(fire));
+                // Si la position voisine est libre (non occupée par un feu ou un pompier), le feu peut se propager
+                for (Position neighbor : neighbors.get(fire)) {
+                    // Vérifier si le feu peut se propager à cette position (pas de feu déjà là et pas un terrain bloqué)
+                    if (canMoveTo(neighbor, firePositions, firefighterPositions) && !firePositions.contains(neighbor)) {
+                        newFirePositions.add(neighbor);
+                    }
+                }
             }
+
+            // Ajouter les nouvelles positions de feu à la liste des feux existants
             firePositions.addAll(newFirePositions);
             modifiedPositions.addAll(newFirePositions);
         }
         return modifiedPositions;
     }
 
+
     public List<Position> updateFirefighters() {
         List<Position> modifiedPositions = new ArrayList<>();
         List<Position> newFirefighterPositions = new ArrayList<>();
+
         for (Position firefighterPosition : firefighterPositions) {
+            // Calcul de la position vers laquelle le pompier devrait se déplacer
             Position newFirefighterPosition = targetStrategy.neighborClosestToTarget(firefighterPosition, firePositions, neighbors);
-            newFirefighterPositions.add(newFirefighterPosition);
-            extinguish(newFirefighterPosition);
-            modifiedPositions.add(firefighterPosition);
-            modifiedPositions.add(newFirefighterPosition);
-
-            List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
-                    .filter(firePositions::contains).toList();
-            for (Position firePosition : neighborFirePositions) {
-                extinguish(firePosition);
+
+            // Vérification si la position cible est valide pour le mouvement
+            if (canMoveTo(newFirefighterPosition, firePositions, firefighterPositions)) {
+                // Si le déplacement est valide, on met à jour la position du pompier
+                newFirefighterPositions.add(newFirefighterPosition);
+
+                // Éteindre le feu à la nouvelle position
+                extinguish(newFirefighterPosition);
+                modifiedPositions.add(firefighterPosition);
+                modifiedPositions.add(newFirefighterPosition);
+
+                // Vérification des voisins et extinction des feux voisins
+                List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
+                        .filter(firePositions::contains).toList();
+
+                // Log pour débogage
+                System.out.println("Pompiers se déplacent de " + firefighterPosition + " vers " + newFirefighterPosition);
+
+                // Éteindre les feux voisins
+                for (Position firePosition : neighborFirePositions) {
+                    extinguish(firePosition);
+                    modifiedPositions.add(firePosition);  // Ajout des feux éteints dans la liste des positions modifiées
+                }
+            } else {
+                // Si la position n'est pas valide, le pompier reste sur place
+                newFirefighterPositions.add(firefighterPosition);
+                System.out.println("Pompier ne peut pas se déplacer à " + newFirefighterPosition + ", il reste à " + firefighterPosition);
             }
-            modifiedPositions.addAll(neighborFirePositions);
         }
+
+        // Mettre à jour la liste des positions des pompiers
         firefighterPositions = newFirefighterPositions;
         return modifiedPositions;
     }
+
     public List<Position> updateMotorized() {
         List<Position> modifiedPositions = new ArrayList<>();
         List<Position> newPositions = new ArrayList<>();
@@ -201,18 +234,30 @@ public class BoardFireFighterBehavior implements BoardBehavior{
             // Déplacement aléatoire
             List<Position> possibleMoves = neighbors.get(cloudPosition);
             Position newCloudPosition = possibleMoves.get(new Random().nextInt(possibleMoves.size()));
+
+            // Vérification que le nuage ne se déplace pas vers une montagne
+            if (!canMoveTo(newCloudPosition, firePositions, firefighterPositions)) {
+                continue;  // Si la position est invalide ou une montagne, le nuage reste sur place
+            }
+
             newCloudPositions.add(newCloudPosition);
 
-            // Éteindre le feu à la position du nuage
-            extinguish(newCloudPosition);
-            modifiedPositions.add(cloudPosition);
-            modifiedPositions.add(newCloudPosition);
+            // Éteindre le feu à la position du nuage (le nuage mange le feu)
+            if (firePositions.contains(newCloudPosition)) {
+                extinguish(newCloudPosition);  // Supprimer le feu
+                modifiedPositions.add(newCloudPosition);  // Ajouter la position du feu éteint aux positions modifiées
+                System.out.println("Feu éteint par nuage à : " + newCloudPosition);
+            }
+
+            modifiedPositions.add(cloudPosition);  // Ajouter l'ancienne position du nuage
+            modifiedPositions.add(newCloudPosition);  // Ajouter la nouvelle position du nuage
         }
 
         cloudPositions = newCloudPositions;
         return modifiedPositions;
     }
 
+
     public List<Position> getCloudPositions() {
         return cloudPositions;
     }
@@ -264,5 +309,32 @@ public class BoardFireFighterBehavior implements BoardBehavior{
     public Map<Position, Terrain> getTerrainMap() {
         return terrainMap;
     }
+    public boolean canMoveTo(Position position, Set<Position> firePositions, List<Position> firefighterPositions) {
+        // Vérifie si la position est hors des limites (par exemple, en dehors de la grille ou inaccessible)
+        if (!neighbors.containsKey(position)) {
+            return false;
+        }
+
+        // Si la position est occupée par un feu et que le terrain n'est pas traversable par le feu
+        if (firePositions.contains(position)) {
+            return false;  // Impossible de traverser une case contenant un feu
+        }
+
+        // Si la position est occupée par un pompier et que le pompier ne peut pas franchir
+        if (firefighterPositions.contains(position)) {
+            return false;  // Impossible de se déplacer sur la position d'un autre pompier
+        }
+
+        // Si la position est une montagne, aucun élément ne peut la franchir sauf les nuages
+        if (terrainMap.get(position) != null && !cloudPositions.contains(position)) {
+            return false;  // Impossible de franchir une montagne, sauf pour un nuage
+        }
+
+        return true;  // La position est traversable
+    }
+
+
+
+
 
 }