diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 7c6091a0c3770fc45ecfe6d87d4b9df142aa5db9..ea6f8034b0eeaac4c5c9e5ff81b8c67bfc808913 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -1,36 +1,61 @@ package model; import util.Position; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; + +import java.util.*; public class FirefighterBoard implements Board<List<ModelElement>> { private int rowCount; private int columnCount; - private List<Position> firefighterPositions; - private Set<Position> firePositions; + private final FireManager fireManager; + private final FirefighterManager firefighterManager; + private final NeighborManager neighborManager; + private int step; public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { this.columnCount = columnCount; this.rowCount = rowCount; + this.neighborManager = new NeighborManager(rowCount, columnCount); + + this.fireManager = new FireManager(new SimpleFireSpreadStrategy()); + this.firefighterManager = new FirefighterManager(new SimpleFirefighterMovementStrategy()); + Random random = new Random(); - firefighterPositions = FirefighterManager.initializeFireFightersPositions(initialFirefighterCount, rowCount, columnCount, random); - firePositions = FireManager.initializeFires(initialFireCount,rowCount, columnCount, random); - // Initialize firefighters and fires (you can adapt this code as needed) + fireManager.initializeFires(initialFireCount, rowCount,columnCount, random); + firefighterManager.initializeFireFightersPositions(initialFirefighterCount,rowCount,columnCount,random); + this.step = 0; } @Override public List<ModelElement> getState(Position position) { - // Implement this method to return the state of the given position - return null; // This is just a placeholder + List<ModelElement> elements = new ArrayList<>(); + + // Check if the position contains a fire + if (fireManager.getFirePositions().contains(position)) { + elements.add(ModelElement.FIRE); + } + + // Check if the position contains a firefighter + if (firefighterManager.getFirefighterPositions().contains(position)) { + elements.add(ModelElement.FIREFIGHTER); + } + + return elements; } @Override public void setState(List<ModelElement> state, Position position) { - // Implement this method to set the state of the given position + fireManager.extinguish(position); + firefighterManager.getFirefighterPositions().remove(position); + + // Add elements based on the new state + for (ModelElement element : state) { + switch (element) { + case FIRE -> fireManager.getFirePositions().add(position); + case FIREFIGHTER -> firefighterManager.getFirefighterPositions().add(position); + } + } } @Override @@ -45,18 +70,41 @@ public class FirefighterBoard implements Board<List<ModelElement>> { @Override public List<Position> updateToNextGeneration() { - // Implement this method to return updated positions for the next generation - return null; // This is just a placeholder + List<Position> modifiedPositions = new ArrayList<>(); + + // Spread the fires and update affected positions + modifiedPositions.addAll(fireManager.fireSpread(neighborManager.getNeighbors())); + + // Move firefighters and update affected positions + modifiedPositions.addAll(firefighterManager.moveFireFighters( + fireManager.getFirePositions(), + neighborManager.getNeighbors() + )); + + // Increment the step count + step++; + + return modifiedPositions; } @Override public void reset() { - // Implement this method to reset the board + // Reset step and reinitialize managers + this.step = 0; + + Random random = new Random(); + fireManager.getFirePositions().clear(); + firefighterManager.getFirefighterPositions().clear(); + + fireManager.initializeFires(fireManager.getFirePositions().size(), rowCount, columnCount, random); + firefighterManager.initializeFireFightersPositions( + firefighterManager.getFirefighterPositions().size(), rowCount, columnCount, random + ); } @Override public int stepNumber() { - return 0; // This is just a placeholder + return step; } }