Skip to content
Snippets Groups Projects
Commit e99ff3fe authored by ousseyn01's avatar ousseyn01
Browse files

Modification of FirefighterBoard.java

parent 16c08852
Branches
No related tags found
No related merge requests found
package model;
import util.Position;
public interface BoardElement {
Position getPosition();
void setPosition(Position position);
}
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();
}
......
package util;
import java.util.List;
import java.util.Map;
import java.util.Set;
public record Position(int row, int column) {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment