From 94204985321bae01f8a74f15f82dcdf34669891d Mon Sep 17 00:00:00 2001
From: m19023837 <chadi.mansour@etu.univ-amu.fr>
Date: Fri, 22 Nov 2024 11:30:15 +0100
Subject: [PATCH] changed FireManager FirefighterManager to work better but
 still not done yet

---
 .../executionHistory/executionHistory.lock    | Bin 17 -> 17 bytes
 .gradle/8.10.2/fileHashes/fileHashes.lock     | Bin 17 -> 17 bytes
 .../buildOutputCleanup.lock                   | Bin 17 -> 17 bytes
 src/main/java/model/FireManager.java          |  21 ++++--
 src/main/java/model/FirefighterManager.java   |  63 +++++++++++++++---
 src/main/java/util/Position.java              |   2 +
 6 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock
index 866f8ac5e21dae56dd670743ad8f23dce3fa7855..00af7ad92d473c28e75df256de7082d1905d37a0 100644
GIT binary patch
literal 17
TcmZRsO8#f>m)m%p0Rp%HGcp7#

literal 17
TcmZRsO8#f>m)m%p0Rq?oGcN=v

diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock
index d3e85847bd6f477176e3d0b79c7e5df5ba1f10a5..eec55f022194ea4668a5592c880843ef4401710c 100644
GIT binary patch
literal 17
TcmZRUE=)E0=%H|g0RjpEC!7Pd

literal 17
TcmZRUE=)E0=%H|g0Rln+Cx8Q)

diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 9737a6e0e59ba50d3225d012aca741ce63966c10..e1618ed68daabe25ab487b4d5282bfbda4d972e2 100644
GIT binary patch
literal 17
UcmZR+;bwJ3Kx+R{1_;mv05CiR3jhEB

literal 17
UcmZR+;bwJ3Kx+R{1_)3C05CNK1ONa4

diff --git a/src/main/java/model/FireManager.java b/src/main/java/model/FireManager.java
index 7a8f0b4..6b47541 100644
--- a/src/main/java/model/FireManager.java
+++ b/src/main/java/model/FireManager.java
@@ -5,10 +5,13 @@ import util.Position;
 import java.util.*;
 
 public class FireManager {
-    private Set<Position> firePositions = new HashSet<>();
+    private Set<Position> firePositions;
+    private int turnCounter;
     private FireSpreadStrategy fireSpreadStrategy;
 
     public FireManager(FireSpreadStrategy fireSpread) {
+        this.firePositions = new HashSet<>();
+        this.turnCounter = 0;
         this.fireSpreadStrategy = fireSpread;
     }
     public void initializeFires(int fireCount, int rowCount, int columnCount, Random random) {
@@ -17,9 +20,19 @@ public class FireManager {
         }
     }
         public List<Position> fireSpread(Map<Position, List<Position>> neighbors){
-            List<Position> newFirePositions = fireSpreadStrategy.spreadFire(firePositions, neighbors);
-            firePositions.addAll(newFirePositions);
-            return newFirePositions;
+            List<Position> newFires = new ArrayList<>();
+            if (turnCounter % 2 == 0) {
+                for (Position fire : firePositions) {
+                    for (Position neighbor : neighbors.get(fire)) {
+                        if (!firePositions.contains(neighbor)) {
+                            newFires.add(neighbor);
+                        }
+                    }
+                }
+            }
+            firePositions.addAll(newFires);
+        turnCounter++;
+        return newFires;
         }
         public void extinguish(Position position){
         firePositions.remove(position);
diff --git a/src/main/java/model/FirefighterManager.java b/src/main/java/model/FirefighterManager.java
index b057e09..85f97fa 100644
--- a/src/main/java/model/FirefighterManager.java
+++ b/src/main/java/model/FirefighterManager.java
@@ -5,10 +5,11 @@ import util.Position;
 import java.util.*;
 
 public class FirefighterManager {
-    private List<Position> firefighterPositions = new ArrayList<>();
+    private List<Position> firefighterPositions;
     private FirefighterMovementStrategy firefighterMovementStrategy;
 
     public FirefighterManager(FirefighterMovementStrategy firefighterMovementStrategy) {
+        this.firefighterPositions = new ArrayList<>();
         this.firefighterMovementStrategy = firefighterMovementStrategy;
     }
     public void initializeFireFightersPositions(int count, int rowCount, int columnCount, Random random) {
@@ -18,18 +19,64 @@ public class FirefighterManager {
     }
     public List<Position> moveFireFighters(Set<Position> firePositions, Map<Position, List<Position>> neighbors) {
         List<Position> modifiedPositions = new ArrayList<>();
-        List<Position> newPositions = new ArrayList<>();
 
-        for( Position currentposition : firefighterPositions) {
-            Position newPosition = firefighterMovementStrategy.moveToClosestFire(currentposition, firePositions, neighbors);
-            modifiedPositions.add(currentposition);
-            modifiedPositions.add(newPosition);
-            newPositions.add(newPosition);
+        for (int i = 0; i < firefighterPositions.size(); i++) {
+            Position firefighter = firefighterPositions.get(i);
+
+            Position closestFire = findClosestFire(firefighter, firePositions);
+
+            if (closestFire != null && !neighbors.get(firefighter).contains(closestFire)) {
+                Position newPosition = moveTowards(firefighter, closestFire);
+                firefighterPositions.set(i, newPosition);
+                modifiedPositions.add(newPosition);
+            }
+
+            for (Position neighbor : neighbors.get(firefighter)) {
+                if (firePositions.contains(neighbor)) {
+                    firePositions.remove(neighbor);
+                    modifiedPositions.add(neighbor);
+                }
+            }
         }
-        firefighterPositions = newPositions;
+
         return modifiedPositions;
     }
     public List<Position> getFirefighterPositions() {
         return firefighterPositions;
     }
+
+    private Position findClosestFire(Position firefighter, Set<Position> firePositions) {
+        Position closestFire = null;
+        int minDistance = Integer.MAX_VALUE;
+
+        for (Position fire : firePositions) {
+            int distance = Math.abs(fire.getRow() - firefighter.getRow()) + Math.abs(fire.getCol() - firefighter.getCol());
+            if (distance < minDistance) {
+                minDistance = distance;
+                closestFire = fire;
+            }
+        }
+
+        return closestFire;
+    }
+
+    private Position moveTowards(Position firefighter, Position target) {
+        int currentRow = firefighter.getRow();
+        int currentCol = firefighter.getCol();
+
+        int targetRow = target.getRow();
+        int targetCol = target.getCol();
+
+        if (currentRow < targetRow) {
+            return new Position(currentRow + 1, currentCol); // Move down
+        } else if (currentRow > targetRow) {
+            return new Position(currentRow - 1, currentCol); // Move up
+        } else if (currentCol < targetCol) {
+            return new Position(currentRow, currentCol + 1); // Move right
+        } else if (currentCol > targetCol) {
+            return new Position(currentRow, currentCol - 1); // Move left
+        }
+
+        return firefighter;
+    }
 }
diff --git a/src/main/java/util/Position.java b/src/main/java/util/Position.java
index 8a0d2b6..0237827 100644
--- a/src/main/java/util/Position.java
+++ b/src/main/java/util/Position.java
@@ -1,6 +1,8 @@
 package util;
 
 public record Position(int row, int column) {
+
+
     public int getRow() {
         return row;
     }
-- 
GitLab