From cfd778da16afa1ee4de64333de5e2691e830e425 Mon Sep 17 00:00:00 2001
From: Sarah CHERCHEM <sarahcherchem@gmail.com>
Date: Fri, 22 Nov 2024 14:51:29 +0100
Subject: [PATCH] =?UTF-8?q?Correction=20de=20la=20d=C3=A9composition?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/java/controller/Controller.java      | 10 +++---
 src/main/java/model/Board.java                | 16 ++++++++-
 src/main/java/model/BoardBehavior.java        |  2 +-
 .../java/model/BoardFireFighterBehavior.java  | 13 +++----
 .../model/BoardFirefighterProperties.java     | 31 ++++++++--------
 src/main/java/model/BoardProperties.java      | 18 ++--------
 src/main/java/model/FirefighterBoard.java     | 36 +++++--------------
 src/main/java/model/FirefighterManager.java   |  2 +-
 src/main/java/util/Strategy.java              |  2 +-
 src/main/java/util/TargetStrategy.java        |  4 +--
 10 files changed, 58 insertions(+), 76 deletions(-)

diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 55cd329..e3e7518 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -59,7 +59,7 @@ public class Controller {
   }
 
   private void updateBoard(){
-    List<Position> updatedPositions = board.updateToNextGeneration();
+    List<Position> updatedPositions = board.getBehavior().updateToNextGeneration();
     List<Pair<Position, ViewElement>> updatedSquares = new ArrayList<>();
     for(Position updatedPosition : updatedPositions){
       List<ModelElement> squareState = board.getState(updatedPosition);
@@ -67,18 +67,18 @@ public class Controller {
       updatedSquares.add(new Pair<>(updatedPosition, viewElement));
     }
     grid.repaint(updatedSquares);
-    updateGenerationLabel(board.stepNumber());
+    updateGenerationLabel(board.getBehavior().stepNumber());
   }
 
   private void repaintGrid(){
-    int columnCount = board.columnCount();
-    int rowCount = board.rowCount();
+    int columnCount = board.getProperties().columnCount();
+    int rowCount = board.getProperties().rowCount();
     ViewElement[][] viewElements = new ViewElement[rowCount][columnCount];
     for(int column = 0; column < columnCount; column++)
       for(int row = 0; row < rowCount; row++)
         viewElements[row][column] = getViewElement(board.getState(new Position(row, column)));
     grid.repaint(viewElements);
-    updateGenerationLabel(board.stepNumber());
+    updateGenerationLabel(board.getBehavior().stepNumber());
   }
 
   private ViewElement getViewElement(List<ModelElement> squareState) {
diff --git a/src/main/java/model/Board.java b/src/main/java/model/Board.java
index e671eb0..6fe86ee 100644
--- a/src/main/java/model/Board.java
+++ b/src/main/java/model/Board.java
@@ -5,7 +5,21 @@ import util.Position;
 import java.util.List;
 
 
-public interface Board<S> {
+public interface Board<S>  {
+    /**
+     * Retourne l'état des éléments situés à une position spécifique du tableau.
+     *
+     * @param position La position sur le tableau pour laquelle récupérer l'état.
+     * @return L'état des éléments à la position donnée.
+     */
+    S getState(Position position); // État des éléments sur une position donnée.
+    /**
+     * Définit l'état des éléments à une position spécifique du tableau.
+     *
+     * @param state    L'état à définir pour la position donnée.
+     * @param position La position sur le tableau pour laquelle définir l'état.
+     */
+    void setState(S state, Position position);
 
 
 }
diff --git a/src/main/java/model/BoardBehavior.java b/src/main/java/model/BoardBehavior.java
index 0ce2952..8845d23 100644
--- a/src/main/java/model/BoardBehavior.java
+++ b/src/main/java/model/BoardBehavior.java
@@ -3,7 +3,7 @@ package model;
 import util.Position;
 import java.util.List;
 
-public interface BoardBehavior<S> extends Board<S>{
+public interface BoardBehavior<S>  {
     /**
      * Get the current step number or generation of the board.
      *
diff --git a/src/main/java/model/BoardFireFighterBehavior.java b/src/main/java/model/BoardFireFighterBehavior.java
index 18e8817..933056c 100644
--- a/src/main/java/model/BoardFireFighterBehavior.java
+++ b/src/main/java/model/BoardFireFighterBehavior.java
@@ -49,7 +49,7 @@ public class BoardFireFighterBehavior implements BoardBehavior{
         List<Position> modifiedPositions = new ArrayList<>();
         List<Position> newFirefighterPositions = new ArrayList<>();
         for (Position firefighterPosition : firefighterPositions) {
-            Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition, firePositions, neighbors);
+            Position newFirefighterPosition = targetStrategy.neighborClosestToTarget(firefighterPosition, firePositions, neighbors);
             newFirefighterPositions.add(newFirefighterPosition);
             extinguish(newFirefighterPosition);
             modifiedPositions.add(firefighterPosition);
@@ -86,17 +86,18 @@ public class BoardFireFighterBehavior implements BoardBehavior{
         step++;
     }
 
-    public int getStep() {
-        return step;
-    }
+
     @Override
     public int stepNumber() {
-        return 0;
+        return step;
     }
 
     @Override
     public List<Position> updateToNextGeneration() {
-        return List.of();
+        List<Position> modifiedPositions = updateFirefighters();
+        modifiedPositions.addAll(updateFires());
+        incrementStep();
+        return modifiedPositions;
     }
 
     @Override
diff --git a/src/main/java/model/BoardFirefighterProperties.java b/src/main/java/model/BoardFirefighterProperties.java
index efd5b8a..d2a0a17 100644
--- a/src/main/java/model/BoardFirefighterProperties.java
+++ b/src/main/java/model/BoardFirefighterProperties.java
@@ -10,16 +10,21 @@ public class BoardFirefighterProperties implements BoardProperties{
     private final int columnCount;
     private final Position[][] positions;
     private final Map<Position, List<Position>> neighbors;
+    private final int initialFireCount;
+    private final int initialFirefighterCount;
 
-    public BoardFirefighterProperties(int rowCount, int columnCount, Map<Position, List<Position>> neighbors) {
+    public BoardFirefighterProperties(int rowCount, int columnCount, Map<Position, List<Position>> neighbors, int initialFireCount, int initialFirefighterCount) {
         this.rowCount = rowCount;
         this.columnCount = columnCount;
-        this.positions = new Position[rowCount][columnCount];
         this.neighbors = neighbors;
-
+        this.initialFireCount = initialFireCount;
+        this.initialFirefighterCount = initialFirefighterCount;
+        this.positions=new Position[rowCount][columnCount];
         initializePositions();
     }
 
+
+
     private void initializePositions() {
         for (int row = 0; row < rowCount; row++) {
             for (int column = 0; column < columnCount; column++) {
@@ -28,13 +33,7 @@ public class BoardFirefighterProperties implements BoardProperties{
         }
     }
 
-    public int getRowCount() {
-        return rowCount;
-    }
 
-    public int getColumnCount() {
-        return columnCount;
-    }
 
     public Map<Position, List<Position>> getNeighbors() {
         return neighbors;
@@ -45,21 +44,19 @@ public class BoardFirefighterProperties implements BoardProperties{
     }
     @Override
     public int rowCount() {
-        return 0;
+        return rowCount;
     }
 
     @Override
     public int columnCount() {
-        return 0;
+        return columnCount;
     }
 
-    @Override
-    public List<ModelElement> getState(Position position) {
-        return List.of();
+    public int getInitialFireCount() {
+        return initialFireCount;
     }
 
-    @Override
-    public void setState(List<ModelElement> state, Position position) {
-
+    public int getInitialFirefighterCount() {
+        return initialFirefighterCount;
     }
 }
diff --git a/src/main/java/model/BoardProperties.java b/src/main/java/model/BoardProperties.java
index ec37435..07ad3f7 100644
--- a/src/main/java/model/BoardProperties.java
+++ b/src/main/java/model/BoardProperties.java
@@ -9,7 +9,7 @@ import java.util.List;
  *
  * @param <S> Le type d'état utilisé pour les éléments du tableau.
  */
-public interface BoardProperties<S> extends Board<S>  {
+public interface BoardProperties<S>  {
     /**
      * Retourne le nombre de lignes du tableau.
      *
@@ -24,19 +24,7 @@ public interface BoardProperties<S> extends Board<S>  {
      */
     int columnCount(); // Nombre de colonnes.
 
-    /**
-     * Retourne l'état des éléments situés à une position spécifique du tableau.
-     *
-     * @param position La position sur le tableau pour laquelle récupérer l'état.
-     * @return L'état des éléments à la position donnée.
-     */
-    S getState(Position position); // État des éléments sur une position donnée.
 
-    /**
-     * Définit l'état des éléments à une position spécifique du tableau.
-     *
-     * @param state    L'état à définir pour la position donnée.
-     * @param position La position sur le tableau pour laquelle définir l'état.
-     */
-    void setState(S state, Position position);
+
+
 }
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 2626de0..197620e 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -8,19 +8,15 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final BoardFireFighterBehavior behavior;
   private final BoardFirefighterProperties properties;
 
-  private final int initialFireCount;
-  private final int initialFirefighterCount;
+
   private final Random randomGenerator = new Random();
 
   public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
     Map<Position, List<Position>> neighbors = initializeNeighbors(rowCount, columnCount);
 
-    this.properties = new BoardFirefighterProperties(rowCount, columnCount, neighbors);
+    this.properties = new BoardFirefighterProperties(rowCount, columnCount, neighbors,initialFireCount,initialFirefighterCount);
     this.behavior = new BoardFireFighterBehavior(neighbors);
 
-    this.initialFireCount = initialFireCount;
-    this.initialFirefighterCount = initialFirefighterCount;
-
     initializeElements();
   }
 
@@ -48,10 +44,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public void initializeElements() {
-    behavior.initializeElements(initialFireCount, initialFirefighterCount, properties.getRowCount(), properties.getColumnCount(), randomGenerator);
+    behavior.initializeElements(properties.getInitialFireCount(), properties.getInitialFirefighterCount(), properties.rowCount(), properties.columnCount(), randomGenerator);
   }
 
-  @Override
+
   public List<ModelElement> getState(Position position) {
     List<ModelElement> result = new ArrayList<>();
     if (behavior.getFirePositions().contains(position)) {
@@ -63,23 +59,14 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return result;
   }
 
-  @Override
-  public int rowCount() {
-    return properties.getRowCount();
-  }
 
-  @Override
-  public int columnCount() {
-    return properties.getColumnCount();
-  }
 
-  @Override
   public void reset() {
     behavior.reset(0);
     initializeElements();
   }
 
-  @Override
+
   public void setState(List<ModelElement> state, Position position) {
     if (state.contains(ModelElement.FIRE)) {
       behavior.getFirePositions().add(position);
@@ -89,16 +76,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     }
   }
 
-  @Override
-  public List<Position> updateToNextGeneration() {
-    List<Position> modifiedPositions = behavior.updateFirefighters();
-    modifiedPositions.addAll(behavior.updateFires());
-    behavior.incrementStep();
-    return modifiedPositions;
+  public BoardFireFighterBehavior getBehavior() {
+    return behavior;
   }
 
-  @Override
-  public int stepNumber() {
-    return behavior.getStep();
+  public BoardFirefighterProperties getProperties() {
+    return properties;
   }
 }
diff --git a/src/main/java/model/FirefighterManager.java b/src/main/java/model/FirefighterManager.java
index 1317bb1..ed4fd9b 100644
--- a/src/main/java/model/FirefighterManager.java
+++ b/src/main/java/model/FirefighterManager.java
@@ -23,7 +23,7 @@ public abstract class FirefighterManager implements FirefighterBehavior, Firefig
     @Override
     public Position moveToTarget(Position currentPosition, Collection<Position> firePositions, Map<Position, List<Position>> neighbors) {
         TargetStrategy targetStrategy = new TargetStrategy();
-        return targetStrategy.neighborClosestToFire(currentPosition, firePositions, neighbors);
+        return targetStrategy.neighborClosestToTarget(currentPosition, firePositions, neighbors);
     }
 
     @Override
diff --git a/src/main/java/util/Strategy.java b/src/main/java/util/Strategy.java
index 4ca44e7..99b4083 100644
--- a/src/main/java/util/Strategy.java
+++ b/src/main/java/util/Strategy.java
@@ -7,5 +7,5 @@ import java.util.List;
 import java.util.Map;
 
 public interface Strategy {
-    Position neighborClosestToTarget(Position position, Collection<Position> targets, Map<Position, List<Position>> neighbors, ViewElement[][] grid);
+    Position neighborClosestToTarget(Position position, Collection<Position> targets, Map<Position, List<Position>> neighbors);
 }
diff --git a/src/main/java/util/TargetStrategy.java b/src/main/java/util/TargetStrategy.java
index 7a2b051..5f93edc 100644
--- a/src/main/java/util/TargetStrategy.java
+++ b/src/main/java/util/TargetStrategy.java
@@ -14,7 +14,7 @@ public class TargetStrategy implements Strategy{
      * @return the position next to the current position that is on the path to the closest target.
      */
     public Position neighborClosestToTarget(Position position, Collection<Position> targets,
-                                          Map<Position, List<Position>> neighbors, ViewElement[][] grid) {
+                                          Map<Position, List<Position>> neighbors) {
         Set<Position> seen = new HashSet<Position>();
         HashMap<Position, Position> firstMove = new HashMap<Position, Position>();
         Queue<Position> toVisit = new LinkedList<Position>(neighbors.get(position));
@@ -22,7 +22,7 @@ public class TargetStrategy implements Strategy{
             firstMove.put(initialMove, initialMove);
         while (!toVisit.isEmpty()) {
             Position current = toVisit.poll();
-            if (grid[current.row()][current.column()] == ViewElement.MOUNTAIN) continue;
+         //   if (grid[current.row()][current.column()] == ViewElement.MOUNTAIN) continue;
             if (targets.contains(current))
                 return firstMove.get(current);
             for (Position adjacent : neighbors.get(current)) {
-- 
GitLab