diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index e3ef4335121b750862755337f4e50a82b943077d..5f015a47764f666890afa7140ac5f4693dad81d1 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -9,15 +9,17 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int rowCount;
   private final int initialFireCount;
   private final int initialFirefighterCount;
+  private final int initialCloudCount;
   private final model.TargetStrategy targetStrategy = new model.TargetStrategy();
   private List<Firefighter> firefighters;
   private Fire fire;
   private final Map<Position, List<Position>> neighbors = new HashMap<>();
+  private List<Cloud> clouds;
   private final Position[][] positions;
   private int step = 0;
   private final Random randomGenerator = new Random();
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
+  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
     this.positions = new Position[rowCount][columnCount];
@@ -35,17 +37,25 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       }
     this.initialFireCount = initialFireCount;
     this.initialFirefighterCount = initialFirefighterCount;
+    this.initialCloudCount = initialCloudCount;
     initializeElements();
   }
 
   public void initializeElements() {
     firefighters = new ArrayList<>();
+    clouds = new ArrayList<>();
     Set<Position> firePositions = new HashSet<>();
+    for (int index = 0; index < initialCloudCount; index++) {
+      clouds.add(new Cloud(randomPosition(), neighbors));
+    }
     for (int index = 0; index < initialFireCount; index++)
       firePositions.add(randomPosition());
     fire = new Fire(firePositions, neighbors);
     for (int index = 0; index < initialFirefighterCount; index++)
       firefighters.add(new Firefighter(randomPosition()));
+    for (int index = 0; index < initialCloudCount; index++) {
+      clouds.add(new Cloud(randomPosition(), neighbors));
+    }
   }
 
   private Position randomPosition() {
@@ -58,6 +68,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     for (Firefighter firefighter : firefighters)
       if (firefighter.getPosition().equals(position))
         result.add(ModelElement.FIREFIGHTER);
+    for (Cloud cloud : clouds) {
+      if (cloud.getPosition().equals(position)) {
+        result.add(ModelElement.CLOUD);
+      }
+    }
     if (fire.getFirePositions().contains(position))
       result.add(ModelElement.FIRE);
     return result;
@@ -78,6 +93,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     if (step % 2 == 0){
       modifiedPositions.addAll(fire.spreadFire());
     }
+    // Déplacer les nuages et éteindre les feux
+    for (Cloud cloud : clouds) {
+      cloud.moveRandomly();
+      cloud.extinguishFire(fire);
+    }
     step++;
 
     return modifiedPositions;
@@ -128,6 +148,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       switch (element) {
         case FIRE -> fire.getFirePositions().add(position);
         case FIREFIGHTER -> firefighters.add(new Firefighter(position));
+        case CLOUD -> clouds.add(new Cloud(position, neighbors));
+
       }
     }
   }