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

FireFighter.java

Blame
  • 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.
    FireFighter.java 4.41 KiB
    package model;
    import java.util.ArrayList;
    import java.util.List;
    
    import javafx.scene.paint.Color;
    import util.Position;
    import util.PositionUtil;
    
    public class FireFighter implements Entity{
        private int age;
        private Position position;
        private final Color viewColor = Color.BLUE;
    
    
        public FireFighter(Position position, Board<Entity> b){
            this.position = position;
            this.age = 0;
        }
        public FireFighter(Position position, Board<Entity> b, int age){
            this.position = position;
            this.age = age;
        }
        
        public List<Position> nextTurn(Board<Entity> b) {
            List<Position> positions = new ArrayList<>();
        
            // Générer les positions adjacentes
            List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
        
            // Vérifier s'il y a du feu dans une des positions adjacentes
            boolean hasFire = adjacentPositions.stream()
                                               .anyMatch(p -> b.getState(p) instanceof Fire);
        
            if (hasFire) {
                // Si du feu est trouvé, on éteint les feux adjacents
                positions.addAll(extinguish(adjacentPositions, b));
            } else {
                // Chercher la position du feu le plus proche
                Position nearestFirePos = b.getNearestEntity(position, Fire.class);
        
                if (nearestFirePos != null && !nearestFirePos.equals(position)) {
                    // Trouver la meilleure position pour se rapprocher du feu
                    Position nextPos = getNextPositionTowards(position, nearestFirePos, b);
        
                    if (nextPos != null) {
                        // Mettre à jour la position du pompier
                        b.clearCase(position); // Vider l'ancienne case
                        positions.add(new Position(position.x(), position.y()));
                        this.position = nextPos;
                        b.setState(this, nextPos); // Mettre à jour la nouvelle case
                        positions.add(nextPos);
                        adjacentPositions = PositionUtil.generateAdjacentPositions(nextPos, b);
                        positions.addAll(extinguish(adjacentPositions, b));
                    } 
                    // Aucun déplacement possible = le pompier reste sur place
                }
            }
        
            return positions;
        }
        
        private List<Position> extinguish(List<Position> adjacentPositions, Board<Entity> b) {
            List<Position> extinguishedPositions = new ArrayList<>();
            for (Position p : adjacentPositions) {
                if (b.getState(p) instanceof Fire) {
                    b.clearCase(p);
                    extinguishedPositions.add(p); // Ajouter la position où le feu a été éteint
                }
            }
            return extinguishedPositions;