Select Git revision
EntityScenario.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.
Fires.java 2.30 KiB
package model;
import util.Position;
import java.util.*;
public class Fires implements ModelElement {
private Set<Position> firePositions;
private int step;
private int rowCount;
private int columnCount;
private final Random randomGenerator = new Random();
public Fires() {
}
public void add(Position newPositions){
firePositions.add(newPositions);
}
public Set<Position> getFirePositions() {
return firePositions;
}
public List<Position> updateFires() {
List<Position> result = new ArrayList<>();
if (step % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>();
for (Position fire : firePositions) {
newFirePositions.addAll(neighbors(fire, fire.row(), fire.column()));
}
firePositions.addAll(newFirePositions);
result.addAll(newFirePositions);
}
return result;
}
public void incrementStep(){
this.step ++;
}
public void initializeElements(int initialFireCount, int rowCount, int columnCount) {
//this.step=step;
this.columnCount = columnCount;
this.rowCount = rowCount;
firePositions = new HashSet<>();
for (int index = 0; index < initialFireCount; index++)
firePositions.add(randomPosition());
}
@Override
public Position randomPosition() {
if (rowCount <= 0 || columnCount <= 0) {
throw new IllegalArgumentException("Les limites doivent être positives");
}
return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
}
public void extinguish(Position position) {
firePositions.remove(position);
}
private List<Position> neighbors(Position position, int rowCount, int columnCount) {
List<Position> list = new ArrayList<>();
if (position.row() > 0) list.add(new Position(position.row() - 1, position.column()));
if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1));
if (position.row() < rowCount - 1) list.add(new Position(position.row() + 1, position.column()));
if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1));
return list;
}
}