diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java deleted file mode 100644 index eedeffaa781f160e27e566e0b234b9d2e8eed32d..0000000000000000000000000000000000000000 --- a/src/main/java/model/BoardElement.java +++ /dev/null @@ -1,9 +0,0 @@ -package model; - -import util.Position; - -public interface BoardElement { - Position getPosition(); - void setPosition(Position position); -} - diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 353e06495a142990311f21682724d64fe7a030a7..dadc043a04ba1fc223a6715cf932e5db1be1fc65 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -1,5 +1,6 @@ package model; +import model.update.NextGenerationUpdater; import util.Position; import java.util.*; @@ -21,6 +22,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private int step = 0; private final Random randomGenerator = new Random(); + private NextGenerationUpdater nextGenerationUpdater; + + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount, int initialMountainCount) { this.columnCount = columnCount; this.rowCount = rowCount; @@ -41,6 +45,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { this.initialFirefighterCount = initialFirefighterCount; this.initialCloudCount = initialCloudCount; initializeElements(); + + // Initialisation des Updaters + nextGenerationUpdater = new NextGenerationUpdater(fire, clouds, firefighters, mountains, neighbors); } public void initializeElements() { @@ -117,63 +124,18 @@ public class FirefighterBoard implements Board<List<ModelElement>> { public int columnCount() { return columnCount; } - - public List<Position> updateToNextGeneration() { - List<Position> modifiedPositions = updateFirefighters(); - if (step % 2 == 0){ - modifiedPositions.addAll(fire.spreadFire(getMountainPositions())); - } - for (Cloud cloud : clouds) { - cloud.move(); - cloud.protectFromFire(fire); - cloud.extinguishSurroundingFires(fire); - } - step++; - - return modifiedPositions; - } - private Set<Position> getMountainPositions() { - Set<Position> mountainPositions = new HashSet<>(); - for (Mountain mountain : mountains) { - mountainPositions.add(mountain.getPosition()); - } - return mountainPositions; - } - @Override public int stepNumber() { return step; } - private List<Position> updateFirefighters() { - List<Position> modifiedPosition = new ArrayList<>(); - for (Firefighter firefighter : firefighters) { - - modifiedPosition.add(firefighter.getPosition()); - - Position newPosition = firefighter.moveToBestPosition(fire.getFirePositions(), neighbors, getMountainPositions()); - firefighter.setPosition(newPosition); - - modifiedPosition.add(newPosition); - - firefighter.extinguish(newPosition, fire.getFirePositions()); - - // Éteindre les feux dans les positions voisines - List<Position> adjacentFires = neighbors.get(newPosition).stream() - .filter(fire.getFirePositions()::contains) - .toList(); - for (Position firePosition : adjacentFires) { - firefighter.extinguish(firePosition, fire.getFirePositions()); - modifiedPosition.add(firePosition); - } - - } - return modifiedPosition; + public List<Position> updateToNextGeneration() { + return nextGenerationUpdater.updateToNextGeneration(); } @Override public void reset() { - step = 0; + nextGenerationUpdater.resetStep(); initializeElements(); } diff --git a/src/main/java/util/Position.java b/src/main/java/util/Position.java index 31dc4c1fb6a04b4e96649e133d1d116120d34683..aaa34af4391204ebbcd76896d3949311cb36c6d6 100644 --- a/src/main/java/util/Position.java +++ b/src/main/java/util/Position.java @@ -1,5 +1,9 @@ package util; +import java.util.List; +import java.util.Map; +import java.util.Set; + public record Position(int row, int column) { }