Select Git revision
PartialCoverage.java
Forked from
LABOUREL Arnaud / M1 INFO FSI TP Template
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FireMovements.java 1.91 KiB
package model;
import util.Position;
import java.util.*;
import static model.BoardFireFighterBehavior.*;
public class FireMovements implements Movements{
private final ElementFactory<Fire> fireFactory;
private Set<Position> firePositions;
public FireMovements(ElementFactory<Fire> fireFactory) {
this.fireFactory = fireFactory;
this.firePositions = new HashSet<>();
}
@Override
public void initializeElement(int rowCount, int columnCount) {
// Feux
List<Fire> fires = fireFactory.createElements(rowCount, columnCount);
for (Fire fire : fires) {
firePositions.add(fire.getPosition());
}
}
@Override
public Collection<Position> getPositions() {
return firePositions;
}
@Override
public List<Position> updateElements() {
List<Position> modifiedPositions = new ArrayList<>();
if (getStep() % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>();
// Pour chaque feu existant, vérifier ses voisins
for (Position fire : firePositions) {
// Si la position voisine est libre (non occupée par un feu ou un pompier), le feu peut se propager
for (Position neighbor : getNeighbors().get(fire)) {
// Vérifier si le feu peut se propager à cette position (pas de feu déjà là et pas un terrain bloqué)
if (canMoveTo(neighbor, firePositions, (List<Position>)getFirefighterPositions()) && !firePositions.contains(neighbor)) {
newFirePositions.add(neighbor);
}
}
}
// Ajouter les nouvelles positions de feu à la liste des feux existants
firePositions.addAll(newFirePositions);
modifiedPositions.addAll(newFirePositions);
}
return modifiedPositions;
}
}