Select Git revision
FFBoard.java
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
-
BACHTARZI Imed eddine authored
used the Factory Method through ElementFactory
BACHTARZI Imed eddine authoredused the Factory Method through ElementFactory
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FFBoard.java 2.54 KiB
package model;
import util.Position;
import util.TargetStrategy;
import java.lang.reflect.InvocationTargetException;
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();
for (int index = 0; index < initialFireCount; index++)
boardData.addElement(new StandardFire(randomPosition()));
for (int index = 0; index < initialFirefighterCount; index++)
boardData.addElement(new StandardFireFighter(randomPosition()));
for (int index = 0; index < 2; index++)
boardData.addElement(new MotorizedFireFighter(randomPosition()));
for (int index = 0; index < 10; index++)
boardData.addElement(new Cloud(randomPosition()));
for (int index = 0; index < 50; index++)
boardData.addElement(new Road(randomPosition()));
}
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));
}
}
}