Newer
Older
import model.Board.Board;
import model.Elements.Obstacle.Mountain;
import model.Elements.Obstacle.Obstacle;
import model.Elements.Obstacle.Road;
import util.Position;
public class Fire implements Element {
private Neighbour neighbour;
private final ModelElement modelElement;
public Fire(Position position){
MEHDI
committed
modelElement = ModelElement.FIRE;
public Position getPosition() {
return position;
@Override
public ModelElement getElement() {
return modelElement;
}
public void setPosition(Position position) {
this.position = position;
MEHDI
committed
public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
this.neighbour = new Neighbour(firefighterBoard);
List<Position> modifiedPositions = new ArrayList<>();
if (firefighterBoard.stepNumber() % 2 == 0) {
MEHDI
committed
Set<Position> newFirePositions = new HashSet<>();
for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) {
newFirePositions.addAll(removeMountainAndRoads(firefighterBoard,fire));
MEHDI
committed
for (Position position : newFirePositions) {
if (!firefighterBoard.getFires().containsKey(position)) {
firefighterBoard.getFires().put(position, new Fire(position));
modifiedPositions.add(position);
}
}
}
return modifiedPositions;
private List<Position>removeMountainAndRoads(Board<List<ModelElement>> firefighterBoard,Position position){
List<Position>neighboursAvailable;
neighboursAvailable = this.neighbour.getNeighbors().get(position);
if(firefighterBoard.stepNumber()%4==0){
List<Position>MountainAndRoadsPositions = new ArrayList<>();
for(Obstacle obstacle : firefighterBoard.getObstacles().values()){
MountainAndRoadsPositions.add(obstacle.getPosition());
neighboursAvailable.removeAll(MountainAndRoadsPositions);
}
}
}
else{
neighboursAvailable.removeAll(firefighterBoard.getObstacles().keySet());
}
return neighboursAvailable;
}