Select Git revision
FirefighterBoard.java
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FirefighterBoard.java 4.27 KiB
package model;
import util.Position;
import util.TargetStrategy;
import java.util.*;
public class FirefighterBoard implements Board<List<ModelElement>> {
private final int columnCount;
private final int rowCount;
private final int initialFireCount;
private final int initialFirefighterCount;
private final FireManager fireManager;
private final FirefighterManager firefighterManager;
private List<Position> firefighterPositions;
private Set<Position> firePositions;
private final Position[][] positions;
private int step = 0;
private final Map<Position, List<Position>> neighbors = new HashMap<>();
private final Random randomGenerator = new Random();
public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
this.positions = new Position[rowCount][columnCount];
initializePositions();
initializeNeighbors();
// Initialize managers
this.fireManager = new FireManager(new HashSet<>());
this.firefighterManager = new FirefighterManager(new ArrayList<>(), fireManager);
initializeElements();
}
private void initializeNeighbors() {
for (int column = 0; column < columnCount; column++) {
for (int row = 0; row < rowCount; row++) {
List<Position> list = new ArrayList<>();
if (row > 0) list.add(positions[row - 1][column]); // Voisin du haut
if (column > 0) list.add(positions[row][column - 1]); // Voisin de gauche
if (row < rowCount - 1) list.add(positions[row + 1][column]); // Voisin du bas
if (column < columnCount - 1) list.add(positions[row][column + 1]); // Voisin de droite
neighbors.put(positions[row][column], list);
}
}
}
private void initializePositions()
{
// Initialize positions
for (int column = 0; column < columnCount; column++) {
for (int row = 0; row < rowCount; row++) {
positions[row][column] = new Position(row, column);
}
}
}
public void initializeElements() {
// Initialize fires
fireManager.initializeFires(initialFireCount, rowCount, columnCount, randomGenerator);
// Initialize firefighters
List<Position> firefighterPositions = new ArrayList<>();
for (int index = 0; index < initialFirefighterCount; index++) {
firefighterPositions.add(randomPosition());
}
firefighterManager.getFirefighterPositions().clear();