From 0aedffc22413a3d2314327f50dcc8d406538beb1 Mon Sep 17 00:00:00 2001
From: ousseyn01 <ousseyn.ndiaye9@gmail.com>
Date: Wed, 27 Nov 2024 11:10:44 +0100
Subject: [PATCH] Implementation of Mountain in fighfighterboard

---
 src/main/java/model/FirefighterBoard.java | 35 +++++++++++++++++++----
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 27d53ed..6ad3f72 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -10,16 +10,18 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int initialFireCount;
   private final int initialFirefighterCount;
   private final int initialCloudCount;
+  private final int initialMountainCount = 3;
   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 List<Mountain> mountains;
   private final Position[][] positions;
   private int step = 0;
   private final Random randomGenerator = new Random();
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount) {
+  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount, int initialMountainCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
     this.positions = new Position[rowCount][columnCount];
@@ -44,6 +46,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public void initializeElements() {
     firefighters = new ArrayList<>();
     clouds = new ArrayList<>();
+    mountains = new ArrayList<>();
     Set<Position> firePositions = new HashSet<>();
     for (int index = 0; index < initialCloudCount; index++) {
       clouds.add(new Cloud(randomPosition(), neighbors));
@@ -56,6 +59,26 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     for (int index = 0; index < initialCloudCount; index++) {
       clouds.add(new Cloud(randomPosition(), neighbors));
     }
+    for (int i = 0; i < initialMountainCount; i++) {
+      Position position = randomPosition();
+      if (isPositionOccupied(position)) continue;
+      mountains.add(new Mountain(position));
+    }
+  }
+
+  private boolean isPositionOccupied(Position position) {
+    // Vérifie si la position est occupée par une montagne
+    for (Mountain mountain : mountains) {
+      if (mountain.getPosition().equals(position)) return true;
+    }
+    // Vérifie les autres éléments
+    for (Firefighter firefighter : firefighters) {
+      if (firefighter.getPosition().equals(position)) return true;
+    }
+    for (Cloud cloud : clouds) {
+      if (cloud.getPosition().equals(position)) return true;
+    }
+    return fire.getFirePositions().contains(position);
   }
 
   private Position randomPosition() {
@@ -70,6 +93,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
         result.add(ModelElement.CLOUD);
       }
     }
+    for (Mountain mountain : mountains){
+      if(mountain.getPosition().equals(position)){
+        result.add(ModelElement.MOUNTAIN);
+      }
+    }
 
     for (Firefighter firefighter : firefighters)
       if (firefighter.getPosition().equals(position))
@@ -97,12 +125,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     }
     // Déplacer les nuages et éteindre les feux
     for (Cloud cloud : clouds) {
-      //cloud.moveRandomly();
-      //cloud.extinguishFire(fire);
       cloud.moveAndExtinguishFire(fire);
       cloud.extinguishFireCloud(fire);
-      //modifiedPositions.addAll(fire.spreadFire());
-
     }
     step++;
 
@@ -157,6 +181,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
         case FIRE -> fire.getFirePositions().add(position);
         case FIREFIGHTER -> firefighters.add(new Firefighter(position));
         case CLOUD -> clouds.add(new Cloud(position, neighbors));
+        case MOUNTAIN -> mountains.add(new Mountain(position));
       }
     }
   }
-- 
GitLab