Skip to content
Snippets Groups Projects
Select Git revision
  • a2dd7f6de220147304619b6bc97d652d7f5f23b4
  • 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 7.69 KiB
    package model;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Random;
    
    import util.Matrix;
    import util.Position;
    import util.PositionUtil;
    
    public class FireFighterScenario extends EntityScenario implements Board<Square> {
    
      private Matrix<Square> matrix;
      private int step;
    
      private int initialFireCount;
      private int initialFireFightersCount;
      private int intialCloudCount;
      private int initialMoutainCount;
    
      public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount, int initialCloudCount, int initialMoutainCount) {
        this.matrix = new Matrix<Square>(columns, rows);
        this.initialFireCount = initialFireCount;
        this.initialFireFightersCount = initialFireFightersCount;
        this.intialCloudCount = initialCloudCount;
        this.initialMoutainCount = initialMoutainCount;
        initScenario(matrix);
        placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount, initialMoutainCount);
        this.step = 0;
      }
    
      private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount, int initialMoutainCount) {
        int fireCount = 0;
        int fireFighterCount = 0;
        int cloudCount = 0;
        int moutainCount = 0;
        int chance = 5; // Chance initiale en pourcentage
        Random random = new Random();
        List<Position> positions = new ArrayList<>();
        for (int x = 0; x < matrix.getRows(); x++) {
          for (int y = 0; y < matrix.getColumns(); y++) {
            positions.add(new Position(x, y));
          }
        }
        setSquare(new Square(new Position(0,0), new MotorizedFireFighter(new Position(0,0), this)));
        while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount || cloudCount < intialCloudCount) {
          Collections.shuffle(positions); // Mélange les positions pour un parcours aléatoire
    
          for (Position pos : positions) {
            if (getStates(pos).isEmpty()) {
              if (fireCount < initialFireCount && random.nextInt(100) < chance) {
                setSquare(new Square(pos, new Fire(pos, this, 1)));
                fireCount++;
                if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
                  return;
                }
                continue;
              }
    
              if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
                setSquare(new Square(pos, new FireFighter(pos, this, 1)));
                fireFighterCount++;
                if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount  && moutainCount == initialMoutainCount) {
                  return;
                }
              }
    
              if (cloudCount < intialCloudCount && random.nextInt(100) < chance) {