Skip to content
Snippets Groups Projects
Select Git revision
  • f996b97f3c75ed73409b15f142f45a746ddc6eeb
  • main default protected
  • melissa
  • yanis
  • variant
5 results

FireFighterScenario.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.
    FireFighterScenario.java 4.44 KiB
    package model.firefighterscenario;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    
    import model.Board;
    import model.Entity;
    import model.EntityFactory;
    import model.Model;
    import model.Road;
    import model.Scenario;
    import model.Square;
    import util.PathGenerator;
    import util.Position;
    
    public class FireFighterScenario extends Scenario implements Model{
      public FireFighterScenario(int columns, int rows, Map<EntityFactory, Integer> initialMap) {
        super(columns, rows, initialMap);
        generateRoads();
      }
    
      public List<Position> updateToNextGeneration() {
        ArrayList<Position> changedPositions = new ArrayList<>();
        Iterator<Square> iterator = getMatrix().iterator();
        List<Entity> updatedEntities = new ArrayList<Entity>();
        while (iterator.hasNext()) {
          Square s = iterator.next();
          if (s.isEmpty())
            continue;
          if (s.getMaxAge() == 0) {
            s.incrementAllAges();
            continue;
          }
          if (s.getMaxAge() == step + 1) {
            continue;
          }
          List<Entity> entities = new ArrayList<>(s.getEntities());
          for (Entity e : entities) {
            if(updatedEntities.contains(e))continue;
            if (e.getAge() >= stepNumber() - 1) {
              continue;
            }
            e.incrementAge();
            updatedEntities.add(e);
            changedPositions.addAll(e.nextTurn(this));
          }
        }
    
        // Increment the step counter
        this.step = this.step + 1;
    
        // Check if it's time to spawn an AirTanker
        if (this.step % this.turnsToSpawnAirTanker == 0) {
          // Spawn an AirTanker at a random edge position
          spawnAirTanker(changedPositions);
        }
    
        return changedPositions;
      }
    
      // Helper method to spawn an AirTanker
      private void spawnAirTanker(List<Position> changedPositions) {
        Random rand = new Random();
        int edge = rand.nextInt(4); // 0: top, 1: bottom, 2: left, 3: right
        Position position = null;
    
        if (edge == 0) { // Top edge (x == 0)