diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 7b20109cc6272fc8bd2f996d24042dc9ad05c7a5..a3076f1b5ef8ec07a7bff94ad285b9bf97d7c974 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -17,10 +17,10 @@ public class SimulatorApplication extends javafx.application.Application { private static final int COLUMN_COUNT = 20; private static final int SQUARE_WIDTH = 50; private static final int SQUARE_HEIGHT = 50; - public static final int INITIAL_FIRE_COUNT = 3; - public static final int INITIAL_FIREFIGHTER_COUNT = 0; + public static final int INITIAL_FIRE_COUNT = 1; + public static final int INITIAL_FIREFIGHTER_COUNT = 4; - public static final int INITIAL_CLOUD_COUNT = 3; + public static final int INITIAL_CLOUD_COUNT = 4; private Stage primaryStage; private Parent view; diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index ba7d444e1a5a5dd931de271f492e460d4165dbeb..334fe19e823206bff837f6c3bee1128389daca89 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -73,7 +73,7 @@ public class Controller { } private void updateBoard2(){ - board.testScreen(); + List<Position> updatedPositions = board.updateToNextGeneration2(); List<Position> updatedClearSquares = new ArrayList<>(); List<Item> updatedSquares = new ArrayList<>(); @@ -86,6 +86,7 @@ public class Controller { } grid.repaint2(updatedSquares, updatedClearSquares); updateGenerationLabel(board.stepNumber()); + //board.testScreen(); } private void repaintGrid(){ diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index a4b18d8d9ef28d0157c2fe104f4b4b5fddcdfc40..40adb4a068cc70708f4cbeaba95681fd1337e108 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -16,18 +16,19 @@ public class Cloud extends Extinguisher implements Item { List<Position> move(FirefighterBoard board) { List<Position> result = new ArrayList<>(); + List<Position> finalNeighborsList = new ArrayList<>(); List<Position> neighborsList = board.neighbors(position); for (Position neighborPosition: neighborsList) { - if (board.getItemByPosition(neighborPosition) != null){ - neighborsList.remove(neighborPosition); + if (board.getItemByPosition(neighborPosition) == null){ + finalNeighborsList.add(neighborPosition); } } - if (neighborsList.isEmpty()){ - return null; + if (finalNeighborsList.isEmpty()){ + return new ArrayList<Position>(); } Random ran = new Random(); result.add(position); - position = neighborsList.get(ran.nextInt(neighborsList.size())); + position = finalNeighborsList.get(ran.nextInt(finalNeighborsList.size())); result.add(position); return result; } diff --git a/src/main/java/model/Firefighter.java b/src/main/java/model/Firefighter.java index 906e3eedd6e8415975fa0c6cfe00b3e9cb5643b3..e08e01094f889bbcd401dea374e106eee471b3de 100644 --- a/src/main/java/model/Firefighter.java +++ b/src/main/java/model/Firefighter.java @@ -22,7 +22,7 @@ public class Firefighter extends Extinguisher implements Item{ firstMove.put(initialMove, initialMove); toVisit.add(initialMove); } - if (board.getItemByPosition(initialMove) instanceof Fire) return null; + if (board.getItemByPosition(initialMove) instanceof Fire) return new ArrayList<Position>(); } while (!toVisit.isEmpty()) { Position current = toVisit.poll(); @@ -39,11 +39,10 @@ public class Firefighter extends Extinguisher implements Item{ firstMove.put(adjacent, firstMove.get(current)); } } - return null; + return new ArrayList<Position>(); } public String toString(){ return "Pompier position : [" + position.row() + ", " + position.column()+ "]"; } - } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 235d833c1aa3f0ff274fa9fe1585dd074d397700..fefb41c9f9a4c427ba3c4afb89f8a33309d7d123 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -224,6 +224,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } public void testScreen(){ Position position; + + //System.out.println(itemList.toString()); + for (int row = 0; row < rowCount; row++){ for (int column = 0; column < columnCount; column++){ diff --git a/src/main/java/model/MotorFirefighter.java b/src/main/java/model/MotorFirefighter.java new file mode 100644 index 0000000000000000000000000000000000000000..64bf86ab8f541d977c3457654b1518bd0886eb01 --- /dev/null +++ b/src/main/java/model/MotorFirefighter.java @@ -0,0 +1,50 @@ +package model; + +import javafx.scene.paint.Color; +import util.Position; +import java.util.List; + +import java.util.*; + +public class MotorFirefighter extends Extinguisher implements Item{ + public MotorFirefighter(Position position) { + super(position); + this.color = Color.PURPLE; + } + + public List<Position> move(FirefighterBoard board) { + List<Position> result = new ArrayList<>(); + Set<Position> seen = new HashSet<>(); + HashMap<Position, Position> firstMove = new HashMap<>(); + Queue<Position> toVisit = new LinkedList<>(); + for (int i = 0; i < 2; i++){ + for (Position initialMove : board.neighbors(position)) { + if (board.getItemByPosition(initialMove) == null) { + firstMove.put(initialMove, initialMove); + toVisit.add(initialMove); + } + if (board.getItemByPosition(initialMove) instanceof Fire) return new ArrayList<Position>(); + } + } + while (!toVisit.isEmpty()) { + Position current = toVisit.poll(); + if (board.getItemByPosition(current) instanceof Fire) { + result.add(position); + position = firstMove.get(current); + result.add(position); + return result; + } + for (Position adjacent : board.neighbors(current)) { + if (seen.contains(adjacent)) continue; + toVisit.add(adjacent); + seen.add(adjacent); + firstMove.put(adjacent, firstMove.get(current)); + } + } + return new ArrayList<Position>(); + } + + public String toString(){ + return "Pompier position : [" + position.row() + ", " + position.column()+ "]"; + } +} diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java index 28bbedd8e0e10cdcb8fe9412d07e720541baaaec..f302ac40ec86ea05f5d56331abdbf52d8192ecdb 100644 --- a/src/main/java/view/FirefighterGrid.java +++ b/src/main/java/view/FirefighterGrid.java @@ -104,6 +104,9 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{ this.squareHeight = squareHeight; this.columnCount = columnCount; this.rowCount = rowCount; + super.setWidth(squareWidth*columnCount); + super.setHeight(squareHeight*rowCount); + } private void paintLines(){ @@ -123,22 +126,22 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{ private void paintSquare(int row, int column, Color color){ getGraphicsContext2D().setFill(color); - getGraphicsContext2D().fillRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth); + getGraphicsContext2D().fillRect(column*squareWidth,row*squareHeight, squareWidth, squareHeight); } public void paintTriangle(int row, int column, Color color){ getGraphicsContext2D().setFill(color); - getGraphicsContext2D().fillPolygon(new double[]{row*squareHeight , row*squareHeight + squareHeight/2, (row+1)*squareHeight}, - new double[]{(column+1)*squareWidth , column*squareHeight, (column+1)*squareHeight}, + getGraphicsContext2D().fillPolygon(new double[]{column*squareWidth , column*squareWidth + squareWidth/2, (column+1)*squareWidth}, + new double[]{(row+1)*squareHeight , row*squareHeight, (row+1)*squareHeight}, 3); } public void paintCircle(int row, int column, Color color){ getGraphicsContext2D().setFill(color); - getGraphicsContext2D().fillOval(row*squareHeight, column*squareWidth, squareHeight, squareWidth); + getGraphicsContext2D().fillOval(column*squareWidth, row*squareHeight, squareHeight, squareWidth); } private void clearSquare(int row, int column){ - getGraphicsContext2D().clearRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth); + getGraphicsContext2D().clearRect(column*squareWidth,row*squareHeight, squareWidth, squareHeight); } } \ No newline at end of file diff --git a/src/main/resources/view/view.fxml b/src/main/resources/view/view.fxml index 3f19ac9de44d6f0b571dc29e43bf15ff2ebeff79..336ffa315645baacbe25bf59171d2ff6d867b9c5 100644 --- a/src/main/resources/view/view.fxml +++ b/src/main/resources/view/view.fxml @@ -33,7 +33,7 @@ mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0" prefWidth="200.0" styleClass="button" text="Pause"/> </VBox> - <FirefighterGrid fx:id="grid" width="1000.0" height="1000.0" + <FirefighterGrid fx:id="grid" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"> </FirefighterGrid>