Skip to content
Snippets Groups Projects
Commit 36d33e23 authored by MANSOUR Chadi's avatar MANSOUR Chadi
Browse files

Rocks added but needs to be updated for the fire burning it function

parent 34ec0a4f
No related branches found
No related tags found
No related merge requests found
Pipeline #41317 failed
Showing
with 44 additions and 9 deletions
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
...@@ -22,6 +22,7 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -22,6 +22,7 @@ public class SimulatorApplication extends javafx.application.Application {
public static final int INITIAL_ROAD_COUNT = 10; public static final int INITIAL_ROAD_COUNT = 10;
public static final int INITIAL_CLOUD_COUNT = 5; public static final int INITIAL_CLOUD_COUNT = 5;
public static final int INITIAL_MOUTAIN_COUNT = 5; public static final int INITIAL_MOUTAIN_COUNT = 5;
public static final int INITIAL_ROCKS_COUNT = 5;
private Stage primaryStage; private Stage primaryStage;
private Parent view; private Parent view;
...@@ -49,7 +50,7 @@ public class SimulatorApplication extends javafx.application.Application { ...@@ -49,7 +50,7 @@ public class SimulatorApplication extends javafx.application.Application {
Controller controller = loader.getController(); Controller controller = loader.getController();
controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT,
INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_ROAD_COUNT,INITIAL_CLOUD_COUNT, INITIAL_MOUTAIN_COUNT); INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_ROAD_COUNT,INITIAL_CLOUD_COUNT, INITIAL_MOUTAIN_COUNT, INITIAL_ROCKS_COUNT);
} }
private void showScene() { private void showScene() {
......
...@@ -33,9 +33,9 @@ public class Controller { ...@@ -33,9 +33,9 @@ public class Controller {
@FXML @FXML
private FirefighterGrid grid; private FirefighterGrid grid;
public void initialize(int boxWidth, int boxHeight, int columns, int rows, int fireCount, int firefighterCount, int initialRoadCount,int initialcloudCount, int initialMountainsCount) { public void initialize(int boxWidth, int boxHeight, int columns, int rows, int fireCount, int firefighterCount, int initialRoadCount,int initialcloudCount, int initialMountainsCount, int initialRocksCount) {
// Initialize the simulation board and connect it to the grid // Initialize the simulation board and connect it to the grid
board = new FirefighterBoard(columns, rows, fireCount, firefighterCount, initialRoadCount,initialcloudCount, initialMountainsCount); board = new FirefighterBoard(columns, rows, fireCount, firefighterCount, initialRoadCount,initialcloudCount, initialMountainsCount, initialRocksCount);
grid.initialize(columns, rows, boxWidth, boxHeight, board); grid.initialize(columns, rows, boxWidth, boxHeight, board);
// Initialize timeline for automatic progression // Initialize timeline for automatic progression
......
...@@ -14,6 +14,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -14,6 +14,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private final int initialRoadCount; private final int initialRoadCount;
private final int initialcloudCount; private final int initialcloudCount;
private final int initialmountainsCount; private final int initialmountainsCount;
private final int initialrocksCount;
private List<Position> firefighterPositions; private List<Position> firefighterPositions;
private Set<Position> firePositions; private Set<Position> firePositions;
...@@ -22,11 +23,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -22,11 +23,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private final Position[][] positions; private final Position[][] positions;
private List<Position> cloudPositions; private List<Position> cloudPositions;
private Set<Position> moutainsPositions; private Set<Position> moutainsPositions;
private Set<Position> rocksPositions;
private int step = 0; private int step = 0;
// Constructor for FirefighterBoard // Constructor for FirefighterBoard
public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, int initialcloudCount, int initialmountainsCount) { public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, int initialcloudCount, int initialmountainsCount, int initialrocksCount) {
this.columnCount = columnCount; this.columnCount = columnCount;
this.rowCount = rowCount; this.rowCount = rowCount;
this.initialFireCount = initialFireCount; this.initialFireCount = initialFireCount;
...@@ -34,6 +36,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -34,6 +36,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.initialRoadCount = initialRoadCount; this.initialRoadCount = initialRoadCount;
this.initialcloudCount = initialcloudCount; this.initialcloudCount = initialcloudCount;
this.initialmountainsCount = initialmountainsCount; this.initialmountainsCount = initialmountainsCount;
this.initialrocksCount = initialrocksCount;
this.positions = new Position[rowCount][columnCount]; this.positions = new Position[rowCount][columnCount];
this.firefighterPositions = new ArrayList<>(); this.firefighterPositions = new ArrayList<>();
...@@ -42,6 +45,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -42,6 +45,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
this.cloudPositions = new ArrayList<>(); this.cloudPositions = new ArrayList<>();
this.moutainsPositions = new HashSet<>(); this.moutainsPositions = new HashSet<>();
this.roadPositions = new HashSet<>(); this.roadPositions = new HashSet<>();
this.rocksPositions = new HashSet<>();
initializeBoard(); initializeBoard();
} }
...@@ -70,6 +74,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -70,6 +74,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for (int i = 0; i < initialmountainsCount; i++) { for (int i = 0; i < initialmountainsCount; i++) {
moutainsPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount))); moutainsPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount)));
} }
// Initialize rocks positions
for (int i = 0; i < initialrocksCount; i++) {
rocksPositions.add(new Position(random.nextInt(rowCount), random.nextInt(columnCount)));
}
// Initialize neighbors map // Initialize neighbors map
...@@ -120,6 +128,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -120,6 +128,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
result.add(ModelElement.MOUTAIN); result.add(ModelElement.MOUTAIN);
} }
} }
case ROCKS -> {
if (rocksPositions.contains(position)) {
result.add(ModelElement.ROCKS);
}
}
default ->{ default ->{
} }
} }
...@@ -145,12 +158,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -145,12 +158,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
@Override @Override
public void reset() { public void reset() {
step = 0; step = 0;
Initializer initializer = new Initializer(columnCount,rowCount,initialFireCount,initialFirefighterCount, initialRoadCount,initialcloudCount, initialmountainsCount); Initializer initializer = new Initializer(columnCount,rowCount,initialFireCount,initialFirefighterCount, initialRoadCount,initialcloudCount, initialmountainsCount, initialrocksCount);
resetPos(firePositions,initializer.getFirePositions()); resetPos(firePositions,initializer.getFirePositions());
resetPos(firefighterPositions,initializer.getFirefighterPositions()); resetPos(firefighterPositions,initializer.getFirefighterPositions());
resetPos(cloudPositions,initializer.getCloudPositions()); resetPos(cloudPositions,initializer.getCloudPositions());
resetPos(moutainsPositions,initializer.getMountainsPositions()); resetPos(moutainsPositions,initializer.getMountainsPositions());
resetPos(roadPositions,initializer.getRoadPositions()); resetPos(roadPositions,initializer.getRoadPositions());
resetPos(rocksPositions,initializer.getRoadPositions());
neighbors.clear(); neighbors.clear();
neighbors.putAll(initializer.getNeighbors()); neighbors.putAll(initializer.getNeighbors());
...@@ -187,7 +201,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -187,7 +201,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for(ModelElement element : elements) { for(ModelElement element : elements) {
Strategy strategy = switch(element) { Strategy strategy = switch(element) {
case FIRE -> new SimpleFireSpreadStrategy(firePositions, neighbors,moutainsPositions,roadPositions, step); case FIRE -> new SimpleFireSpreadStrategy(firePositions, neighbors,moutainsPositions,roadPositions, rocksPositions,step);
case FIREFIGHTER -> new FirefighterMovementStrategy(firefighterPositions,firePositions,neighbors); case FIREFIGHTER -> new FirefighterMovementStrategy(firefighterPositions,firePositions,neighbors);
case CLOUD -> new CloudStrategy(cloudPositions,firePositions,neighbors,rowCount,columnCount); case CLOUD -> new CloudStrategy(cloudPositions,firePositions,neighbors,rowCount,columnCount);
default -> throw new IllegalStateException("Type de modèle inconnu : " + element); default -> throw new IllegalStateException("Type de modèle inconnu : " + element);
...@@ -249,6 +263,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { ...@@ -249,6 +263,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
for (Position moutainPosition : moutainsPositions){ for (Position moutainPosition : moutainsPositions){
updatedElements.add(new Pair<>(moutainPosition, ModelElement.MOUTAIN)); updatedElements.add(new Pair<>(moutainPosition, ModelElement.MOUTAIN));
} }
for (Position rockPosition : rocksPositions){
updatedElements.add(new Pair<>(rockPosition,ModelElement.ROCKS));
}
return updatedElements; return updatedElements;
} }
......
...@@ -14,6 +14,7 @@ public class Initializer { ...@@ -14,6 +14,7 @@ public class Initializer {
private final int initialRoadCount; private final int initialRoadCount;
private final int initialcloudCount; private final int initialcloudCount;
private final int initialMoutainCount; private final int initialMoutainCount;
private final int initialRocksCount;
private final Position[][] positions; private final Position[][] positions;
...@@ -23,12 +24,13 @@ public class Initializer { ...@@ -23,12 +24,13 @@ public class Initializer {
private final Set<Position> firePositions; private final Set<Position> firePositions;
private final List<Position> cloudPositions; private final List<Position> cloudPositions;
private final Set<Position> mountainsPositions; private final Set<Position> mountainsPositions;
private final Set<Position> rocksPositions;
private int step = 0; private int step = 0;
private final Random randomGenerator = new Random(); private final Random randomGenerator = new Random();
public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount, int initialMoutainCount) { public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount, int initialMoutainCount,int initialRocksCount) {
this.columnCount = columnCount; this.columnCount = columnCount;
this.rowCount = rowCount; this.rowCount = rowCount;
this.initialFireCount = initialFireCount; this.initialFireCount = initialFireCount;
...@@ -36,6 +38,7 @@ public class Initializer { ...@@ -36,6 +38,7 @@ public class Initializer {
this.initialRoadCount = initialRoadCount; this.initialRoadCount = initialRoadCount;
this.initialcloudCount = initialcloudCount; this.initialcloudCount = initialcloudCount;
this.initialMoutainCount = initialMoutainCount; this.initialMoutainCount = initialMoutainCount;
this.initialRocksCount = initialRocksCount;
this.positions = new Position[rowCount][columnCount]; this.positions = new Position[rowCount][columnCount];
this.neighbors = new HashMap<>(); this.neighbors = new HashMap<>();
...@@ -44,6 +47,10 @@ public class Initializer { ...@@ -44,6 +47,10 @@ public class Initializer {
this.RoadPositions = new ArrayList<>(); this.RoadPositions = new ArrayList<>();
this.cloudPositions = new ArrayList<>(); this.cloudPositions = new ArrayList<>();
this.mountainsPositions = new HashSet<>(); this.mountainsPositions = new HashSet<>();
this.rocksPositions = new HashSet<>();
initializePositions();
initializeNeighbors();
initializeElements();
} }
private void initializePositions() { private void initializePositions() {
...@@ -71,6 +78,7 @@ public class Initializer { ...@@ -71,6 +78,7 @@ public class Initializer {
initializeRoadPositions(); initializeRoadPositions();
initializeCloudsPositions(); initializeCloudsPositions();
initializeMoutainsPositions(); initializeMoutainsPositions();
initializeRocksPositions();
} }
private void initializeFirePositions() { private void initializeFirePositions() {
...@@ -85,6 +93,7 @@ public class Initializer { ...@@ -85,6 +93,7 @@ public class Initializer {
addRandomPositions(cloudPositions, initialcloudCount); addRandomPositions(cloudPositions, initialcloudCount);
} }
private void initializeMoutainsPositions() {addRandomPositions(mountainsPositions, initialMoutainCount);} private void initializeMoutainsPositions() {addRandomPositions(mountainsPositions, initialMoutainCount);}
private void initializeRocksPositions() {addRandomPositions(rocksPositions, initialRocksCount);}
private void addRandomPositions(Collection<Position> targetCollection, int count) { private void addRandomPositions(Collection<Position> targetCollection, int count) {
...@@ -142,6 +151,9 @@ public class Initializer { ...@@ -142,6 +151,9 @@ public class Initializer {
public Set<Position> getMountainsPositions() { public Set<Position> getMountainsPositions() {
return mountainsPositions; return mountainsPositions;
} }
public Set<Position> getRocksPositions() {
return rocksPositions;
}
public int getStep() {return step;} public int getStep() {return step;}
} }
...@@ -2,7 +2,7 @@ package model; ...@@ -2,7 +2,7 @@ package model;
public enum ModelElement { public enum ModelElement {
FIREFIGHTER("blue"), FIRE("red"), CLOUD("darkgrey"),ROAD("grey"),EMPTY("white"), MOUTAIN("brown"); FIREFIGHTER("blue"), FIRE("red"), CLOUD("darkgrey"),ROAD("grey"),EMPTY("white"), MOUTAIN("brown"), ROCKS("lightBrown");
private final String color; private final String color;
......
...@@ -8,13 +8,15 @@ public class SimpleFireSpreadStrategy implements Strategy { ...@@ -8,13 +8,15 @@ public class SimpleFireSpreadStrategy implements Strategy {
private final Map<Position, List<Position>> neighbors; private final Map<Position, List<Position>> neighbors;
private final Set<Position> mountainPositions; private final Set<Position> mountainPositions;
private final Set<Position> roadPositions; private final Set<Position> roadPositions;
private final Set<Position> rocksPositions;
private final int step; private final int step;
public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors,Set<Position> moutainsPositions,Set<Position> roadPositions, int step) { public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors,Set<Position> moutainsPositions,Set<Position> roadPositions,Set<Position> rocksPositions, int step) {
this.firePositions = firePositions; this.firePositions = firePositions;
this.neighbors = neighbors; this.neighbors = neighbors;
this.mountainPositions = moutainsPositions; this.mountainPositions = moutainsPositions;
this.roadPositions = roadPositions; this.roadPositions = roadPositions;
this.rocksPositions = rocksPositions;
this.step = step; this.step = step;
} }
...@@ -45,6 +47,9 @@ public class SimpleFireSpreadStrategy implements Strategy { ...@@ -45,6 +47,9 @@ public class SimpleFireSpreadStrategy implements Strategy {
if(mountainPositions.contains(newPosition) || roadPositions.contains(newPosition)){ if(mountainPositions.contains(newPosition) || roadPositions.contains(newPosition)){
return false; return false;
} }
if (rocksPositions.contains(newPosition)){
return step % 4 ==0;
}
return true; return true;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment