From 1406b784c474d08d3a6a6f2ec1192de3b7d5fecb Mon Sep 17 00:00:00 2001 From: MEHDI <mehdi.belhachemi@etu-univ.amu.fr> Date: Sun, 24 Nov 2024 18:11:04 +0100 Subject: [PATCH] mehdi and mohamed : finishing ModelElement modifications and changing FirefighterBoard implementation --- src/main/java/app/SimulatorApplication.java | 7 +-- src/main/java/controller/Controller.java | 4 +- src/main/java/model/FirefighterBoard.java | 50 +++++------------ src/main/java/model/ModelElement.java | 54 +++++++++++++++++++ src/main/java/util/Neighbour.java | 2 +- src/main/java/util/Position.java | 6 +++ src/test/java/model/FirefighterBoardTest.java | 8 +-- 7 files changed, 81 insertions(+), 50 deletions(-) diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index faa82df..d3c6fa3 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -17,10 +17,6 @@ public class SimulatorApplication extends javafx.application.Application { private static final int COLUMN_COUNT = 20; private static final int BOX_WIDTH = 50; private static final int BOX_HEIGHT = 50; - public static final int INITIAL_FIRE_COUNT = 10; - public static final int INITIAL_FIREFIGHTER_COUNT = 10; - public static final int INITIAL_CLOUD_COUNT = 5; - public static final int INITIAL_ROAD_COUNT = 5; private Stage primaryStage; @@ -46,8 +42,7 @@ public class SimulatorApplication extends javafx.application.Application { loader.setLocation(location); 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_ROAD_COUNT); + controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 0c89bb2..19a03ee 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -131,9 +131,9 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) { + int rowCount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudCount,initialRoadCount)); + this.setModel(new FirefighterBoard(columnCount, rowCount)); repaintGrid(); } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index b58ba0b..21f5089 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -2,7 +2,6 @@ package model; import util.Neighbour; import util.Position; -import util.TargetStrategy; import java.util.*; @@ -10,11 +9,6 @@ import java.util.*; public class FirefighterBoard implements Board<List<ModelElement>> { private final int columnCount; private final int rowCount; - private final int initialFireCount; - private final int initialFirefighterCount; - private final int initialCloudCount; - private final int initialRoadCount; - private Map<Position, Fire> fires = new HashMap<>(); private Map<Position, Extinguisher> extinguishers = new HashMap<>(); @@ -25,17 +19,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private int step = 0; private final Random randomGenerator = new Random(); - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialRoadCount) { + public FirefighterBoard(int columnCount, int rowCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.positions = new Position[rowCount][columnCount]; this.neighbour = new Neighbour(this); initializePositions(); - this.initialFireCount = initialFireCount; - this.initialFirefighterCount = initialFirefighterCount; - this.initialCloudCount = initialCloudCount; - this.initialRoadCount = initialRoadCount; initializeElements(); } @@ -48,30 +38,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } public void initializeElements() { - fires.clear(); - extinguishers.clear(); - obstacles.clear(); - - for (int index = 0; index < initialFireCount; index++) { - Position position = randomPosition(); - fires.put(position,new Fire(position)); - } - - for (int index = 0; index < initialFirefighterCount; index++) { - Position position = randomPosition(); - extinguishers.put(position,new FireFighter(position)); - } - - for (int index = 0; index < initialCloudCount; index++) { - Position position = randomPosition(); - extinguishers.put(position,new Cloud(position)); - } - - for (int index = 0; index < initialRoadCount; index++) { - Position position = randomPosition(); - obstacles.put(position,new Road(position)); + for(ModelElement modelElement : ModelElement.values()){ + for(int elementCount = 0; elementCount< modelElement.getInitialNumber();elementCount++){ + Position position = randomPosition(); + if(modelElement.isObstacle()){ + obstacles.put(position, (Obstacle) modelElement.getModelElementClass(position)); + } else if (modelElement.isExtinguisher()) { + extinguishers.put(position, (Extinguisher) modelElement.getModelElementClass(position)); + } + else{ + fires.put(position, (Fire) modelElement.getModelElementClass(position)); + } + } } - } private Position randomPosition() { @@ -131,9 +110,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> { return step; } - - - public Map<Position,Fire>getFires(){ return this.fires; } diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index b151e95..94616d5 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -1,14 +1,68 @@ package model; +import util.Position; + +import java.util.ArrayList; +import java.util.List; + public enum ModelElement { FIREFIGHTER(10), FIRE(10), CLOUD(10), ROAD(5); + private final int initialNumber; + + ModelElement(int initialNumber) { + this.initialNumber = initialNumber; + } + + public int getInitialNumber(){ + return this.initialNumber; + } + + public Element getModelElementClass(Position position){ + + return switch (this){ + case FIRE -> new Fire(position); + case ROAD -> new Road(position); + case FIREFIGHTER -> new FireFighter(position); + case CLOUD -> new Cloud(position); + default -> throw new IllegalArgumentException("Unknown ModelElement: " + this); + }; + + } + + + + public static List<Integer> getInitialNumbers(){ + List<Integer>listIninitalNumbers = new ArrayList<>(); + for(ModelElement modelElement : ModelElement.values()){ + listIninitalNumbers.add(modelElement.getInitialNumber()); + } + return listIninitalNumbers; + } + + public boolean isObstacle(){ + if(this.getModelElementClass(null) instanceof Obstacle){ + return true; + } + return false; + } + + public boolean isExtinguisher(){ + if(this.getModelElementClass(null) instanceof Extinguisher){ + return true; + } + return false; } + + + + + } diff --git a/src/main/java/util/Neighbour.java b/src/main/java/util/Neighbour.java index c2a6225..1e591d3 100644 --- a/src/main/java/util/Neighbour.java +++ b/src/main/java/util/Neighbour.java @@ -41,6 +41,6 @@ public class Neighbour { public Map<Position, List<Position>> getNeighbors() { - return neighbors; + return this.neighbors; } } diff --git a/src/main/java/util/Position.java b/src/main/java/util/Position.java index 31dc4c1..c25f20d 100644 --- a/src/main/java/util/Position.java +++ b/src/main/java/util/Position.java @@ -1,5 +1,11 @@ package util; +import model.Board; +import model.FirefighterBoard; + +import java.util.Random; + public record Position(int row, int column) { + } diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java index c435da4..e091ac2 100644 --- a/src/test/java/model/FirefighterBoardTest.java +++ b/src/test/java/model/FirefighterBoardTest.java @@ -10,17 +10,17 @@ import static org.assertj.core.api.Assertions.*; public class FirefighterBoardTest { @Test void testColumnCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10); assertThat(board.columnCount()).isEqualTo(20); } @Test void testRowCount(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10); assertThat(board.rowCount()).isEqualTo(10); } @Test void testStepNumber(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3,1,5); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10); for(int index = 0; index < 10; index++){ assertThat(board.stepNumber()).isEqualTo(index); board.updateToNextGeneration(); @@ -29,7 +29,7 @@ public class FirefighterBoardTest { } @Test void testGetState_afterSet(){ - Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0,1,5); + Board<List<ModelElement>> board = new FirefighterBoard(20, 10); Position position = new Position(1,2); assertThat(board.getState(position)).isEmpty(); board.setState(List.of(ModelElement.FIRE), position); -- GitLab