Skip to content
Snippets Groups Projects
Select Git revision
  • 52a69581b88d01dde56f84e15466d55d7514ca73
  • main default protected
  • correction_video
  • going_further
  • ImprovedMouseInteraction
  • final2023
  • template
  • ModifGUI
8 results

MatrixPane.java

Blame
  • Forked from NAVES Guyslain / Game of life Template
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FirefighterBehavior.java 2.70 KiB
    package model;
    
    import util.Position;
    import util.TargetStrategy;
    
    import java.util.*;
    
    public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> {
        List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);
        ModelElement removedElement=ModelElement.FIRE;
        TargetStrategy targetStrategy=new TargetStrategy();
    
        public FirefighterBehavior(ModelElement modelElement) {
            super(modelElement);
        }
    
    
        @Override
        public List<Position> getNext(BoardData boardData) {
            List<Position> firefighterPositions = boardData.getPositions().get(element.ordinal());
            List<Position> firePositions = new ArrayList<>(List.copyOf(boardData.getPositions().get(ModelElement.FIRE.ordinal())));
            List<Position> firefighterNewPositions = new ArrayList<>();
            Map<Position,List<Position>> neigbours=legalNeighbors(boardData);
            for (Position firefighterPosition : firefighterPositions) {
                Position newFirefighterPosition = targetStrategy.neighborClosestToFire(firefighterPosition,firePositions, neigbours);
                firefighterNewPositions.add(newFirefighterPosition);
                firePositions.remove(newFirefighterPosition);
                firePositions.remove(boardData.getNeighbors().get(newFirefighterPosition));
            }
            return firefighterNewPositions;
        }
        public List<Position> remove(BoardData boardData,Position p){
            List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal());
            List<Position> neighborFirePositions = boardData.getNeighbors().get(p).stream()
                    .filter(firePositions::contains).toList();
            removePartial(boardData,p);
            for (Position firePosition : neighborFirePositions)
                removePartial(boardData,firePosition);
            return neighborFirePositions;
        }
    
    
        @Override
        public List<ModelElement> getObstacles() {
            return obstacles;
        }
    
        @Override
        public void removePartial(BoardData boardData,Position p) {
            List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal());
            firePositions.remove(p);
        }
    
        @Override
        public Map<Position, List<Position>> legalNeighbors(BoardData boardData) {
            Map<Position,List<Position>> neigbours= Map.copyOf(super.legalNeighbors(boardData));
            for (Map.Entry<Position,List<Position>> entry: neigbours.entrySet()) {
                for (ModelElement e:getObstacles()) {
                    entry.getValue().removeAll(boardData.getPositions().get(e.ordinal()));
                }
            }
            return neigbours;
        }
    
        @Override
        public ModelElement getElementToRemove() {
            return removedElement;
        }
    }