diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 14f8fbbaf452fc8b5dd923e2c6a4ec38eb441808..a2d7b95bdd1335ff818e23b64d4d5cf1b574323e 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -13,16 +13,16 @@ import javafx.stage.Stage; public class SimulatorApplication extends javafx.application.Application { private static final String VIEW_RESOURCE_PATH = "/view/view.fxml"; private static final String APP_NAME = "Firefighter simulator"; - private static final int ROW_COUNT = 50; - private static final int COLUMN_COUNT = 50; + private static final int ROW_COUNT = 40; + private static final int COLUMN_COUNT = 40; private static final int BOX_WIDTH = 15; private static final int BOX_HEIGHT = 15; - public static final int INITIAL_FIRE_COUNT = 6; - public static final int INITIAL_FIREFIGHTER_COUNT = 32; - public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 10; - public static final int INITIAL_CLOUD_COUNT = 15; - public static final int INITIAL_MOUNTAIN_COUNT= 28; - public static final int TURNS_FOR_SPAWNING_AIRTANKER = 4; + public static final int INITIAL_FIRE_COUNT = 8; + public static final int INITIAL_FIREFIGHTER_COUNT = 6; + public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 8; + public static final int INITIAL_CLOUD_COUNT = 20; + public static final int INITIAL_MOUNTAIN_COUNT= 20; + public static final int TURNS_FOR_SPAWNING_AIRTANKER = 10; private Stage primaryStage; private Parent view; diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 0e99dcf451a07e5b6f780a534750ec8cc110bd9c..1cf89653fbc8e469e235f1f8a9ba3fddc836b6b0 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -20,15 +20,15 @@ import javafx.scene.control.ToggleGroup; import javafx.util.Duration; import javafx.util.Pair; import model.Board; -import model.Cloud; import model.EntityFactory; -import model.Fire; -import model.FireFighter; -import model.FireFighterScenario; -import model.MotorizedFireFighter; -import model.Mountain; -import model.Rockery; import model.Square; +import model.firefighterscenario.Cloud; +import model.firefighterscenario.Fire; +import model.firefighterscenario.FireFighter; +import model.firefighterscenario.FireFighterScenario; +import model.firefighterscenario.MotorizedFireFighter; +import model.firefighterscenario.Mountain; +import model.firefighterscenario.Rockery; import util.Position; import view.Grid; import view.ViewElement; @@ -136,7 +136,7 @@ public class Controller { entityCounts.put((pos, b) -> new MotorizedFireFighter(pos, b), initialMotorizedFirefightersCount); entityCounts.put((pos, b) -> new Cloud(pos, b), initialcloudCount); entityCounts.put((pos, b) -> new Mountain(pos), initialmountaincount); - entityCounts.put((pos, b) -> new Rockery(pos), 30); + entityCounts.put((pos, b) -> new Rockery(pos), 3); model.placeInitialEntities(entityCounts); this.setModel(model); diff --git a/src/main/java/model/AirTanker.java b/src/main/java/model/firefighterscenario/AirTanker.java similarity index 98% rename from src/main/java/model/AirTanker.java rename to src/main/java/model/firefighterscenario/AirTanker.java index 4f4bfc1df8894ef120025037df971826b6a31e50..a80fdb66bfae4e2c565b1406f12c8afe4e7bda70 100644 --- a/src/main/java/model/AirTanker.java +++ b/src/main/java/model/firefighterscenario/AirTanker.java @@ -1,10 +1,13 @@ -package model; +package model.firefighterscenario; import java.util.ArrayList; import java.util.List; import java.util.Objects; import javafx.scene.paint.Color; +import model.Board; +import model.Entity; +import model.Square; import util.Direction; import util.Position; import util.PositionUtil; diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/firefighterscenario/Cloud.java similarity index 92% rename from src/main/java/model/Cloud.java rename to src/main/java/model/firefighterscenario/Cloud.java index 840195d26c315cd96613654b323c2164ebbfb056..3a587b5594531ee34f995f4840a82fdfa3bdefcb 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/firefighterscenario/Cloud.java @@ -1,9 +1,13 @@ -package model; +package model.firefighterscenario; import java.util.List; import java.util.Random; import javafx.scene.paint.Color; +import model.Board; +import model.EmptySquare; +import model.Entity; +import model.Square; import util.Position; import util.PositionUtil; @@ -37,6 +41,9 @@ public class Cloud implements Entity{ adjacentPositions.removeIf(p -> b.doesSquareContainEntity(p, FireFighter.class)); // Choisir une position aléatoire parmi les mouvements possibles + if(adjacentPositions.size() < 0){ + return List.of(); + } Position next_position = adjacentPositions.get(new Random().nextInt(adjacentPositions.size())); // Si la nouvelle position contient un feu, éteindre le feu diff --git a/src/main/java/model/Fire.java b/src/main/java/model/firefighterscenario/Fire.java similarity index 97% rename from src/main/java/model/Fire.java rename to src/main/java/model/firefighterscenario/Fire.java index 332481980f949dbc74737e71f6986fd0828b9602..0d79d7a5a8a0de817dac0f192711f547627a6a4a 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/firefighterscenario/Fire.java @@ -1,4 +1,4 @@ -package model; +package model.firefighterscenario; import java.util.ArrayList; import java.util.List; @@ -6,6 +6,9 @@ import java.util.Objects; import java.util.Optional; import javafx.scene.paint.Color; +import model.Board; +import model.Entity; +import model.Square; import util.Position; import util.PositionUtil; diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/firefighterscenario/FireFighter.java similarity index 97% rename from src/main/java/model/FireFighter.java rename to src/main/java/model/firefighterscenario/FireFighter.java index cf4307bf1dba849c852e39fd2020dbde47490ad5..8adfeba28784f7462854258e4315bd6d0129ae07 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/firefighterscenario/FireFighter.java @@ -1,9 +1,13 @@ -package model; +package model.firefighterscenario; import java.util.ArrayList; import java.util.List; import java.util.Random; import javafx.scene.paint.Color; +import model.Board; +import model.EmptySquare; +import model.Entity; +import model.Square; import util.Position; import util.PositionUtil; @@ -129,7 +133,7 @@ public class FireFighter implements Entity { List<Position> possibleMoves = PositionUtil.generateAllAdjacentPositions(currentPos, b); // Filter out positions that are not empty or contain obstacles - possibleMoves.removeIf(p -> !b.isPositionEmpty(p) || b.doesSquareContainEntity(p, Mountain.class)); + possibleMoves.removeIf(p -> b.doesSquareContainEntity(p, Mountain.class)); // If no possible moves, return null if (possibleMoves.isEmpty()) { diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/firefighterscenario/FireFighterScenario.java similarity index 94% rename from src/main/java/model/FireFighterScenario.java rename to src/main/java/model/firefighterscenario/FireFighterScenario.java index 66e0be1f922cf2721d1d16f0b0a5128a9e0506f6..658e958f83b44936128658603b802895a69197a7 100644 --- a/src/main/java/model/FireFighterScenario.java +++ b/src/main/java/model/firefighterscenario/FireFighterScenario.java @@ -1,4 +1,4 @@ -package model; +package model.firefighterscenario; import java.util.ArrayList; import java.util.Iterator; @@ -6,6 +6,13 @@ import java.util.List; import java.util.Map; import java.util.Random; +import app.SimulatorApplication; +import model.Board; +import model.Entity; +import model.EntityFactory; +import model.EntityScenario; +import model.EntitySpawner; +import model.Square; import util.Matrix; import util.PathGenerator; import util.Position; @@ -15,12 +22,14 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> private Matrix<Square> matrix; private int step; + private int turnsToSpawnAirTanker; private Map<EntityFactory, Integer> initialMap; public FireFighterScenario(int columns, int rows) { this.matrix = new Matrix<Square>(columns, rows); initScenario(matrix); + this.turnsToSpawnAirTanker = SimulatorApplication.TURNS_FOR_SPAWNING_AIRTANKER; this.step = 0; } @@ -105,7 +114,8 @@ public class FireFighterScenario extends EntityScenario implements Board<Square> this.step = this.step + 1; // Check if it's time to spawn an AirTanker - if (this.step % 8 == 0) { + if (this.step % this.turnsToSpawnAirTanker == 0) { + System.out.println("apparation"); // Spawn an AirTanker at a random edge position spawnAirTanker(changedPositions); } diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/firefighterscenario/MotorizedFireFighter.java similarity index 98% rename from src/main/java/model/MotorizedFireFighter.java rename to src/main/java/model/firefighterscenario/MotorizedFireFighter.java index 146fb381e621e9c5b19ef88f71b63c4c0029498d..3564d384fe27f81e247b438324e3cbf86b5b6767 100644 --- a/src/main/java/model/MotorizedFireFighter.java +++ b/src/main/java/model/firefighterscenario/MotorizedFireFighter.java @@ -1,9 +1,11 @@ -package model; +package model.firefighterscenario; import java.util.ArrayList; import java.util.List; import javafx.scene.paint.Color; +import model.Board; +import model.Square; import util.Position; import util.PositionUtil; diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/firefighterscenario/Mountain.java similarity index 91% rename from src/main/java/model/Mountain.java rename to src/main/java/model/firefighterscenario/Mountain.java index 4315c6fa6f354b7f4d224f94ebb62485cc45148c..e229c30a0f9d35af7e80c7c8e28a8da1bcf72db4 100644 --- a/src/main/java/model/Mountain.java +++ b/src/main/java/model/firefighterscenario/Mountain.java @@ -1,8 +1,11 @@ -package model; +package model.firefighterscenario; import java.util.List; import javafx.scene.paint.Color; +import model.Board; +import model.Entity; +import model.Square; import util.Position; public class Mountain implements Entity{ diff --git a/src/main/java/model/Road.java b/src/main/java/model/firefighterscenario/Road.java similarity index 91% rename from src/main/java/model/Road.java rename to src/main/java/model/firefighterscenario/Road.java index aacbd8e7a3d4f9408c550a73e57f25093f3df0dd..fa90dc7d64b4995d5271810209395ab11c45547c 100644 --- a/src/main/java/model/Road.java +++ b/src/main/java/model/firefighterscenario/Road.java @@ -1,8 +1,11 @@ -package model; +package model.firefighterscenario; import java.util.List; import javafx.scene.paint.Color; +import model.Board; +import model.Entity; +import model.Square; import util.Position; public class Road implements Entity{ diff --git a/src/main/java/model/Rockery.java b/src/main/java/model/firefighterscenario/Rockery.java similarity index 93% rename from src/main/java/model/Rockery.java rename to src/main/java/model/firefighterscenario/Rockery.java index 6aebd270145bc6f2f745560d1dca444e4111808f..9b64db33ec04539cdbc3d5bd428992455292d7f9 100644 --- a/src/main/java/model/Rockery.java +++ b/src/main/java/model/firefighterscenario/Rockery.java @@ -1,8 +1,11 @@ -package model; +package model.firefighterscenario; import java.util.List; import javafx.scene.paint.Color; +import model.Board; +import model.Entity; +import model.Square; import util.Position; public class Rockery implements Entity{ diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java index 920d2a49a71cd781c3eb3458a353866050c23358..36a06da1550e9d89446c4f936d695a8bdab698fe 100644 --- a/src/main/java/util/Matrix.java +++ b/src/main/java/util/Matrix.java @@ -5,9 +5,9 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.NoSuchElementException; -import model.Fire; -import model.FireFighter; import model.Square; +import model.firefighterscenario.Fire; +import model.firefighterscenario.FireFighter; public class Matrix<E> implements Iterable<E> { private ArrayList<ArrayList<E>> matrix;