Select Git revision
FirefighterGrid.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 2.23 KiB
package model;
import util.Position;
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 Fires fires;
private FireFighters fireFighters;
private int step = 0;
public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
this.columnCount = columnCount;
this.rowCount = rowCount;
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
initializeElements();
}
public void initializeElements() {
this.fires = new Fires();
this.fireFighters = new FireFighters();
fires.initializeElements(initialFireCount,rowCount,columnCount);
fireFighters.initializeElements(initialFirefighterCount,rowCount,columnCount);
}
@Override
public List<ModelElement> getState(Position position) {
List<ModelElement> result = new ArrayList<>();
for(Position firefighterPosition : fireFighters.getFireFightersPositions())
if (firefighterPosition.equals(position))
result.add(new FireFighters());
if(fires.getFirePositions().contains(position))
result.add(new Fires());
return result;
}
@Override
public int rowCount() {
return rowCount;
}
@Override
public int columnCount() {
return columnCount;
}
public List<Position> updateToNextGeneration() {
List<Position> result = fireFighters.updateFirefighters(fires.getFirePositions());
result.addAll(fires.updateFires());
//step ++;
fires.incrementStep();
return result;
}
@Override
public int stepNumber() {
return step;
}
@Override
public void reset() {
step = 0;
initializeElements();
}
@Override
public void setState(List<ModelElement> state, Position position) {
fires.extinguish(position);
for (;;) {
if (!fireFighters.getFireFightersPositions().remove(position)) break;
}
for(ModelElement element : state){
if (element instanceof Fires){
fires.add(position);
}
if (element instanceof FireFighters){
fireFighters.add(position);
}
}
}
}