diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index e7c14c967db39f34f8355a4f2dfb8182b8d24ed8..cf042868aaad396297f8fd541f4668f2819d4134 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -19,7 +19,7 @@ public class SimulatorApplication extends javafx.application.Application {
   private static final int BOX_HEIGHT = 50;
   public static final int INITIAL_FIRE_COUNT = 15;
   public static final int INITIAL_FIREFIGHTER_COUNT = 10;
-  public static final int INITIAL_CLOUD_COUNT = 1;
+  public static final int INITIAL_CLOUD_COUNT = 5;
 
 
   private Stage primaryStage;
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index d31f549065a0f4187e222364a6025766ee8c27d1..0c9dfb7942e6772ea0f6c2dae5c83127312c8716 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -82,15 +82,19 @@ public class Controller {
   }
 
   private ViewElement getViewElement(List<ModelElement> squareState) {
-    if(squareState.contains(ModelElement.FIREFIGHTER)){
+    if (squareState.contains(ModelElement.FIREFIGHTER)) {
       return ViewElement.FIREFIGHTER;
     }
-    if (squareState.contains(ModelElement.FIRE)){
+    if (squareState.contains(ModelElement.FIRE)) {
       return ViewElement.FIRE;
     }
+    if (squareState.contains(ModelElement.CLOUD)) {  // Assurez-vous que le modèle inclut bien le nuage
+      return ViewElement.CLOUD;
+    }
     return ViewElement.EMPTY;
   }
 
+
   private void initializeTimeline() {
     Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS);
     EventHandler<ActionEvent> eventHandler =
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
index cbda767167a71d5dfb2902d1c8c466ccc56ac47a..b517e5010a5a0a9d7447c3d0a18e93cf0e7df848 100644
--- a/src/main/java/model/Cloud.java
+++ b/src/main/java/model/Cloud.java
@@ -4,19 +4,19 @@ import util.Position;
 
 public class Cloud {
 
-
     private Position position;
 
-    public Cloud(Position position){
+    public Cloud(Position position) {
         this.position = position;
     }
 
-
     public Position getPosition() {
         return position;
     }
 
-
+    public void setPosition(Position position) {
+        this.position = position;
+    }
 
 
 }
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 224f0ba0ccb6858f742b74749383856de42cd3b9..b60c9ae13f8c843e33f8167fce5390221e548481 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -70,6 +70,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     for (int index = 0; index < initialFirefighterCount; index++) {
       firefighters.add(new FireFighter(randomPosition()));
     }
+    for (int index = 0; index < initialCloudCount; index++) {
+      clouds.add(new Cloud(randomPosition()));
+    }
+
   }
 
   private Position randomPosition() {
@@ -79,13 +83,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   @Override
   public List<ModelElement> getState(Position position) {
     List<ModelElement> result = new ArrayList<>();
+
     for (FireFighter firefighter : firefighters) {
       if (firefighter.getPosition().equals(position)) result.add(ModelElement.FIREFIGHTER);
     }
     if (fires.containsKey(position)) result.add(ModelElement.FIRE);
+
+    for (Cloud cloud : clouds) {
+      if (cloud.getPosition().equals(position)) result.add(ModelElement.CLOUD);
+    }
     return result;
   }
 
+  private List<Position> updateClouds() {
+    List<Position> modifiedPositions = new ArrayList<>();
+    for (Cloud cloud : clouds) {
+      Position currentPosition = cloud.getPosition();
+      Position newPosition = randomNeighbor(currentPosition);
+      cloud.setPosition(newPosition);
+      modifiedPositions.add(currentPosition);
+      modifiedPositions.add(newPosition);
+
+
+      extinguish(newPosition);
+    }
+    return modifiedPositions;
+  }
+  private Position randomNeighbor(Position position) {
+    List<Position> neighborPositions = neighbors.get(position);
+    return neighborPositions.get(randomGenerator.nextInt(neighborPositions.size()));
+  }
+
+
   @Override
   public int rowCount() {
     return rowCount;
@@ -98,20 +127,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
   public List<Position> updateToNextGeneration() {
     List<Position> modifiedPositions = updateFirefighters();
+    modifiedPositions.addAll(updateClouds());
     modifiedPositions.addAll(updateFires());
     step++;
     return modifiedPositions;
   }
 
+
   private List<Position> updateFires() {
     List<Position> modifiedPositions = new ArrayList<>();
     if (step % 2 == 0) {
       Set<Position> newFirePositions = new HashSet<>();
-      for (Position fire : new HashSet<>(fires.keySet())) { // Utilisez une copie de la clé
+      for (Position fire : new HashSet<>(fires.keySet())) {
         newFirePositions.addAll(neighbors.get(fire));
       }
       for (Position position : newFirePositions) {
-        if (!fires.containsKey(position)) { // Vérifiez si le feu est nouveau
+        if (!fires.containsKey(position)) {
           fires.put(position, new Fire(position));
           modifiedPositions.add(position);
         }
@@ -121,6 +152,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
 
+
   @Override
   public int stepNumber() {
     return step;
@@ -132,15 +164,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       Position currentPosition = firefighter.getPosition();
       Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, fires.keySet(), neighbors);
 
-      // Déplacement du pompier
       firefighter.setPosition(newPosition);
       modifiedPositions.add(currentPosition);
       modifiedPositions.add(newPosition);
 
-      // Éteindre le feu à la nouvelle position
       extinguish(newPosition);
 
-      // Éteindre les feux voisins
       for (Position neighbor : neighbors.get(newPosition)) {
         extinguish(neighbor);
         modifiedPositions.add(neighbor);
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index 759eee5e54c3a39472d8f7defbbbe6a2b67b8f00..4613ca6034c1e7c76df1da76a87982b8fee1d716 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -1,5 +1,8 @@
 package model;
 
 public enum ModelElement {
-  FIREFIGHTER, FIRE
+  FIREFIGHTER,
+  FIRE,
+  CLOUD;
 }
+
diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java
index 4c9041f034ec9a4eb07ce4334de237f1e99ccdc9..d97172feb8bf89f80db96a41d50451151c96a184 100644
--- a/src/main/java/view/FirefighterGrid.java
+++ b/src/main/java/view/FirefighterGrid.java
@@ -10,8 +10,10 @@ import java.util.List;
 public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
 
     private void paintElementAtPosition(ViewElement element, Position position) {
+        System.out.println("Painting " + element + " at " + position);
         paintBox(position.row(), position.column(), element.color);
     }
+
     private int boxWidth;
     private int boxHeight;
     private int columnCount;
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index ffb76112e1af543df5af41fa906082ef11be9967..d3e00087e1a9d4e18edfcdbe07eb8be83adb16b3 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.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE);
+  FIREFIGHTER(Color.BLUE), FIRE(Color.RED),CLOUD(Color.LIGHTSKYBLUE), EMPTY(Color.WHITE);
   final Color color;
   ViewElement(Color color) {
     this.color = color;