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