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

SimulatorApplication.java

Blame
  • Forked from LABOUREL Arnaud / Game of life Template
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    MotorizedMovements.java 3.06 KiB
    package model;
    
    import util.Position;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.List;
    
    import static model.BoardFireFighterBehavior.*;
    
    public class MotorizedMovements implements Movements{
        private final ElementFactory<MotorizedFireFighter> motorizedFactory;
        private List<Position> motorizedFighters;
    
        public MotorizedMovements(ElementFactory<MotorizedFireFighter> motorizedFactory) {
            this.motorizedFactory = motorizedFactory;
            this.motorizedFighters = new ArrayList<>();
        }
    
        @Override
        public List<Position> updateElements() {
            List<Position> modifiedPositions = new ArrayList<>();
            List<Position> newPositions = new ArrayList<>();
    
            for (Position currentPosition : motorizedFighters) {
                // Vérification de validité de la position actuelle
                if (!getNeighbors().containsKey(currentPosition)) {
                    System.err.println("Position actuelle invalide : " + currentPosition);
                    newPositions.add(currentPosition);
                    continue;
                }
    
                // Étape 1 : Calcul du premier déplacement
                Position firstStep = getTargetStrategy().neighborClosestToTarget(currentPosition, fireMovements.getPositions(), getNeighbors());
                if (firstStep == null || !getNeighbors().containsKey(firstStep)) {
                    // Aucun déplacement possible, rester sur place
                    System.out.println("Pas de première étape possible pour : " + currentPosition);
                    newPositions.add(currentPosition);
                    continue;
                }
    
                // Étape 2 : Calcul du deuxième déplacement
                Position secondStep = getTargetStrategy().neighborClosestToTarget(firstStep, fireMovements.getPositions(), getNeighbors());
                Position finalPosition = (secondStep != null && getNeighbors().containsKey(secondStep)) ? secondStep : firstStep;
    
                // Ajout de la position finale aux nouvelles positions
                newPositions.add(finalPosition);
    
                // Mise à jour des positions modifiées
                modifiedPositions.add(currentPosition);  // Ancienne position
                modifiedPositions.add(finalPosition);    // Nouvelle position
    
                // Étape 3 : Éteindre les feux à la position finale
                extinguish(finalPosition);
                extinguishNearbyFires(finalPosition, modifiedPositions);
            }
    
            // Mettre à jour les positions globales
            motorizedFighters = newPositions;
            return modifiedPositions;
        }
    
        @Override
        public void initializeElement(int rowCount, int columnCount) {
            motorizedFighters = new ArrayList<>();
            List<MotorizedFireFighter> motorizedFirefighters = motorizedFactory.createElements(rowCount, columnCount);
            for (MotorizedFireFighter motorizedFirefighter : motorizedFirefighters) {
                motorizedFighters.add(motorizedFirefighter.getPosition());
            }
    
        }
    
        @Override
        public Collection<Position> getPositions() {
           return this.motorizedFighters;
        }
    
    }