diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index e3ef4335121b750862755337f4e50a82b943077d..5f015a47764f666890afa7140ac5f4693dad81d1 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -9,15 +9,17 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final int rowCount; private final int initialFireCount; private final int initialFirefighterCount; + private final int initialCloudCount; private final model.TargetStrategy targetStrategy = new model.TargetStrategy(); private List<Firefighter> firefighters; private Fire fire; private final Map<Position, List<Position>> neighbors = new HashMap<>(); + private List<Cloud> clouds; private final Position[][] positions; private int step = 0; private final Random randomGenerator = new Random(); - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.positions = new Position[rowCount][columnCount]; @@ -35,17 +37,25 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; + this.initialCloudCount = initialCloudCount; initializeElements(); } public void initializeElements() { firefighters = new ArrayList<>(); + clouds = new ArrayList<>(); Set<Position> firePositions = new HashSet<>(); + for (int index = 0; index < initialCloudCount; index++) { + clouds.add(new Cloud(randomPosition(), neighbors)); + } for (int index = 0; index < initialFireCount; index++) firePositions.add(randomPosition()); fire = new Fire(firePositions, neighbors); for (int index = 0; index < initialFirefighterCount; index++) firefighters.add(new Firefighter(randomPosition())); + for (int index = 0; index < initialCloudCount; index++) { + clouds.add(new Cloud(randomPosition(), neighbors)); + } } private Position randomPosition() { @@ -58,6 +68,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { for (Firefighter firefighter : firefighters) if (firefighter.getPosition().equals(position)) result.add(ModelElement.FIREFIGHTER); + for (Cloud cloud : clouds) { + if (cloud.getPosition().equals(position)) { + result.add(ModelElement.CLOUD); + } + } if (fire.getFirePositions().contains(position)) result.add(ModelElement.FIRE); return result; @@ -78,6 +93,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { if (step % 2 == 0){ modifiedPositions.addAll(fire.spreadFire()); } + // Déplacer les nuages et éteindre les feux + for (Cloud cloud : clouds) { + cloud.moveRandomly(); + cloud.extinguishFire(fire); + } step++; return modifiedPositions; @@ -128,6 +148,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> { switch (element) { case FIRE -> fire.getFirePositions().add(position); case FIREFIGHTER -> firefighters.add(new Firefighter(position)); + case CLOUD -> clouds.add(new Cloud(position, neighbors)); + } } }