From cf33c3bd623fda2a3b8e31809d0dccecbf119a55 Mon Sep 17 00:00:00 2001 From: melizzzz <152108637+melizzzz@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:03:02 +0100 Subject: [PATCH] Ajout des montagnes --- src/main/java/app/SimulatorApplication.java | 3 +- src/main/java/controller/Controller.java | 4 +- src/main/java/model/Cloud.java | 2 + src/main/java/model/EmptyEntity.java | 5 +- src/main/java/model/EmptySquare.java | 6 ++ src/main/java/model/Fire.java | 1 + src/main/java/model/FireFighter.java | 10 ++- src/main/java/model/FireFighterScenario.java | 25 +++++--- src/main/java/model/Mountain.java | 64 ++++++++++++++++++++ 9 files changed, 103 insertions(+), 17 deletions(-) create mode 100644 src/main/java/model/Mountain.java diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index d90b839..0b2081c 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 ab6b16b..5996272 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 c8f74ff..52ad4a1 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 6a916b8..69ce927 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 1fff9c1..aa7c5de 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 7028c9c..b3d5780 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 8ce37e2..e206765 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 091276f..1e5a5f1 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 0000000..e9587e2 --- /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; + } +} -- GitLab