From 1406b784c474d08d3a6a6f2ec1192de3b7d5fecb Mon Sep 17 00:00:00 2001
From: MEHDI <mehdi.belhachemi@etu-univ.amu.fr>
Date: Sun, 24 Nov 2024 18:11:04 +0100
Subject: [PATCH] mehdi and mohamed : finishing ModelElement modifications and
 changing FirefighterBoard implementation

---
 src/main/java/app/SimulatorApplication.java   |  7 +--
 src/main/java/controller/Controller.java      |  4 +-
 src/main/java/model/FirefighterBoard.java     | 50 +++++------------
 src/main/java/model/ModelElement.java         | 54 +++++++++++++++++++
 src/main/java/util/Neighbour.java             |  2 +-
 src/main/java/util/Position.java              |  6 +++
 src/test/java/model/FirefighterBoardTest.java |  8 +--
 7 files changed, 81 insertions(+), 50 deletions(-)

diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index faa82df..d3c6fa3 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -17,10 +17,6 @@ public class SimulatorApplication extends javafx.application.Application {
   private static final int COLUMN_COUNT = 20;
   private static final int BOX_WIDTH = 50;
   private static final int BOX_HEIGHT = 50;
-  public static final int INITIAL_FIRE_COUNT = 10;
-  public static final int INITIAL_FIREFIGHTER_COUNT = 10;
-  public static final int INITIAL_CLOUD_COUNT = 5;
-  public static final int INITIAL_ROAD_COUNT = 5;
 
 
   private Stage primaryStage;
@@ -46,8 +42,7 @@ public class SimulatorApplication extends javafx.application.Application {
     loader.setLocation(location);
     view = loader.load();
     Controller controller = loader.getController();
-    controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT,
-            INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT,INITIAL_CLOUD_COUNT,INITIAL_ROAD_COUNT);
+    controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 0c89bb2..19a03ee 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -131,9 +131,9 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-                                int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) {
+                                int rowCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudCount,initialRoadCount));
+    this.setModel(new FirefighterBoard(columnCount, rowCount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index b58ba0b..21f5089 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -2,7 +2,6 @@ package model;
 
 import util.Neighbour;
 import util.Position;
-import util.TargetStrategy;
 
 import java.util.*;
 
@@ -10,11 +9,6 @@ import java.util.*;
 public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int columnCount;
   private final int rowCount;
-  private final int initialFireCount;
-  private final int initialFirefighterCount;
-  private final int initialCloudCount;
-  private final int initialRoadCount;
-
 
   private Map<Position, Fire> fires = new HashMap<>();
   private Map<Position, Extinguisher> extinguishers = new HashMap<>();
@@ -25,17 +19,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private int step = 0;
   private final Random randomGenerator = new Random();
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) {
+  public FirefighterBoard(int columnCount, int rowCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
     this.positions = new Position[rowCount][columnCount];
     this.neighbour = new Neighbour(this);
     initializePositions();
 
-    this.initialFireCount = initialFireCount;
-    this.initialFirefighterCount = initialFirefighterCount;
-    this.initialCloudCount = initialCloudCount;
-    this.initialRoadCount = initialRoadCount;
     initializeElements();
   }
 
@@ -48,30 +38,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public void initializeElements() {
-  fires.clear();
-  extinguishers.clear();
-  obstacles.clear();
-
-    for (int index = 0; index < initialFireCount; index++) {
-      Position position = randomPosition();
-      fires.put(position,new Fire(position));
-    }
-
-    for (int index = 0; index < initialFirefighterCount; index++) {
-      Position position = randomPosition();
-      extinguishers.put(position,new FireFighter(position));
-    }
-
-    for (int index = 0; index < initialCloudCount; index++) {
-      Position position = randomPosition();
-      extinguishers.put(position,new Cloud(position));
-    }
-
-    for (int index = 0; index < initialRoadCount; index++) {
-      Position position = randomPosition();
-      obstacles.put(position,new Road(position));
+    for(ModelElement modelElement : ModelElement.values()){
+      for(int elementCount = 0; elementCount< modelElement.getInitialNumber();elementCount++){
+        Position position = randomPosition();
+        if(modelElement.isObstacle()){
+          obstacles.put(position, (Obstacle) modelElement.getModelElementClass(position));
+        } else if (modelElement.isExtinguisher()) {
+          extinguishers.put(position, (Extinguisher) modelElement.getModelElementClass(position));
+        }
+        else{
+          fires.put(position, (Fire) modelElement.getModelElementClass(position));
+        }
+      }
     }
-
   }
 
   private Position randomPosition() {
@@ -131,9 +110,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return step;
   }
 
-
-
-
   public Map<Position,Fire>getFires(){
     return this.fires;
   }
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index b151e95..94616d5 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -1,14 +1,68 @@
 package model;
 
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
 public enum ModelElement {
 
   FIREFIGHTER(10),
   FIRE(10),
   CLOUD(10),
   ROAD(5);
+  private final int initialNumber;
+
+
 
   ModelElement(int initialNumber) {
+    this.initialNumber = initialNumber;
+  }
+
+  public int getInitialNumber(){
+    return this.initialNumber;
+  }
+
+  public Element getModelElementClass(Position position){
+
+    return switch (this){
+      case FIRE -> new Fire(position);
+      case ROAD -> new Road(position);
+      case FIREFIGHTER -> new FireFighter(position);
+      case CLOUD -> new Cloud(position);
+      default -> throw new IllegalArgumentException("Unknown ModelElement: " + this);
+      };
+
+    }
+
 
+
+
+  public static List<Integer> getInitialNumbers(){
+    List<Integer>listIninitalNumbers = new ArrayList<>();
+    for(ModelElement modelElement : ModelElement.values()){
+      listIninitalNumbers.add(modelElement.getInitialNumber());
+    }
+    return listIninitalNumbers;
+  }
+
+  public boolean isObstacle(){
+    if(this.getModelElementClass(null) instanceof Obstacle){
+      return true;
+    }
+    return false;
+  }
+
+  public boolean isExtinguisher(){
+    if(this.getModelElementClass(null) instanceof Extinguisher){
+      return true;
+    }
+    return false;
   }
+
+
+
+
+
 }
 
diff --git a/src/main/java/util/Neighbour.java b/src/main/java/util/Neighbour.java
index c2a6225..1e591d3 100644
--- a/src/main/java/util/Neighbour.java
+++ b/src/main/java/util/Neighbour.java
@@ -41,6 +41,6 @@ public class Neighbour {
 
 
     public Map<Position, List<Position>> getNeighbors() {
-        return neighbors;
+        return this.neighbors;
     }
 }
diff --git a/src/main/java/util/Position.java b/src/main/java/util/Position.java
index 31dc4c1..c25f20d 100644
--- a/src/main/java/util/Position.java
+++ b/src/main/java/util/Position.java
@@ -1,5 +1,11 @@
 package util;
 
+import model.Board;
+import model.FirefighterBoard;
+
+import java.util.Random;
+
 public record Position(int row, int column) {
 
+
 }
diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java
index c435da4..e091ac2 100644
--- a/src/test/java/model/FirefighterBoardTest.java
+++ b/src/test/java/model/FirefighterBoardTest.java
@@ -10,17 +10,17 @@ import static org.assertj.core.api.Assertions.*;
 public class FirefighterBoardTest {
   @Test
   void testColumnCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10);
     assertThat(board.columnCount()).isEqualTo(20);
   }
   @Test
   void testRowCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10);
     assertThat(board.rowCount()).isEqualTo(10);
   }
   @Test
   void testStepNumber(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10);
     for(int index = 0; index < 10; index++){
       assertThat(board.stepNumber()).isEqualTo(index);
       board.updateToNextGeneration();
@@ -29,7 +29,7 @@ public class FirefighterBoardTest {
   }
   @Test
   void testGetState_afterSet(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0,1,5);
+    Board<List<ModelElement>> board = new FirefighterBoard(20, 10);
     Position position = new Position(1,2);
     assertThat(board.getState(position)).isEmpty();
     board.setState(List.of(ModelElement.FIRE), position);
-- 
GitLab