diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin index d300017db9d3689bf20d9b7e8e88687e2330937a..356014674fb63d4fdcabb77d2a8a71be252803d0 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.bin and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock index c7d4c6e18cf7dca7bf62b6f679d816a43df9a1b9..364735a916720d347b85ceef00df9a9a2254aa90 100644 Binary files a/.gradle/8.10.2/executionHistory/executionHistory.lock and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin index 98488ecb977608b232ad6304aca455824b3d58d9..c66a162ad97620144152aa3cbeb67b4087a68adb 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.bin and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock index 50800a82221e8663b00c731901bb525155446144..fd6eb11de62d8a1380c454eda64c76dbbd9426dd 100644 Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin index 169a69f92254ccb8dcafdda9e3fb0ab138b4a1d6..bc8e5d2dfc298a80508290e67d34e5f0a7146d78 100644 Binary files a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index f3c70417fb48092deb323db99be6b2f95b79f083..bdb8cb7aea7f8ef6495de3bf0c9c77121eb66ae2 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/Project Repports/Diagram b/Project Repports/Diagram new file mode 100644 index 0000000000000000000000000000000000000000..6f0ca776096d54b1b3ea78c84f4e0a13d2b73430 --- /dev/null +++ b/Project Repports/Diagram @@ -0,0 +1,191 @@ +@startuml + +' Enum: ModelElement +enum ModelElement { + FIREFIGHTER + FIRE + CLOUD + ROAD + EMPTY + MOUNTAIN + FIRETRUCK + ROCKS +} + +' Class: Position +class Position { + - row: int + - column: int + + Position(row: int, column: int) + + getRow(): int + + getColumn(): int +} + +' Interface: Strategy +interface Strategy { + + update(): List<Position> + + getModelPositions(): List<Position> + + getFirePositions(): Set<Position> +} + +' Class: FireTruckMovementStrategy +class FireTruckMovementStrategy { + - targetStrategy: TargetStrategy + - fireTruckPositions: List<Position> + - firePositions: Set<Position> + - neighbors: Map<Position, List<Position>> + + FireTruckMovementStrategy(firefighterPositions: List<Position>, firePositions: Set<Position>, neighbors: Map<Position, List<Position>>) + + update(): List<Position> + + nextValidPosition(currentPosition: Position): Position + + extinguishNearbyFires(position: Position, modifiedPositions: List<Position>) + + extinguishAll(positions: List<Position>) +} + +' Class: SimpleFireSpreadStrategy +class SimpleFireSpreadStrategy { + - firePositions: Set<Position> + - neighbors: Map<Position, List<Position>> + - mountainPositions: Set<Position> + - roadPositions: Set<Position> + - rocksPositions: Set<Position> + - step: int + + SimpleFireSpreadStrategy(firePositions: Set<Position>, neighbors: Map<Position, List<Position>>, mountainPositions: Set<Position>, roadPositions: Set<Position>, rocksPositions: Set<Position>, step: int) + + update(): List<Position> + + spreadFire(firePosition: Position, newFirePositions: Set<Position>) + + canPropagateTo(newPosition: Position): boolean +} + +' Class: Initializer +class Initializer { + - columnCount: int + - rowCount: int + - initialFireCount: int + - initialFirefighterCount: int + - initialRoadCount: int + - initialCloudCount: int + - initialMountainCount: int + - initialFireTruckCount: int + - initialRocksCount: int + - positions: Position[][] + - neighbors: Map<Position, List<Position>> + - firePositions: Set<Position> + - firefighterPositions: List<Position> + - RoadPositions: List<Position> + - cloudPositions: List<Position> + - mountainsPositions: Set<Position> + - FireTruckPositions: List<Position> + - rocksPositions: Set<Position> + - randomGenerator: Random + + Initializer(columnCount: int, rowCount: int, initialFireCount: int, initialFirefighterCount: int, initialRoadCount: int, initialCloudCount: int, initialMountainCount: int, initialRocksCount: int, initialFireTruckCount: int) + + initializePositions(): void + + initializeNeighbors(): void + + initializeElements(): void + + addRandomPositions(targetCollection: Collection<Position>, count: int) +} + +' Class: NeighborManager +class NeighborManager { + - neighbors: Map<Position, List<Position>> + + NeighborManager(rowCount: int, columnCount: int) + + getNeighbors(): Map<Position, List<Position>> + + getAdjacentPositions(position: Position): List<Position> +} + +' Class: TargetStrategy +class TargetStrategy { + + calculateTarget(fireTruckPosition: Position, firePositions: Set<Position>): Position +} + +' Class: Board +class Board { + - positions: Position[][] + - modelElements: Map<Position, ModelElement> + + Board(rowCount: int, columnCount: int) + + setModelElement(position: Position, element: ModelElement): void + + getModelElement(position: Position): ModelElement +} + +' Class: BoardManager +class BoardManager { + - board: Board + - initializer: Initializer + + BoardManager(board: Board, initializer: Initializer) + + initializeBoard(): void + + updateBoard(): void +} + +' Class: CloudStrategy +class CloudStrategy { + - cloudPositions: Set<Position> + + CloudStrategy(cloudPositions: Set<Position>) + + updateCloud(): Set<Position> + + addCloudPosition(position: Position): void +} + +' Class: FirefighterBoard +class FirefighterBoard { + - firefighterPositions: List<Position> + + FirefighterBoard(firefighterPositions: List<Position>) + + updateFirefighterPositions(): void + + addFirefighter(position: Position): void +} + +' Class: FirefighterMovementStrategy +class FirefighterMovementStrategy { + - firefighterPositions: List<Position> + - neighbors: Map<Position, List<Position>> + + FirefighterMovementStrategy(firefighterPositions: List<Position>, neighbors: Map<Position, List<Position>>) + + update(): List<Position> + + nextValidPosition(currentPosition: Position): Position + + moveToNextPosition(): Position +} + +' Relationship: FireTruckMovementStrategy implements Strategy +FireTruckMovementStrategy -|> Strategy : implements + +' Relationship: SimpleFireSpreadStrategy implements Strategy +SimpleFireSpreadStrategy -|> Strategy : implements + +' Relationship: Initializer uses NeighborManager +Initializer --> NeighborManager : uses + +' Relationship: FireTruckMovementStrategy and SimpleFireSpreadStrategy depend on Position +FireTruckMovementStrategy --> Position : depends on +SimpleFireSpreadStrategy --> Position : depends on + +' Relationship: FireTruckMovementStrategy and SimpleFireSpreadStrategy depend on neighbors +FireTruckMovementStrategy --> Map : depends on +SimpleFireSpreadStrategy --> Map : depends on + +' Relationship: FireTruckMovementStrategy uses TargetStrategy +FireTruckMovementStrategy --> TargetStrategy : uses + +' Relationship: ModelElement is an enum +ModelElement ..> FireTruckMovementStrategy : used by +ModelElement ..> SimpleFireSpreadStrategy : used by + +' Relationship: Position used by Initializer for grid setup +Position --> Initializer : used by + +' Relationship: Position used by FireTruckMovementStrategy and SimpleFireSpreadStrategy +Position --> FireTruckMovementStrategy : used by +Position --> SimpleFireSpreadStrategy : used by + +' Relationship: Board is used by BoardManager +Board --> BoardManager : used by + +' Relationship: CloudStrategy uses Position +CloudStrategy --> Position : uses + +' Relationship: BoardManager uses Board and Initializer +BoardManager --> Board : uses +BoardManager --> Initializer : uses + +' Relationship: FirefighterMovementStrategy uses Position +FirefighterMovementStrategy --> Position : uses + +' Relationship: FirefighterMovementStrategy and FirefighterBoard use Board +FirefighterBoard --> Board : uses +FirefighterMovementStrategy --> Board : uses + +@enduml diff --git a/Project Repports/Diagram Projet Programation.pdf b/Project Repports/Diagram Projet Programation.pdf deleted file mode 100644 index 1b75234c19257ca2faa1c442f1bfae06db4a02cc..0000000000000000000000000000000000000000 Binary files a/Project Repports/Diagram Projet Programation.pdf and /dev/null differ diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class index dca601056c92248e6d1d362ac5a32c00ccbdf758..64108db13ab8040948211250032367c6392ccdcb 100644 Binary files a/build/classes/java/main/app/SimulatorApplication.class and b/build/classes/java/main/app/SimulatorApplication.class differ diff --git a/build/classes/java/main/model/FirefighterBoard.class b/build/classes/java/main/model/FirefighterBoard.class index 208834a7ab675a90bb96e24c4f98f0fa85bec350..f61f42ca6ccdd9a05f2f36b96e3ac19a79295c29 100644 Binary files a/build/classes/java/main/model/FirefighterBoard.class and b/build/classes/java/main/model/FirefighterBoard.class differ diff --git a/build/classes/java/main/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class index 64f0b49ed5863b2a25cce8a921606eef79bfabdb..621f52487062cf2afe1a5bf3435cf8b098e69dcc 100644 Binary files a/build/classes/java/main/view/FirefighterGrid.class and b/build/classes/java/main/view/FirefighterGrid.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index cf8f879d86f1c8997a5f49fa9f7ba5d4a2a605d3..a076ff2fe10d371efcb37f1bf51bb59b15becc60 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 18534c73fd9becd05871a9c40031c1d2d333f044..8900e4bd34e6c066eeb8bce3f24a9e03c274bf0e 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -20,10 +20,10 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIRE_COUNT = 5; public static final int INITIAL_FIREFIGHTER_COUNT = 4; public static final int INITIAL_ROAD_COUNT = 10; - public static final int INITIAL_CLOUD_COUNT = 5; + public static final int INITIAL_CLOUD_COUNT = 3; public static final int INITIAL_MOUTAIN_COUNT = 5; - public static final int INITIAL_FIRE_TRUCK_COUNT = 3; - public static final int INITIAL_ROCKS_COUNT = 5; + public static final int INITIAL_FIRE_TRUCK_COUNT = 2; + public static final int INITIAL_ROCKS_COUNT = 3; private Stage primaryStage; private Parent view; diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 74eb05a8d545f3fb8d28376a6290fb996ac7a293..6ab8b8facd4c41c768ae89cc7a7a3e408653d272 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -4,7 +4,7 @@ import util.Position; import javafx.util.Pair; import java.util.*; -import static model.ModelElement.CLOUD; + public class FirefighterBoard implements Board<List<ModelElement>> { private final int columnCount; @@ -19,12 +19,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private List<Position> firefighterPositions; private Set<Position> firePositions; - private Set<Position> roadPositions; + private final Set<Position> roadPositions; private final Map<Position, List<Position>> neighbors; private final Position[][] positions; private List<Position> cloudPositions; - private Set<Position> moutainsPositions; - private Set<Position> rocksPositions; + private Set<Position> moutainsPositions; + private Set<Position> rocksPositions; private List<Position> fireTruckPositions; private int step = 0; @@ -242,7 +242,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { public List<Pair<Position, ModelElement>> getUpdatedElements() { List<Pair<Position, ModelElement>> updatedElements = new ArrayList<>(); - + System.out.println(initialFireCount); // Add fire positions for (Position firePosition : firePositions) { updatedElements.add(new Pair<>(firePosition, ModelElement.FIRE)); @@ -280,149 +280,3 @@ public class FirefighterBoard implements Board<List<ModelElement>> { -/* -import util.*; - -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 TargetStrategy targetStrategy = new TargetStrategy(); - private List<Position> firefighterPositions; - private Set<Position> firePositions; - private Map<Position, List<Position>> neighbors = new HashMap(); - private final Position[][] positions; - private int step = 0; - private final Random randomGenerator = new Random(); - - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { - this.columnCount = columnCount; - this.rowCount = rowCount; - this.positions = new Position[rowCount][columnCount]; - for (int column = 0; column < columnCount; column++) - for (int row = 0; row < rowCount; row++) - positions[row][column] = new Position(row, column); - for (int column = 0; column < columnCount; column++) - for (int row = 0; row < rowCount; row++) { - List<Position> list = new ArrayList<>(); - if (row > 0) list.add(positions[row - 1][column]); - if (column > 0) list.add(positions[row][column - 1]); - if (row < rowCount - 1) list.add(positions[row + 1][column]); - if (column < columnCount - 1) list.add(positions[row][column + 1]); - neighbors.put(positions[row][column], list); - } - this.initialFireCount = initialFireCount; - this.initialFirefighterCount = initialFirefighterCount; - initializeElements(); - } - - public void initializeElements() { - firefighterPositions = new ArrayList<>(); - firePositions = new HashSet<>(); - for (int index = 0; index < initialFireCount; index++) - firePositions.add(randomPosition()); - for (int index = 0; index < initialFirefighterCount; index++) - firefighterPositions.add(randomPosition()); - } - - private Position randomPosition() { - return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); - } - - @Override - public List<ModelElement> getState(Position position) { - List<ModelElement> result = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) - if (firefighterPosition.equals(position)) - result.add(ModelElement.FIREFIGHTER); - if (firePositions.contains(position)) - result.add(ModelElement.FIRE); - return result; - } - - @Override - public int rowCount() { - return rowCount; - } - - @Override - public int columnCount() { - return columnCount; - } - - public List<Position> updateToNextGeneration() { - List<Position> modifiedPositions = updateFirefighters(); - modifiedPositions.addAll(updateFires()); - step++; - return modifiedPositions; - } - - private List<Position> updateFires() { - List<Position> modifiedPositions = new ArrayList<>(); - if (step % 2 == 0) { - List<Position> newFirePositions = new ArrayList<>(); - for (Position fire : firePositions) { - newFirePositions.addAll(neighbors.get(fire)); - } - firePositions.addAll(newFirePositions); - modifiedPositions.addAll(newFirePositions); - } - return modifiedPositions; - - } - - @Override - public int stepNumber() { - return step; - } - - private List<Position> updateFirefighters() { - List<Position> modifiedPosition = new ArrayList<>(); - List<Position> firefighterNewPositions = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = - targetStrategy.neighborClosestToFire(firefighterPosition, - firePositions, neighbors); - firefighterNewPositions.add(newFirefighterPosition); - extinguish(newFirefighterPosition); - modifiedPosition.add(firefighterPosition); - modifiedPosition.add(newFirefighterPosition); - List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream() - .filter(firePositions::contains).toList(); - for (Position firePosition : neighborFirePositions) - extinguish(firePosition); - modifiedPosition.addAll(neighborFirePositions); - } - firefighterPositions = firefighterNewPositions; - return modifiedPosition; - } - - @Override - public void reset() { - step = 0; - initializeElements(); - } - - private void extinguish(Position position) { - firePositions.remove(position); - } - - - @Override - public void setState(List<ModelElement> state, Position position) { - firePositions.remove(position); - for (; ; ) { - if (!firefighterPositions.remove(position)) break; - } - for (ModelElement element : state) { - switch (element) { - case FIRE -> firePositions.add(position); - case FIREFIGHTER -> firefighterPositions.add(position); - } - } - } -}*/ \ No newline at end of file diff --git a/src/main/java/model/Initializer.java b/src/main/java/model/Initializer.java index cdf9a61349cd9e97b28023ab8cdd72311c517122..38d44f464a6be37e5a98670c3e3565ce3429e601 100644 --- a/src/main/java/model/Initializer.java +++ b/src/main/java/model/Initializer.java @@ -32,7 +32,8 @@ public class Initializer { private final Random randomGenerator = new Random(); - public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount,int initialcloudCount, int initialMoutainCount, int initialRocksCount,int initialFireTruckCount) { + public Initializer(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialRoadCount, + int initialcloudCount, int initialMoutainCount, int initialRocksCount,int initialFireTruckCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; @@ -52,9 +53,7 @@ public class Initializer { this.mountainsPositions = new HashSet<>(); this.FireTruckPositions = new ArrayList<>(); this.rocksPositions = new HashSet<>(); - initializePositions(); - initializeNeighbors(); - initializeElements(); + } private void initializePositions() {