diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin
index 258dac4ebb4688af1595b78935cac62b354c5f44..11bf550ba77e9f78efd401a6ec26338b1fac3249 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 4183dedaae5296d826df03e9deec85e1598a610b..dac92f57548c665f37e15c04f78feba376879cd2 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 85a7f8f9d153d181a070bf19d7ed561221db400e..e9fad2f6bcfd39c3b27f49abca2b0dcc20b0fac5 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 88ad37ae3bc8ad3ce89f4d66df6309eb6bd2583f..26e1d0321598155df152cbf5c7712a003606b051 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 42c05b4bab676628bd5ab004bcfbf2c0323d1145..7a4b916756e0e3aa6a61e0e514fc79c039d6db72 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 faa428ff1d91794eee99a8fa0404b0c22b3d5d17..e5c2ce6b62b46b091c65457a8a7b7c6273c14acb 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/build/classes/java/main/model/BoardFireFighterBehavior.class b/build/classes/java/main/model/BoardFireFighterBehavior.class
index cc5d3fe274ea94156143b99a0e3978ab018d05d0..3e74039d1db131823cc7bf55e8726d520926bf0a 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 ebf0c3e8c4205ef081bcca66d853272df961b674..5668462328eb03a346c50effd0ac3994bc3a02a7 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 86a80df8170c6a9d79066186cd5255f7bbbbe0c8..1e8628999cc6101c22f3f65568027fa8214a343a 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 e96d759e4acbb4033422ca03cceed662e81e8123..a6a40cfe8ade29066b0b07d44bd5acba8dc9c2fc 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/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java
index 0cbbaf91b1f847f4c2e1e7cd5eabca5c5634c82c..f338a758a6aa99f869db2a9a8cf83c5649c6f1c9 100644
--- a/src/main/java/model/BoardFireFighterBehavior.java
+++ b/src/main/java/model/BoardFireFighterBehavior.java
@@ -18,6 +18,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
     static Movements fireFighterMovements;
     static Movements cloudMovements;
     static Movements motorizedMovements;
+    private ElementGenerator moutainGenerator;
 
     public BoardFireFighterBehavior(Map<Position, List<Position>> neighbors, ElementFactory<Fire> fireFactory ,ElementFactory<FireFighter> firefighterFactory,
                                     ElementFactory<Cloud> cloudFactory,ElementFactory<MotorizedFireFighter> motorizedFactory,ElementFactory<Rocky> rockyFactory) {
@@ -28,6 +29,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
         fireFighterMovements=new FireFighterMovements(firefighterFactory);
         cloudMovements=new CloudMovements(cloudFactory);
         motorizedMovements=new MotorizedMovements(motorizedFactory);
+        moutainGenerator=new MountainGenerator();
     }
 
     public void initializeElements(int rowCount, int columnCount) {
@@ -43,7 +45,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
             rocky.add(rockyElement.getPosition());
         }
 
-        generateMountainBlocks(rowCount, columnCount);
+        moutainGenerator.generateElement(rowCount,columnCount);
         generateRoads(rowCount,columnCount);
 
     }
@@ -55,12 +57,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
     public static void extinguish(Position position) {
         fireMovements.getPositions().remove(position);
 
-        // Si la position est une montagne, elle cesse d'être une montagne
-        if (rocky.contains(position)) {
-            rocky.remove(position);
-            terrainMap.remove(position); // Optionnel, si vous utilisez terrainMap pour gérer les types de terrain
-            System.out.println("Une montagne a brûlé à la position : " + position);
-        }
+
     }
 
 
@@ -105,53 +102,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
     }
 
 
-    public Collection<Position> getCloudPositions() {
-        return cloudMovements.getPositions();
-    }
-
-    public List<Position> getMotorizedFighters() {
-        return (List<Position>) motorizedMovements.getPositions();
-    }
-    private void generateMountainBlocks(int rowCount, int columnCount) {
-        Random random = new Random();
-        int maxMountains = 5; // Par exemple, générer 5 blocs de montagnes
-        int blockSize = 4; // Taille du bloc de montagnes (4 cases)
-
-        for (int i = 0; i < maxMountains; i++) {
-            // Générer un coin aléatoire pour chaque bloc de montagne (en s'assurant que les blocs ne dépassent pas la grille)
-            int startRow = random.nextInt(rowCount - 1);  // -1 pour éviter le débordement
-            int startCol = random.nextInt(columnCount - 1);
-
-            // Vérifier si les cases sont libres avant d'y placer une montagne
-            if (canPlaceMountainBlock(startRow, startCol)) {
-                // Placer les montagnes sur la grille
-                placeMountainBlock(startRow, startCol);
-            }
-        }
-    }
-
-    private boolean canPlaceMountainBlock(int startRow, int startCol) {
-        // Vérifier si les 4 cases sont libres
-        for (int row = startRow; row < startRow + 2; row++) {
-            for (int col = startCol; col < startCol + 2; col++) {
-                Position pos = new Position(row, col);
-                if (terrainMap.containsKey(pos)) {
-                    return false; // Une case est déjà occupée
-                }
-            }
-        }
-        return true; // Toutes les cases sont libres
-    }
 
-    private void placeMountainBlock(int startRow, int startCol) {
-        // Placer les 4 cases de montagne
-        for (int row = startRow; row < startRow + 2; row++) {
-            for (int col = startCol; col < startCol + 2; col++) {
-                Position pos = new Position(row, col);
-                terrainMap.put(pos, new Mountain(pos));
-            }
-        }
-    }
     /**
      * Éteint les feux à proximité d'une position donnée.
      *
@@ -170,7 +121,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
         }
     }
 
-    public Map<Position, Terrain> getTerrainMap() {
+    public static Map<Position, Terrain> getTerrainMap() {
         return terrainMap;
     }
     public static boolean canMoveTo(Position position, Set<Position> firePositions, List<Position> firefighterPositions) {
@@ -180,15 +131,10 @@ public class BoardFireFighterBehavior implements BoardBehavior{
         }
 
         // 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
+        if(cloudMovements.getPositions().contains(position))
+        {
+            return false;
         }
-
         // Si la position est une montagne, aucun élément ne peut la franchir sauf les nuages
         if (terrainMap.get(position) != null && !cloudMovements.getPositions().contains(position)) {
             return false;  // Impossible de franchir une montagne, sauf pour un nuage
@@ -275,4 +221,13 @@ public class BoardFireFighterBehavior implements BoardBehavior{
     public static Collection<Position> getFirefighterPositions() {
         return fireFighterMovements.getPositions();
     }
+
+    public Collection<Position> getCloudPositions() {
+        return cloudMovements.getPositions();
+    }
+
+    public List<Position> getMotorizedFighters() {
+        return (List<Position>) motorizedMovements.getPositions();
+    }
+
 }
diff --git a/src/main/java/model/CloudMovements.java b/src/main/java/model/CloudMovements.java
index 5e186aaebc89973da5229f2fa539cea959e6fa38..849db9f5b5ffcd840c23c83cde35088a6ae2c8c2 100644
--- a/src/main/java/model/CloudMovements.java
+++ b/src/main/java/model/CloudMovements.java
@@ -29,30 +29,39 @@ public class CloudMovements implements Movements{
         List<Position> modifiedPositions = new ArrayList<>();
         List<Position> newCloudPositions = new ArrayList<>();
 
+        // Copier les positions actuelles des feux pour éviter les incohérences pendant l'itération
+        Set<Position> firePositions = new HashSet<>(fireMovements.getPositions());
+
         for (Position cloudPosition : cloudPositions) {
-            // Déplacement aléatoire
+            // Déplacement aléatoire parmi les voisins
             List<Position> possibleMoves = getNeighbors().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, (Set<Position>) fireMovements.getPositions(), (List<Position>) fireFighterMovements.getPositions())) {
-                continue;  // Si la position est invalide ou une montagne, le nuage reste sur place
+            // Vérification que le nuage ne se déplace pas vers une montagne ou une position invalide
+            if (!canMoveTo(newCloudPosition, firePositions, (List<Position>) getFirefighterPositions())) {
+                newCloudPositions.add(cloudPosition);  // Le nuage reste sur place
+                continue;
             }
 
+            // Ajouter la nouvelle position du nuage
             newCloudPositions.add(newCloudPosition);
 
-            // Éteindre le feu à la position du nuage (le nuage mange le feu)
-            if (fireMovements.getPositions().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);
+            // Si la nouvelle position contient un feu, l'éteindre
+            if (firePositions.contains(newCloudPosition)) {
+                extinguish(newCloudPosition);  // Extinction du feu
+                firePositions.remove(newCloudPosition);  // Mise à jour locale des positions des feux
+                modifiedPositions.add(newCloudPosition);
+                System.out.println("Feu éteint par un nuage à : " + newCloudPosition);
             }
 
-            modifiedPositions.add(cloudPosition);  // Ajouter l'ancienne position du nuage
-            modifiedPositions.add(newCloudPosition);  // Ajouter la nouvelle position du nuage
+            // Ajouter les positions modifiées pour le nuage
+            modifiedPositions.add(cloudPosition);
+            modifiedPositions.add(newCloudPosition);
         }
 
+        // Mise à jour des positions des nuages
         cloudPositions = newCloudPositions;
+
         return modifiedPositions;
     }
 
diff --git a/src/main/java/model/MountainGenerator.java b/src/main/java/model/MountainGenerator.java
index 789b177a3a553a3f2eb6b6ab2659c644a7f41ada..dd98994fd367290a380a1e7a0f1341eedf53bfd6 100644
--- a/src/main/java/model/MountainGenerator.java
+++ b/src/main/java/model/MountainGenerator.java
@@ -1,8 +1,51 @@
 package model;
 
+import util.Position;
+
+import java.util.Random;
+
+import static model.BoardFireFighterBehavior.getTerrainMap;
+
 public class MountainGenerator implements ElementGenerator{
     @Override
     public void generateElement(int rowCount, int columnCount) {
+        Random random = new Random();
+        int maxMountains = 5; // Par exemple, générer 5 blocs de montagnes
+        int blockSize = 4; // Taille du bloc de montagnes (4 cases)
+
+        for (int i = 0; i < maxMountains; i++) {
+            // Générer un coin aléatoire pour chaque bloc de montagne (en s'assurant que les blocs ne dépassent pas la grille)
+            int startRow = random.nextInt(rowCount - 1);  // -1 pour éviter le débordement
+            int startCol = random.nextInt(columnCount - 1);
+
+            // Vérifier si les cases sont libres avant d'y placer une montagne
+            if (canPlaceMountainBlock(startRow, startCol)) {
+                // Placer les montagnes sur la grille
+                placeMountainBlock(startRow, startCol);
+            }
+        }
+
+    }
+    private boolean canPlaceMountainBlock(int startRow, int startCol) {
+        // Vérifier si les 4 cases sont libres
+        for (int row = startRow; row < startRow + 2; row++) {
+            for (int col = startCol; col < startCol + 2; col++) {
+                Position pos = new Position(row, col);
+                if (getTerrainMap().containsKey(pos)) {
+                    return false; // Une case est déjà occupée
+                }
+            }
+        }
+        return true; // Toutes les cases sont libres
+    }
 
+    private void placeMountainBlock(int startRow, int startCol) {
+        // Placer les 4 cases de montagne
+        for (int row = startRow; row < startRow + 2; row++) {
+            for (int col = startCol; col < startCol + 2; col++) {
+                Position pos = new Position(row, col);
+                getTerrainMap().put(pos, new Mountain(pos));
+            }
+        }
     }
 }
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index 642af23a3bfdcd08623f9ed95283535c8c342880..2b61e3d5df546fee4a091256bc1b6e37005b88df 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.AQUA), FIRE(Color.RED), EMPTY(Color.WHITE) ,  CLOUD(Color.GRAY),MOTORIZED(Color.DARKBLUE) , MOUNTAIN(Color.DARKGRAY), ROCKY(Color.GREEN),
+  FIREFIGHTER(Color.AQUA), FIRE(Color.RED), EMPTY(Color.WHITE) ,  CLOUD(Color.PINK),MOTORIZED(Color.DARKBLUE) , MOUNTAIN(Color.DARKGRAY), ROCKY(Color.GREEN),
   ROAD(Color.BLACK);
   final Color color;
   ViewElement(Color color) {