diff --git a/.gradle/8.4/checksums/checksums.lock b/.gradle/8.4/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..687f4f2689f36141e55132a03a06f37ea20d28c3 Binary files /dev/null and b/.gradle/8.4/checksums/checksums.lock differ diff --git a/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..c150f374e8350fdc4d0b480b32e0bc156ecdb4f0 Binary files /dev/null and b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock differ diff --git a/.gradle/8.4/dependencies-accessors/gc.properties b/.gradle/8.4/dependencies-accessors/gc.properties new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.gradle/8.4/executionHistory/executionHistory.bin b/.gradle/8.4/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..cd185bc582a0f489888b574664842f97427b3965 Binary files /dev/null and b/.gradle/8.4/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.4/executionHistory/executionHistory.lock b/.gradle/8.4/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..b0eb98842eda3fa8e9d6fde7acfb58ee0504e7c4 Binary files /dev/null and b/.gradle/8.4/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.4/fileChanges/last-build.bin b/.gradle/8.4/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d Binary files /dev/null and b/.gradle/8.4/fileChanges/last-build.bin differ diff --git a/.gradle/8.4/fileHashes/fileHashes.bin b/.gradle/8.4/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..a6033345fa086c28fa693303e7b630d6d3d901cb Binary files /dev/null and b/.gradle/8.4/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.4/fileHashes/fileHashes.lock b/.gradle/8.4/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..da13ab9353ced83645c5559a785a24c30dd34000 Binary files /dev/null and b/.gradle/8.4/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.4/fileHashes/resourceHashesCache.bin b/.gradle/8.4/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..140ab407c66bf092f43e885dfedaf6efe6f82fea Binary files /dev/null and b/.gradle/8.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/8.4/gc.properties b/.gradle/8.4/gc.properties new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..72a5e081814c347e779fc9a70999b4a39d950740 Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000000000000000000000000000000000..90154715c19ffcb4cfd832c6c62fcfe3c445afac --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Mon Nov 13 20:29:54 CET 2023 +gradle.version=8.4 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..e4dbcd26775b77fdd318f2e906aa0ebb05955632 Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..e892a491542e10fac2c062d573d9d0cd0dc4280c Binary files /dev/null and b/.gradle/file-system.probe differ diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..b20b834ef489ed0cfcf6f12e7993b40632a049e9 Binary files /dev/null and b/build/classes/java/main/app/SimulatorApplication.class differ diff --git a/build/classes/java/main/app/SimulatorMain.class b/build/classes/java/main/app/SimulatorMain.class new file mode 100644 index 0000000000000000000000000000000000000000..4530cc2971636d0c78bcf91139a4f699c2f20eb4 Binary files /dev/null and b/build/classes/java/main/app/SimulatorMain.class differ diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class new file mode 100644 index 0000000000000000000000000000000000000000..181db60987ef9e8df666c370fc44325db0cb5a41 Binary files /dev/null and b/build/classes/java/main/controller/Controller.class differ diff --git a/build/classes/java/main/controller/PersistentToggleGroup.class b/build/classes/java/main/controller/PersistentToggleGroup.class new file mode 100644 index 0000000000000000000000000000000000000000..5ccef4da42dee9301d32078f998d43094c421149 Binary files /dev/null and b/build/classes/java/main/controller/PersistentToggleGroup.class differ diff --git a/build/classes/java/main/model/Board.class b/build/classes/java/main/model/Board.class new file mode 100644 index 0000000000000000000000000000000000000000..a78d2b182c87683650b0972590097ab4611719be Binary files /dev/null and b/build/classes/java/main/model/Board.class differ diff --git a/build/classes/java/main/model/BoardElement.class b/build/classes/java/main/model/BoardElement.class new file mode 100644 index 0000000000000000000000000000000000000000..b7da37d481527392ebf91688895cc27b0ede2413 Binary files /dev/null and b/build/classes/java/main/model/BoardElement.class differ diff --git a/build/classes/java/main/model/Builder/ConcreteGameBuilder.class b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..66850dd8e50d617a3da2c6c02c18f71cdc9daec6 Binary files /dev/null and b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class differ diff --git a/build/classes/java/main/model/Builder/FireFirefighterBuilder.class b/build/classes/java/main/model/Builder/FireFirefighterBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..3b2ad97b21e91b398e478584610878b453c607cf Binary files /dev/null and b/build/classes/java/main/model/Builder/FireFirefighterBuilder.class differ diff --git a/build/classes/java/main/model/Builder/GameBuilder.class b/build/classes/java/main/model/Builder/GameBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..6b7721744a4ab2dbde7979ff7263e54e46fac025 Binary files /dev/null and b/build/classes/java/main/model/Builder/GameBuilder.class differ diff --git a/build/classes/java/main/model/Builder/GameManage.class b/build/classes/java/main/model/Builder/GameManage.class new file mode 100644 index 0000000000000000000000000000000000000000..2720adbd99507a45b7ab9771d0535a07fb653449 Binary files /dev/null and b/build/classes/java/main/model/Builder/GameManage.class differ diff --git a/build/classes/java/main/model/EmptyElement.class b/build/classes/java/main/model/EmptyElement.class new file mode 100644 index 0000000000000000000000000000000000000000..5069ea14ef0a85701717a0b7537a043f6dcdd4af Binary files /dev/null and b/build/classes/java/main/model/EmptyElement.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/Cloud.class b/build/classes/java/main/model/ExtinguishFire/Cloud.class new file mode 100644 index 0000000000000000000000000000000000000000..9de56c2328937cd36048ec37406dc9240e0c39b7 Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/Cloud.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class new file mode 100644 index 0000000000000000000000000000000000000000..a4d622e74ad0dac8a1e1ee24f055fadd19df68df Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/FireFighter.class b/build/classes/java/main/model/ExtinguishFire/FireFighter.class new file mode 100644 index 0000000000000000000000000000000000000000..02776eb6f209146e6f2de1891a6ecafbc4aa688a Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/FireFighter.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class new file mode 100644 index 0000000000000000000000000000000000000000..436df44dd36db05fd1c87bf02bf61944fcae213b Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class differ diff --git a/build/classes/java/main/model/Flammable/Fire.class b/build/classes/java/main/model/Flammable/Fire.class new file mode 100644 index 0000000000000000000000000000000000000000..a63719c958047acc25830722191a24670a97cbad Binary files /dev/null and b/build/classes/java/main/model/Flammable/Fire.class differ diff --git a/build/classes/java/main/model/Flammable/Flammable.class b/build/classes/java/main/model/Flammable/Flammable.class new file mode 100644 index 0000000000000000000000000000000000000000..bf120cd5de3e083cfef4bb7079bfbbbd2f05fb97 Binary files /dev/null and b/build/classes/java/main/model/Flammable/Flammable.class differ diff --git a/build/classes/java/main/model/GameBoard.class b/build/classes/java/main/model/GameBoard.class new file mode 100644 index 0000000000000000000000000000000000000000..e7f7e68c6824b75a0258c2c6ecb4cd1b9dee4da3 Binary files /dev/null and b/build/classes/java/main/model/GameBoard.class differ diff --git a/build/classes/java/main/model/Obstacle/Mountain.class b/build/classes/java/main/model/Obstacle/Mountain.class new file mode 100644 index 0000000000000000000000000000000000000000..ab116eed640ff92a1960d9c887bc5a35d19df9b1 Binary files /dev/null and b/build/classes/java/main/model/Obstacle/Mountain.class differ diff --git a/build/classes/java/main/model/Obstacle/Obstacles.class b/build/classes/java/main/model/Obstacle/Obstacles.class new file mode 100644 index 0000000000000000000000000000000000000000..fff48ef4e9967a51eeca54cadce22b98a897ae4c Binary files /dev/null and b/build/classes/java/main/model/Obstacle/Obstacles.class differ diff --git a/build/classes/java/main/model/Obstacle/Road.class b/build/classes/java/main/model/Obstacle/Road.class new file mode 100644 index 0000000000000000000000000000000000000000..2bfbc469870e9b39d3520e2a95d1bb670839ada4 Binary files /dev/null and b/build/classes/java/main/model/Obstacle/Road.class differ diff --git a/build/classes/java/main/model/Visitor/CrossMountain.class b/build/classes/java/main/model/Visitor/CrossMountain.class new file mode 100644 index 0000000000000000000000000000000000000000..ddbfddb8f7cee6c257ddbd45252852a741b3db40 Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossMountain.class differ diff --git a/build/classes/java/main/model/Visitor/CrossRoad.class b/build/classes/java/main/model/Visitor/CrossRoad.class new file mode 100644 index 0000000000000000000000000000000000000000..ee0df02352663a36d691bb3081a31d94c5028c0d Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossRoad.class differ diff --git a/build/classes/java/main/model/Visitor/FireFinder.class b/build/classes/java/main/model/Visitor/FireFinder.class new file mode 100644 index 0000000000000000000000000000000000000000..05ddcb141f461b8f1e4f42cb7b2c32083b234b7f Binary files /dev/null and b/build/classes/java/main/model/Visitor/FireFinder.class differ diff --git a/build/classes/java/main/model/Visitor/Visitor.class b/build/classes/java/main/model/Visitor/Visitor.class new file mode 100644 index 0000000000000000000000000000000000000000..d9ae8e3a8a6375c074840b3b24e35ce02a6d6b1e Binary files /dev/null and b/build/classes/java/main/model/Visitor/Visitor.class differ diff --git a/build/classes/java/main/module-info.class b/build/classes/java/main/module-info.class new file mode 100644 index 0000000000000000000000000000000000000000..228b8be064ecf35c69bb788937ce7ff8ab50174e Binary files /dev/null and b/build/classes/java/main/module-info.class differ diff --git a/build/classes/java/main/util/Position.class b/build/classes/java/main/util/Position.class new file mode 100644 index 0000000000000000000000000000000000000000..b01c34770ddcee9fb9247441aa31c14fcb6fc662 Binary files /dev/null and b/build/classes/java/main/util/Position.class differ diff --git a/build/classes/java/main/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class new file mode 100644 index 0000000000000000000000000000000000000000..d2bbe7e11dd4d28c3fba73284af14ce15b59f73f Binary files /dev/null and b/build/classes/java/main/view/FirefighterGrid.class differ diff --git a/build/classes/java/main/view/Grid.class b/build/classes/java/main/view/Grid.class new file mode 100644 index 0000000000000000000000000000000000000000..cedfc6abc7646d2aeb91d7df5227cbdb1cae0317 Binary files /dev/null and b/build/classes/java/main/view/Grid.class differ diff --git a/build/resources/main/view/DarkTheme.css b/build/resources/main/view/DarkTheme.css new file mode 100644 index 0000000000000000000000000000000000000000..46b78aaf90972dd435399466c9fd861ca73fc59f --- /dev/null +++ b/build/resources/main/view/DarkTheme.css @@ -0,0 +1,142 @@ +.background { + -fx-background-color: #1d1d1d; +} + +.label { + -fx-font-size: 11pt; + -fx-font-family: "Segoe UI Semibold"; + -fx-text-fill: white; + -fx-opacity: 0.6; +} + +.label-bright { + -fx-font-size: 11pt; + -fx-font-family: "Segoe UI Semibold"; + -fx-text-fill: white; + -fx-opacity: 1; +} + +.label-header { + -fx-font-size: 32pt; + -fx-font-family: "Segoe UI Light"; + -fx-text-fill: white; + -fx-opacity: 1; +} + +.table-view { + -fx-base: #1d1d1d; + -fx-control-inner-background: #1d1d1d; + -fx-background-color: #1d1d1d; + -fx-table-cell-border-color: transparent; + -fx-table-header-border-color: transparent; + -fx-padding: 5; +} + +.table-view .column-header-background { + -fx-background-color: transparent; +} + +.table-view .column-header, .table-view .filler { + -fx-border-width: 0 0 1 0; + -fx-background-color: transparent; + -fx-border-color: + transparent + transparent + derive(-fx-base, 80%) + transparent; + -fx-border-insets: 0 10 1 0; +} + +.table-view .column-header .label { + -fx-font-size: 20pt; + -fx-font-family: "Segoe UI Light"; + -fx-text-fill: white; + -fx-alignment: center-left; + -fx-opacity: 1; +} + +.table-view:focused .table-row-cell:filled:focused:selected { + -fx-background-color: -fx-focus-color; +} + +.split-pane:horizontal > .split-pane-divider { + -fx-border-color: transparent #1d1d1d transparent #1d1d1d; + -fx-background-color: transparent, derive(#1d1d1d,20%); +} + +.split-pane { + -fx-padding: 1 0 0 0; +} + +.menu-bar { + -fx-background-color: derive(#1d1d1d,20%); +} + +.context-menu { + -fx-background-color: derive(#1d1d1d,50%); +} + +.menu-bar .label { + -fx-font-size: 14pt; + -fx-font-family: "Segoe UI Light"; + -fx-text-fill: white; + -fx-opacity: 0.9; +} + +.menu .left-container { + -fx-background-color: black; +} + +.text-field { + -fx-font-size: 12pt; + -fx-font-family: "Segoe UI Semibold"; +} + +/* + * Metro style Push Button + * Author: Pedro Duque Vieira + * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/ + */ +.button { + -fx-padding: 5 22 5 22; + -fx-border-color: #e2e2e2; + -fx-border-width: 2; + -fx-background-radius: 0; + -fx-background-color: #1d1d1d; + -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif; + -fx-font-size: 11pt; + -fx-text-fill: #d8d8d8; + -fx-background-insets: 0 0 0 0, 0, 1, 2; +} + +.button:hover { + -fx-background-color: #3a3a3a; +} + +.button:pressed, .button:default:hover:pressed { + -fx-background-color: white; + -fx-text-fill: #1d1d1d; +} + +.button:focused { + -fx-border-color: white, white; + -fx-border-width: 1, 1; + -fx-border-style: solid; + -fx-border-radius: 0, 0; + -fx-border-insets: 1 1 1 1, 0; +} + +.button:disabled, .button:default:disabled { + -fx-opacity: 0.4; + -fx-background-color: #1d1d1d; + -fx-text-fill: white; +} + +.button:default { + -fx-background-color: -fx-focus-color; + -fx-text-fill: #ffffff; +} + +.button:default:hover { + -fx-background-color: derive(-fx-focus-color,30%); +} \ No newline at end of file diff --git a/build/resources/main/view/view.fxml b/build/resources/main/view/view.fxml new file mode 100644 index 0000000000000000000000000000000000000000..ac3a91e3880d9099cf029fdf4a6cab518b6fde07 --- /dev/null +++ b/build/resources/main/view/view.fxml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.VBox?> +<?import view.FirefighterGrid?> + +<?import javafx.scene.control.ToggleButton?> +<?import javafx.scene.control.Separator?> +<?import javafx.scene.control.Label?> +<HBox styleClass="background" stylesheets="@DarkTheme.css" + xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" + fx:controller="controller.Controller"> + <VBox> + <Separator maxHeight="-Infinity" maxWidth="-Infinity" + prefHeight="24.0" prefWidth="200.0"/> + <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0" + text="Generation number"/> + <Label fx:id="generationNumberLabel" alignment="CENTER" contentDisplay="TEXT_ONLY" + maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="200.0"/> + <Separator maxHeight="-Infinity" maxWidth="-Infinity" + prefHeight="24.0" prefWidth="200.0"/> + <Button fx:id="restartButton" maxHeight="-Infinity" maxWidth="-Infinity" + mnemonicParsing="false" onAction="#restartButtonAction" prefHeight="24.0" prefWidth="200.0" + text="Restart"/> + <Button fx:id="oneStepButton" maxHeight="-Infinity" maxWidth="-Infinity" + mnemonicParsing="false" onAction="#oneStepButtonAction" prefHeight="24.0" prefWidth="200.0" + text="One step"/> + <ToggleButton fx:id="playToggleButton" maxHeight="-Infinity" maxWidth="-Infinity" + mnemonicParsing="false" onAction="#playToggleButtonAction" prefHeight="24.0" + prefWidth="200.0" styleClass="button" text="Play"/> + <ToggleButton fx:id="pauseToggleButton" maxHeight="-Infinity" maxWidth="-Infinity" + mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0" + prefWidth="200.0" styleClass="button" text="Pause"/> + </VBox> + <FirefighterGrid fx:id="grid" width="600.0" height="600.0" + xmlns="http://javafx.com/javafx" + xmlns:fx="http://javafx.com/fxml"> + </FirefighterGrid> +</HBox> diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..6a2c8311aad2bec86286b0f270caab2751d19e4b Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/model/ExtinguishFire/ExtinguishFire.java b/src/main/java/model/ExtinguishFire/ExtinguishFire.java index 4e5e787dffbd8188a33ba9729a5aed8aa8aa4011..006a184b8dafa69d1dd97417c753609aa993d12c 100644 --- a/src/main/java/model/ExtinguishFire/ExtinguishFire.java +++ b/src/main/java/model/ExtinguishFire/ExtinguishFire.java @@ -6,10 +6,9 @@ import util.Position; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; public interface ExtinguishFire extends BoardElement { - void update(GameBoard gameBoard , Position position); + void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition); } diff --git a/src/main/java/model/ExtinguishFire/FireFighter.java b/src/main/java/model/ExtinguishFire/FireFighter.java index f575cc4e7692d09ea4ab1d55ded3e9770dfd25fe..060a5de7a4397caf1b72ce6fb7af84db03dcf117 100644 --- a/src/main/java/model/ExtinguishFire/FireFighter.java +++ b/src/main/java/model/ExtinguishFire/FireFighter.java @@ -66,14 +66,10 @@ public class FireFighter implements ExtinguishFire { } @Override - public void update(GameBoard gameBoard, Position position) { + public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { - HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ - elementPositionCopie.put(entry.getKey(),entry.getValue()); - } List<Position> firePositions = new ArrayList<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()) { + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { for (BoardElement element : entry.getValue()) { if (element.accept(new FireFinder())) { firePositions.add(entry.getKey()); @@ -81,40 +77,22 @@ public class FireFighter implements ExtinguishFire { } } Position newFirefighterPosition = gameBoard.neighborClosestToFire(position); - //elementPosition.get(position).remove(this); - if(elementPosition.containsKey(newFirefighterPosition)){ - elementPosition.get(newFirefighterPosition).add(this); + if(newElementPosition.containsKey(newFirefighterPosition)){ + newElementPosition.get(newFirefighterPosition).add(this); } else{ ArrayList<BoardElement> boardElements = new ArrayList<>(); boardElements.add(this); - elementPosition.put(newFirefighterPosition,boardElements); + newElementPosition.put(newFirefighterPosition,boardElements); } - gameBoard.extinguish(newFirefighterPosition); + extinguishPosition.add(newFirefighterPosition); List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream() .filter(firePositions::contains).toList(); for(Position firePosition : neighborFirePositions) { - gameBoard.extinguish(firePosition); + extinguishPosition.add(firePosition); } } - /*private List<Position> updateFirefighters() { - List<Position> result = new ArrayList<>(); - List<Position> firefighterNewPositions = new ArrayList<>(); - for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = neighborClosestToFire(firefighterPosition); - firefighterNewPositions.add(newFirefighterPosition); - extinguish(newFirefighterPosition); - result.add(firefighterPosition); - result.add(newFirefighterPosition); - List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream() - .filter(firePositions::contains).toList(); - for(Position firePosition : neighborFirePositions) - extinguish(firePosition); - result.addAll(neighborFirePositions); - } - firefighterPositions = firefighterNewPositions; - return result; - }*/ + } diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java index e3bee196be794157e60e9a463f70cda724448502..a37e88732c89ec6a270597877b45723785d2234c 100644 --- a/src/main/java/model/Flammable/Fire.java +++ b/src/main/java/model/Flammable/Fire.java @@ -64,19 +64,29 @@ public class Fire implements Flammable{ } @Override // TODO: 15/11/2023 - public void update(GameBoard gameBoard , Position position) { - + public void update(GameBoard gameBoard , Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + if(extinguishPosition.contains(position)){ + return ; + } if (gameBoard.stepNumber() % 2 == 0) { - List<Position> newFirePositions = new ArrayList<>(); - newFirePositions.addAll(gameBoard.neighbors(position)); - for(Position newPosition : newFirePositions){ + List<Position> newPositions = new ArrayList<>(); + newPositions.addAll(gameBoard.neighbors(position)); + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else { + newElementPosition.put(position,(new ArrayList<>())); + newElementPosition.get(position).add(this); + } + for(Position newPosition : newPositions){ + //if(extinguishPosition.contains(newPosition)) + //continue; if(GameBoard.elementPosition.containsKey(newPosition)) { for(BoardElement boardElement : GameBoard.elementPosition.get(newPosition)){ if(boardElement.accept(new FireFinder()) && boardElement.accept(new CrossRoad()) && boardElement.accept(new CrossMountain())){ break; } else if(!boardElement.accept( new FireFinder())&& !boardElement.accept(new CrossRoad()) && !boardElement.accept(new CrossMountain())){ - GameBoard.elementPosition.get(newPosition).add(this); + newElementPosition.get(newPosition).add(this); } } @@ -84,11 +94,18 @@ public class Fire implements Flammable{ else{ ArrayList<BoardElement> boardElements = new ArrayList<>(); boardElements.add(this); - GameBoard.elementPosition.put(newPosition,boardElements); + newElementPosition.put(newPosition,boardElements); System.out.println(GameBoard.elementPosition.get(position).get(0).getColor()); } } + }else{ + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else { + newElementPosition.put(position,(new ArrayList<>())); + newElementPosition.get(position).add(this); + } } } diff --git a/src/main/java/model/Flammable/Flammable.java b/src/main/java/model/Flammable/Flammable.java index b21f82b9a9ddc487a95a82902a89d4631ae608ce..325c6d3012ce69d730224122c935bfd377258c7a 100644 --- a/src/main/java/model/Flammable/Flammable.java +++ b/src/main/java/model/Flammable/Flammable.java @@ -10,5 +10,5 @@ import java.util.List; public interface Flammable extends BoardElement{ - void update(GameBoard gameBoard, Position position); + void update(GameBoard gameBoard, Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition); } diff --git a/src/main/java/model/GameBoard.java b/src/main/java/model/GameBoard.java index eacfba7c202883afe6d2ada87190c4a9aab0d013..5b4773cbdde757e725dbe13b2a7d4733c4f9c6d0 100644 --- a/src/main/java/model/GameBoard.java +++ b/src/main/java/model/GameBoard.java @@ -40,29 +40,35 @@ public class GameBoard implements Board{ } @Override public void updateToNextGeneration() { - HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>(); + HashMap<Position, ArrayList<BoardElement>> newElementPosition = new HashMap<>(); + ArrayList<Position> extinguishPosition = new ArrayList<>(); for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ - elementPositionCopie.put(entry.getKey(),entry.getValue()); - } - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()){ for(BoardElement element : entry.getValue()){ if (!element.accept(new FireFinder())){ ExtinguishFire element1 = (ExtinguishFire) element; - element1.update(this,entry.getKey()); + element1.update(this,entry.getKey(),newElementPosition,extinguishPosition); } } } - /*for (Map.Entry<Position, ArrayList<BoardElement>> entryCopie : elementPositionCopie.entrySet()){ - for(BoardElement element : entryCopie.getValue()){ - + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ + for(BoardElement element : entry.getValue()){ if (element.accept(new FireFinder())){ Flammable element1 = (Flammable) element; - element1.update(this,entryCopie.getKey()); + element1.update(this,entry.getKey(),newElementPosition,extinguishPosition); } } - }*/ + } + elementPosition.clear(); + extinguishPosition.clear(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : newElementPosition.entrySet()){ + if(elementPosition.containsKey(entry.getKey())){ + elementPosition.get(entry.getKey()).addAll(entry.getValue()); + }else{ + elementPosition.put(entry.getKey(),entry.getValue()); + } + } step++; @@ -112,16 +118,13 @@ public class GameBoard implements Board{ } public Position neighborClosestToFire(Position position) { - HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ - elementPositionCopie.put(entry.getKey(),entry.getValue()); - } + FireFinder fireFinder = new FireFinder(); Set<Position> firePositions = new HashSet<>(); Set<Position> seen = new HashSet<>(); HashMap<Position, Position> firstMove = new HashMap<>(); Queue<Position> toVisit = new LinkedList<>(neighbors(position)); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()){ + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){ for(BoardElement element : entry.getValue()){ if (element.accept(fireFinder)){ firePositions.add(entry.getKey()); @@ -144,7 +147,7 @@ public class GameBoard implements Board{ return position; } - public void extinguish(Position position) { + /*public void extinguish(Position position) { FireFinder fireFinder = new FireFinder(); HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>(); for (Map.Entry<Position, ArrayList<BoardElement>> entry : this.elementPosition.entrySet()){ @@ -160,6 +163,6 @@ public class GameBoard implements Board{ this.elementPosition.remove(position); } } - } + }*/ }