Skip to content
Snippets Groups Projects
Select Git revision
  • 709906a3b3dac774f571dcc8453f0892dc7800c9
  • main default protected
  • variant
3 results

FireFighterBehavior.java

Blame
  • Forked from COUETOUX Basile / FirefighterStarter
    11 commits ahead of the upstream repository.
    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;
        }
    }