diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index d90b83939c71dd2135935acae277145bdaac1c7d..0b2081cdd9186f46454e0c82ac0bce3ce81f5769 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -20,6 +20,7 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIRE_COUNT = 3; public static final int INITIAL_FIREFIGHTER_COUNT = 6; public static final int INITIAL_CLOUD_COUNT = 6; + public static final int INITIAL_MOUNTAIN_COUNT= 30; private Stage primaryStage; private Parent view; @@ -46,7 +47,7 @@ public class SimulatorApplication extends javafx.application.Application { view = loader.load(); Controller controller = loader.getController(); controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT, INITIAL_MOUNTAIN_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index ab6b16b32824c1247a65b11529685b27afd7baae..5996272aa9a88ea56727eeab08a687b78087c948 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -122,9 +122,9 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount, int initialcloudCount) { + int rowCount, int initialFireCount, int initialFirefighterCount, int initialcloudCount, int initialmountaincount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount)); + this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialcloudCount, initialmountaincount)); repaintGrid(); } diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index c8f74ff90370e907aae287daf2f455308e3470c5..52ad4a1846097b7cb9a99325dd94ccbdd77761e9 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -33,6 +33,8 @@ public class Cloud implements Entity{ public List<Position> nextTurn(Board<Square> b) { List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b); adjacentPositions.removeIf( p -> b.doesSquareContainEntity(p, Cloud.class)); + adjacentPositions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class)); + // Filtrer pour obtenir uniquement les positions qui ne contiennent pas de pompier adjacentPositions.removeIf(p -> b.doesSquareContainEntity(p, FireFighter.class)); diff --git a/src/main/java/model/EmptyEntity.java b/src/main/java/model/EmptyEntity.java index 6a916b89c626b4a0fcbdda433592f07a0cb2050a..69ce92772341497e5da5e6605d9bbff936996bcd 100644 --- a/src/main/java/model/EmptyEntity.java +++ b/src/main/java/model/EmptyEntity.java @@ -8,7 +8,7 @@ import util.Position; public class EmptyEntity implements Entity{ - + private final int priority=3; private Position position; private int age; public EmptyEntity(Position position){ @@ -55,5 +55,8 @@ public class EmptyEntity implements Entity{ public Color getViewColor() { return Color.WHITE; } + + @Override + public int getPriority(){return this.priority;} } \ No newline at end of file diff --git a/src/main/java/model/EmptySquare.java b/src/main/java/model/EmptySquare.java index 1fff9c1aecc10deab3c0515e3a49b9630df5e5e1..aa7c5dee8d7e942ccf67ca63824c71531e237947 100644 --- a/src/main/java/model/EmptySquare.java +++ b/src/main/java/model/EmptySquare.java @@ -11,6 +11,7 @@ public class EmptySquare implements Entity { private Position position; private final Color viewColor = Color.WHITE; private int age; + private final int priotity = 0; public EmptySquare(Position p) { this.position = p; @@ -55,4 +56,9 @@ public class EmptySquare implements Entity { public void setAge(int age) { this.age = age; } + + @Override + public int getPriority(){ + return this.priotity; + } } diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 7028c9c64fa20e7ef3a41a2b956620c5043e884a..b3d57801bd57c79399578fce3728fd081fcf6eea 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -32,6 +32,7 @@ public class Fire implements Entity { if (board.getStepNumber() % 2 == 0) return new ArrayList<Position>(); List<Position> positions = PositionUtil.generateAdjacentPositions(position, board); + positions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class)); for (Position p : positions) { if (b.getStates(p).isEmpty() && !b.getStates(p).getEntities().contains(Cloud.class)) { if (b.getStates(p).getMaxAge() < b.getStepNumber() diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java index 8ce37e29a122aae1016ef23e921f16a6047ba9b8..e206765c44f675019cb90fc054c926e0d36e170c 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/FireFighter.java @@ -1,12 +1,9 @@ package model; +import java.util.*; +import javafx.scene.paint.Color; +import util.*; -import java.util.ArrayList; -import java.util.List; -import javafx.scene.paint.Color; -import util.Position; -import util.PositionUtil; -import util.PositionUtil; public class FireFighter implements Entity { private int age; @@ -29,6 +26,7 @@ public class FireFighter implements Entity { // Générer les positions adjacentes List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b); + adjacentPositions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class)); // Vérifier s'il y a du feu dans une des positions adjacentes boolean hasFire = adjacentPositions.stream() diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java index 091276f10733fdfde65ca8b62087195173c9fc57..1e5a5f1fd905e7e51a1f1b09bb09645494fa7f59 100644 --- a/src/main/java/model/FireFighterScenario.java +++ b/src/main/java/model/FireFighterScenario.java @@ -22,21 +22,24 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> private int initialFireCount; private int initialFireFightersCount; private int intialCloudCount; + private int initialMoutainCount; - public FireFighterScenario(int columns, int rows, int initialFireCount, int initialFireFightersCount, int initialCloudCount) { + 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); + placeInitialActors(initialFireCount, initialFireFightersCount, initialCloudCount, initialMoutainCount); this.step = 0; } - private void placeInitialActors(int initialFireCount, int initialFireFightersCount, int initialCloudCount) { + 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<>(); @@ -54,7 +57,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> if (fireCount < initialFireCount && random.nextInt(100) < chance) { setSquare(new Square(pos, new Fire(pos, this, 1))); fireCount++; - if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) { + if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount && moutainCount == initialMoutainCount) { return; } continue; @@ -63,7 +66,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) { setSquare(new Square(pos, new FireFighter(pos, this, 1))); fireFighterCount++; - if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) { + if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount && moutainCount == initialMoutainCount) { return; } } @@ -71,7 +74,15 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> if (cloudCount < intialCloudCount && random.nextInt(100) < chance) { setSquare(new Square(pos, new Cloud(pos, this, 1))); cloudCount++; - if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount) { + if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount && moutainCount == initialMoutainCount) { + return; + } + } + + if (moutainCount < initialMoutainCount && random.nextInt(100) < chance) { + setSquare(new Square(pos, new Mountain(pos, 1))); + moutainCount++; + if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount && cloudCount == initialCloudCount && moutainCount == initialMoutainCount) { return; } } @@ -198,7 +209,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> step = 0; matrix.clear(); initScenario(matrix); - placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount); + placeInitialActors(initialFireCount, initialFireFightersCount, intialCloudCount, initialMoutainCount); } public int stepNumber() { diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/Mountain.java new file mode 100644 index 0000000000000000000000000000000000000000..e9587e2445d4ecf1dc43860ef665d6d30e7ce6f6 --- /dev/null +++ b/src/main/java/model/Mountain.java @@ -0,0 +1,64 @@ +package model; + +import javafx.scene.paint.Color; +import util.Position; + +import java.util.List; + +public class Mountain implements Entity{ + private final int priority = 3; + Position position; + private int age; + private final Color viewColor = Color.YELLOW; + + public Mountain(Position p ){ + this.position = p; + } + + + public Mountain(Position p , int age){ + this.position = p; + this.age = age; + } + + @Override + public List<Position> nextTurn(Board<Square> board) { + return List.of(); + } + + @Override + public Position getPosition() { + return this.position; + } + + @Override + public void setPosition(Position p) { + this.position = position; + + } + + @Override + public int getAge() { + return this.age; + } + + @Override + public void setAge(int age) { + this.age = age; + } + + @Override + public void incrementAge() { + this.age += 1; + } + + @Override + public Color getViewColor() { + return this.viewColor; + } + + @Override + public int getPriority() { + return this.priority; + } +}