diff --git a/build.gradle b/build.gradle index 0f1ef0d29ec7b11f9ae8e1f4ecc17e6ec020a78c..f51eff276a6ecca48a4999b7ecb22f85c5c22429 100644 --- a/build.gradle +++ b/build.gradle @@ -17,9 +17,7 @@ repositories { } dependencies { - testRuntimeOnly("org.junit.platform:junit-platform-launcher") { - because("Only needed to run tests in a version of IntelliJ IDEA that bundles older versions") - } + testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") testImplementation("org.assertj:assertj-core:3.24.2") testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") @@ -30,11 +28,7 @@ test { } application { - mainClass.set("firefighter.app.SimulatorMain") + mainClass.set("app.SimulatorMain") } -tasks { - shadowJar { - exclude("module-info.class") - } -} + diff --git a/src/main/java/firefighter/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java similarity index 92% rename from src/main/java/firefighter/app/SimulatorApplication.java rename to src/main/java/app/SimulatorApplication.java index b4392e222cc952fda19e415a89965d8cb4b7bf0a..6b009e4114f78b4f406f2a3954cb94be05354e80 100644 --- a/src/main/java/firefighter/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -1,6 +1,6 @@ -package firefighter.app; +package app; -import firefighter.controller.Controller; +import controller.Controller; import javafx.application.Platform; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; @@ -11,7 +11,7 @@ import java.io.IOException; import java.net.URL; public class SimulatorApplication extends javafx.application.Application { - private static final String VIEW_RESOURCE_PATH = "/firefighter/view/view.fxml"; + private static final String VIEW_RESOURCE_PATH = "/view/view.fxml"; private static final String APP_NAME = "Firefighter simulator"; private static final int ROW_COUNT = 20; private static final int COLUMN_COUNT = 20; diff --git a/src/main/java/firefighter/app/SimulatorMain.java b/src/main/java/app/SimulatorMain.java similarity index 82% rename from src/main/java/firefighter/app/SimulatorMain.java rename to src/main/java/app/SimulatorMain.java index 18533e36e19e89a503925343050543cb145eed25..f2e49f262ebec4136cf57d3b50fea3987b3b69fc 100644 --- a/src/main/java/firefighter/app/SimulatorMain.java +++ b/src/main/java/app/SimulatorMain.java @@ -1,4 +1,4 @@ -package firefighter.app; +package app; public class SimulatorMain { public static void main(String[] args){ diff --git a/src/main/java/firefighter/controller/Controller.java b/src/main/java/controller/Controller.java similarity index 91% rename from src/main/java/firefighter/controller/Controller.java rename to src/main/java/controller/Controller.java index 69d14709ff7ed3ecc0a94e2f0940d38cd57834dc..2a60897c6eb8ba847cb8589840c16a0f175ce0a3 100644 --- a/src/main/java/firefighter/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -1,4 +1,4 @@ -package firefighter.controller; +package controller; import javafx.animation.Animation; import javafx.animation.KeyFrame; @@ -12,12 +12,12 @@ import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleGroup; import javafx.util.Duration; import javafx.util.Pair; -import firefighter.model.Board; -import firefighter.model.ModelElement; -import firefighter.model.FirefighterBoard; -import firefighter.util.Position; -import firefighter.view.FirefighterGrid; -import firefighter.view.ViewElement; +import model.Board; +import model.ModelElement; +import model.FirefighterBoard; +import util.Position; +import view.Grid; +import view.ViewElement; import java.util.ArrayList; import java.util.List; @@ -38,7 +38,7 @@ public class Controller { @FXML private ToggleButton playToggleButton; @FXML - private FirefighterGrid grid; + private Grid<ViewElement> grid; private Timeline timeline; private Board<List<ModelElement>> board; @@ -125,7 +125,7 @@ public class Controller { public void initialize(int squareWidth, int squareHeight, int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { - grid.initialize(squareWidth, squareHeight, columnCount, rowCount); + grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount)); repaintGrid(); } diff --git a/src/main/java/firefighter/controller/PersistentToggleGroup.java b/src/main/java/controller/PersistentToggleGroup.java similarity index 96% rename from src/main/java/firefighter/controller/PersistentToggleGroup.java rename to src/main/java/controller/PersistentToggleGroup.java index a7e930bbe7681be9aff05d85a127bc56628cc03f..7c2c4b5c79d6ff65e0bfbe53c2fb7e9fd5944a1b 100644 --- a/src/main/java/firefighter/controller/PersistentToggleGroup.java +++ b/src/main/java/controller/PersistentToggleGroup.java @@ -1,4 +1,4 @@ -package firefighter.controller; +package controller; import javafx.collections.ListChangeListener.Change; import javafx.scene.control.Toggle; diff --git a/src/main/java/firefighter/model/Board.java b/src/main/java/model/Board.java similarity index 96% rename from src/main/java/firefighter/model/Board.java rename to src/main/java/model/Board.java index e53a9dd8985066e46f1df09737b94e649b9806c9..bb089a41406d57b0b2fe3d43b3c040cbd640b6b9 100644 --- a/src/main/java/firefighter/model/Board.java +++ b/src/main/java/model/Board.java @@ -1,6 +1,6 @@ -package firefighter.model; +package model; -import firefighter.util.Position; +import util.Position; import java.util.List; diff --git a/src/main/java/firefighter/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java similarity index 97% rename from src/main/java/firefighter/model/FirefighterBoard.java rename to src/main/java/model/FirefighterBoard.java index 925a162e1596b7b31af64cd7ec4851e64509b4e5..1e383a96ce0e8492cc2174d58c753256cc3d2353 100644 --- a/src/main/java/firefighter/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -1,6 +1,6 @@ -package firefighter.model; +package model; -import firefighter.util.Position; +import util.Position; import java.util.*; @@ -143,6 +143,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { @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); diff --git a/src/main/java/firefighter/model/ModelElement.java b/src/main/java/model/ModelElement.java similarity index 64% rename from src/main/java/firefighter/model/ModelElement.java rename to src/main/java/model/ModelElement.java index ca8f16a8cacb4287321f805acf6f5f16fc760bc5..759eee5e54c3a39472d8f7defbbbe6a2b67b8f00 100644 --- a/src/main/java/firefighter/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -1,4 +1,4 @@ -package firefighter.model; +package model; public enum ModelElement { FIREFIGHTER, FIRE diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index c82befa7b9e8653d6f801e17f1636683adf76493..4c36d97709b342e457203c75d081fc5cc1955c0f 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -2,7 +2,7 @@ module firefighter { requires javafx.controls; requires javafx.fxml; requires javafx.graphics; - opens firefighter.controller to javafx.fxml; - exports firefighter.app; - opens firefighter.app to javafx.fxml; -} \ No newline at end of file + opens controller to javafx.fxml; + exports app; + opens app to javafx.fxml; +} diff --git a/src/main/java/firefighter/util/Position.java b/src/main/java/util/Position.java similarity index 65% rename from src/main/java/firefighter/util/Position.java rename to src/main/java/util/Position.java index b44a78ae8ab9fd090bf2ff8ab174cb37f40cacfe..31dc4c1fb6a04b4e96649e133d1d116120d34683 100644 --- a/src/main/java/firefighter/util/Position.java +++ b/src/main/java/util/Position.java @@ -1,4 +1,4 @@ -package firefighter.util; +package util; public record Position(int row, int column) { diff --git a/src/main/java/firefighter/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java similarity index 86% rename from src/main/java/firefighter/view/FirefighterGrid.java rename to src/main/java/view/FirefighterGrid.java index 6d9a61c660b734bbf766d1b74be36a01a846a748..fdb7cda02869a10e13d2fe6d098ee640ace79ce5 100644 --- a/src/main/java/firefighter/view/FirefighterGrid.java +++ b/src/main/java/view/FirefighterGrid.java @@ -1,9 +1,9 @@ -package firefighter.view; +package view; import javafx.scene.canvas.Canvas; import javafx.scene.paint.Color; import javafx.util.Pair; -import firefighter.util.Position; +import util.Position; import java.util.List; @@ -35,21 +35,19 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{ paintLines(); } - public int getColumnCount() { + public int columnCount() { return columnCount; } - public int getRowCount() { + public int rowCount() { return rowCount; } public FirefighterGrid(){ } - public void initialize(int squareWidth, - int squareHeight, - int columnCount, - int rowCount) { + @Override + public void setDimensions(int columnCount, int rowCount, int squareWidth, int squareHeight) { this.squareWidth = squareWidth; this.squareHeight = squareHeight; this.columnCount = columnCount; diff --git a/src/main/java/firefighter/view/Grid.java b/src/main/java/view/Grid.java similarity index 59% rename from src/main/java/firefighter/view/Grid.java rename to src/main/java/view/Grid.java index 6b1d7fc8a42d1a48ff2c2399d0a876ccab85f8c5..d87897bac70a30d297efe6c00b9bc5e23a8206e2 100644 --- a/src/main/java/firefighter/view/Grid.java +++ b/src/main/java/view/Grid.java @@ -1,7 +1,7 @@ -package firefighter.view; +package view; import javafx.util.Pair; -import firefighter.util.Position; +import util.Position; import java.util.List; @@ -27,18 +27,30 @@ public interface Grid<E> { */ void repaint(E[][] elements); + /** + * Set the dimensions of the grid to the specified column count, row count, square width, and square height. + * This method adjusts the dimensions of the grid to the given number of columns, number of rows, square width, + * and square height. + * + * @param columnCount The new number of columns in the grid. + * @param rowCount The new number of rows in the grid. + * @param squareWidth The width of each square within the grid. + * @param squareHeight The height of each square within the grid. + */ + void setDimensions(int columnCount, int rowCount, int squareWidth, int squareHeight); + /** * Get the number of columns in the grid. * * @return The number of columns in the grid. */ - int getColumnCount(); + int columnCount(); /** * Get the number of rows in the grid. * * @return The number of rows in the grid. */ - int getRowCount(); + int rowCount(); } diff --git a/src/main/java/firefighter/view/ViewElement.java b/src/main/java/view/ViewElement.java similarity index 88% rename from src/main/java/firefighter/view/ViewElement.java rename to src/main/java/view/ViewElement.java index 0181e552dd18ac27bed065725a63ff3bb280030d..ffb76112e1af543df5af41fa906082ef11be9967 100644 --- a/src/main/java/firefighter/view/ViewElement.java +++ b/src/main/java/view/ViewElement.java @@ -1,4 +1,4 @@ -package firefighter.view; +package view; import javafx.scene.paint.Color; diff --git a/src/main/resources/firefighter/view/DarkTheme.css b/src/main/resources/view/DarkTheme.css similarity index 100% rename from src/main/resources/firefighter/view/DarkTheme.css rename to src/main/resources/view/DarkTheme.css diff --git a/src/main/resources/firefighter/view/view.fxml b/src/main/resources/view/view.fxml similarity index 95% rename from src/main/resources/firefighter/view/view.fxml rename to src/main/resources/view/view.fxml index cd4d2bdf27931506b37d22f33a2b4b029f17df68..3f19ac9de44d6f0b571dc29e43bf15ff2ebeff79 100644 --- a/src/main/resources/firefighter/view/view.fxml +++ b/src/main/resources/view/view.fxml @@ -3,14 +3,14 @@ <?import javafx.scene.control.Button?> <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.VBox?> -<?import firefighter.view.FirefighterGrid?> +<?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="firefighter.controller.Controller"> + fx:controller="controller.Controller"> <VBox> <Separator maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="200.0"/> diff --git a/src/test/java/firefighter/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java similarity index 66% rename from src/test/java/firefighter/model/FirefighterBoardTest.java rename to src/test/java/model/FirefighterBoardTest.java index a9b794cf5c3b35a222c44d671f6930c74056ae82..25cc8dbca8acea698879df68a5006a179f281ecc 100644 --- a/src/test/java/firefighter/model/FirefighterBoardTest.java +++ b/src/test/java/model/FirefighterBoardTest.java @@ -1,6 +1,7 @@ -package firefighter.model; +package model; import org.junit.jupiter.api.Test; +import util.Position; import java.util.List; @@ -26,4 +27,13 @@ public class FirefighterBoardTest { } assertThat(board.stepNumber()).isEqualTo(10); } + @Test + void testGetState_afterSet(){ + Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0); + Position position = new Position(1,2); + assertThat(board.getState(position)).isEmpty(); + board.setState(List.of(ModelElement.FIRE), position); + assertThat(board.getState(position)).containsExactly(ModelElement.FIRE); + } + } diff --git a/src/test/java/view/FirefighterGridTest.java b/src/test/java/view/FirefighterGridTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4b45ebdca3b936b42c2b322b1294488341d180bb --- /dev/null +++ b/src/test/java/view/FirefighterGridTest.java @@ -0,0 +1,20 @@ +package view; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class FirefighterGridTest { + @Test + void testColumnCount(){ + Grid<ViewElement> grid = new FirefighterGrid(); + grid.setDimensions(20,10,10,10); + assertThat(grid.columnCount()).isEqualTo(20); + } + @Test + void testRowCount(){ + Grid<ViewElement> grid = new FirefighterGrid(); + grid.setDimensions(20,10,10,10); + assertThat(grid.rowCount()).isEqualTo(10); + } +}