Select Git revision
FFBoard.java
Forked from
COUETOUX Basile / FirefighterStarter
20 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FFBoard.java 2.27 KiB
package model.firefighter;
import model.Board;
import model.BoardData;
import model.Element;
import util.Position;
import java.util.*;
public class FFBoard implements Board<List<ModelElement>> {
private final int columnCount;
private final int rowCount;
private final int initialFireCount;
private final int initialFirefighterCount;
private BoardData boardData;
private FFUpdater FFUpdater ;
private final Random randomGenerator = new Random();
public FFBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
boardData=new FFBoardData(columnCount,rowCount);
FFUpdater=new FFUpdater();
this.columnCount = columnCount;
this.rowCount = rowCount;
this.initialFireCount = initialFireCount;
this.initialFirefighterCount = initialFirefighterCount;
initializeElements();
}
public void initializeElements() {
boardData.initialize();
FFUpdater= new FFUpdater();
FFboardFiller filler=new FFboardFiller();
filler.fillBoard(boardData,new int[]{
1,//roads
20,//forests
10,//rocks
30,//mountains
5,//firefighter
2,//motorized firefighter
2,//clouds
10,//fires
});
}
private Position randomPosition() {
return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
}
@Override
public List<ModelElement> getState(Position position) {
List<ModelElement> result=new ArrayList<>();
for (Element e:boardData.getCell(position).Content) {
result.add(e.getType());
}
return result;
}
@Override
public int rowCount() {
return rowCount;
}
@Override
public int columnCount() {
return columnCount;
}
public List<Position> updateToNextGeneration() {
List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
boardData.setStep(boardData.getStep()+1);
return modifiedPositions;
}
@Override
public int stepNumber() {
return boardData.getStep();
}
@Override
public void reset() {
initializeElements();
}
@Override
public void setState(List<ModelElement> state, Position position) {
for (ModelElement modelElement: state) {
boardData.addElement(modelElement.instanciate(position));
}
}
}