diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index 35f5bd1beb70bf8580fcad77a6d1d8462524bcc8..7629eeb1e4853f94cd11a32c4ef743330cce0d61 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -46,7 +46,7 @@ public class SimulatorApplication extends javafx.application.Application {
     view = loader.load();
     Controller controller = loader.getController();
     controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT,
-        INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT);
+        INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index f694acf9bee37287cf1267ad3e3594dd740f0e61..ab6b16b32824c1247a65b11529685b27afd7baae 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -122,9 +122,9 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-      int rowCount, int initialFireCount, int initialFirefighterCount) {
+      int rowCount, int initialFireCount, int initialFirefighterCount, int initialcloudCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount));
+    this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..d953e02aed26027710d3ba02cf51d7eddf536b7d
--- /dev/null
+++ b/src/main/java/model/Cloud.java
@@ -0,0 +1,92 @@
+package model;
+
+import javafx.geometry.Pos;
+import javafx.scene.paint.Color;
+import util.Position;
+import util.PositionUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class Cloud implements Entity{
+    private int age;
+    private Position position;
+    private final Color viewColor = Color.GREEN;
+
+
+
+    public Cloud(Position position, Board<Square> b){
+        this.age = 0;
+        this.position = position;
+
+    }
+
+    public Cloud(Position position, Board<Square> b, int age){
+        this.age = age;
+        this.position = position;
+
+    }
+
+    @Override
+    public List<Position> nextTurn(Board<Square> b) {
+        List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
+        Position next_position = adjacentPositions.get(new Random().nextInt(adjacentPositions.size()));
+
+
+
+        if (b.getStates(next_position).getEntities().stream().anyMatch(element -> element instanceof Fire)){
+            extinguish(next_position, b);
+        }
+        Position old_position = this.position;
+        this.position = next_position;
+        b.addEntityAtSquare(this, position);
+        b.clearCaseFrom(this, old_position);
+
+
+        return List.of(old_position, this.position);
+    }
+
+    private Position extinguish(Position p, Board<Square> b) {
+        b.getStates(p).getEntities().removeIf(element -> element instanceof Fire);
+            List<Entity> entities = b.getStates(p).getEntities();
+            for (Entity e : entities) {
+                if (e instanceof EmptyEntity) {
+                    e.setAge(b.stepNumber() + 1);
+                }
+            }
+
+        return p;
+    }
+
+    @Override
+    public Position getPosition() {
+        return this.position;
+    }
+
+    @Override
+    public void setPosition(Position p) {
+        this.position = p;
+    }
+
+    @Override
+    public int getAge() {
+        return age;
+    }
+
+    @Override
+    public void setAge(int age) {
+        this.age =age;
+    }
+
+    @Override
+    public void incrementAge() {
+        this.age += 1;
+
+    }
+
+    @Override
+    public Color getViewColor() {
+        return this.viewColor;
+    }
+}
diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java
index fadd6bceaf191fdcff9718e321079150929f3be7..7542286945f64dd827829c89014ba4ba193cd1eb 100644
--- a/src/main/java/model/FireFighterScenario.java
+++ b/src/main/java/model/FireFighterScenario.java
@@ -21,19 +21,22 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
 
   private int initialFireCount;
   private int initialFireFightersCount;
+  private int intialCloudCount;
 
-  public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount) {
+  public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount, int initialCloudCount) {
     this.matrix = new Matrix<Square>(columns, rows);
     this.initialFireCount = initialFireCount;
     this.initialFireFightersCount = initialFireFightersCount;
+    this.intialCloudCount = initialCloudCount;
     initScenario(matrix);
-    placeInitialActors(initialFireCount, initialFireFightersCount);
+    placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount);
     this.step = 0;
   }
 
-  private void placeInitialActors(int initialFireCount, int initialFireFightersCount) {
+  private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount) {
     int fireCount = 0;
     int fireFighterCount = 0;
+    int cloudCount = 0;
     int chance = 5; // Chance initiale en pourcentage
     Random random = new Random();
     List<Position> positions = new ArrayList<>();
@@ -43,7 +46,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
       }
     }
 
-    while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount) {
+    while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount || cloudCount < intialCloudCount) {
       Collections.shuffle(positions); // Mélange les positions pour un parcours aléatoire
 
       for (Position pos : positions) {
@@ -51,7 +54,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
           if (fireCount < initialFireCount && random.nextInt(100) < chance) {
             setSquare(new Square(pos, new Fire(pos, this, 1)));
             fireCount++;
-            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
               return;
             }
             continue;
@@ -60,7 +63,15 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
           if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
             setSquare(new Square(pos, new FireFighter(pos, this, 1)));
             fireFighterCount++;
-            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
+              return;
+            }
+          }
+
+          if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
+            setSquare(new Square(pos, new Cloud(pos, this, 1)));
+            cloudCount++;
+            if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) {
               return;
             }
           }
@@ -187,7 +198,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
     step = 0;
     matrix.clear();
     initScenario(matrix);
-    placeInitialActors(initialFireCount, initialFireFightersCount);
+    placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount);
   }
 
   public int stepNumber() {