Select Git revision
FireFighterBehavior.java
Forked from
COUETOUX Basile / FirefighterStarter
11 commits ahead of the upstream repository.
-
BACHTARZI Imed eddine authoredBACHTARZI Imed eddine authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FireFighterBehavior.java 2.57 KiB
package model;
import util.Position;
import util.TargetStrategy;
import java.util.*;
public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement> {
private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);
private TargetStrategy ts=new TargetStrategy();
List<Position> initializeTargets(BoardData boardData){
List<Position> targets=new ArrayList<>();
for (ModelElement me:ModelElement.values()) {
if (me.isFire()){
System.out.println("0");
for (Element e:boardData.getElements().get(me.ordinal())) {
targets.add(e.getPosition());
}}
}
return targets;
}
@Override
public List<Position> update(BoardData boardData,Element element) {
Position position=element.getPosition();
List<Position> targets=initializeTargets(boardData);
for (int i=0;i<((FireFighter)element).speed;i++) {
position=ts.neighborClosestToFire(position,targets,allLegalNeighbors(boardData));
extinguish(boardData,position);
targets.remove(position);
targets.removeAll(boardData.getNeighbor(position));
}
return List.of(position);
}
@Override
public List<ModelElement> getObstacles() {
return obstacles;
}
public void extinguish(BoardData boardData, Position position){
List<Position> l=new ArrayList<>(legalNeighbors(boardData,position));
l.add(position);
for (Position p:l) {
List<Element> c=new ArrayList<>(boardData.getCell(p).Content);
for (Element e:c) {
if (e instanceof Fire){
boardData.removeElement(e);}
}
}
}
@Override
public List<Position> legalNeighbors(BoardData boardData,Position position) {
List<Position> neighbors=new ArrayList<>(boardData.getNeighbor(position));
for (Position p:boardData.getNeighbor(position)) {
for (Element e:boardData.getCell(p).Content) {
for(ModelElement o:getObstacles())
if (e.getType()==o) neighbors.remove(p);
}
}
return neighbors;
}
@Override
public Map<Position, List<Position>> allLegalNeighbors(BoardData boardData) {
Map<Position, List<Position>> neighbors= new HashMap<>(Map.copyOf(boardData.getNeighbors()));
for (Position pkey: boardData.getNeighbors().keySet()) {
neighbors.replace(pkey,legalNeighbors(boardData,pkey));
}
return neighbors;
}
}