From 1341cc1329a5ef145bf052be61a8746765a7140c Mon Sep 17 00:00:00 2001 From: 1380 <@l21221596> Date: Mon, 13 Nov 2023 20:13:26 +0100 Subject: [PATCH] In order to implement the Visitor design pattern, we create various sub-packages, each one contains different classes and interfaces --- src/main/java/app/SimulatorApplication.java | 4 +- src/main/java/model/BoardElement.java | 18 +++++ src/main/java/model/ExtenguishFire/Cloud.java | 4 + .../model/ExtenguishFire/FireFighter.java | 4 + .../model/ExtenguishFire/FireFighters.java | 11 +++ .../ExtenguishFire/MotorizedFireFighter.java | 4 + src/main/java/model/FirefighterBoard.java | 9 ++- src/main/java/model/Flammable/Fire.java | 79 +++++++++++++++++++ src/main/java/model/Flammable/Fires.java | 20 +++++ src/main/java/model/Obstacle/Mountain.java | 4 + src/main/java/model/Obstacle/Obstacles.java | 10 +++ src/main/java/model/Obstacle/Road.java | 4 + .../java/model/Visitor/CrossMountain.java | 34 ++++++++ src/main/java/model/Visitor/CrossRoad.java | 34 ++++++++ src/main/java/model/Visitor/FireFinder.java | 34 ++++++++ src/main/java/model/Visitor/Visitor.java | 17 ++++ src/main/resources/view/view.fxml | 2 +- 17 files changed, 285 insertions(+), 7 deletions(-) create mode 100644 src/main/java/model/BoardElement.java create mode 100644 src/main/java/model/ExtenguishFire/Cloud.java create mode 100644 src/main/java/model/ExtenguishFire/FireFighter.java create mode 100644 src/main/java/model/ExtenguishFire/FireFighters.java create mode 100644 src/main/java/model/ExtenguishFire/MotorizedFireFighter.java create mode 100644 src/main/java/model/Flammable/Fire.java create mode 100644 src/main/java/model/Flammable/Fires.java create mode 100644 src/main/java/model/Obstacle/Mountain.java create mode 100644 src/main/java/model/Obstacle/Obstacles.java create mode 100644 src/main/java/model/Obstacle/Road.java create mode 100644 src/main/java/model/Visitor/CrossMountain.java create mode 100644 src/main/java/model/Visitor/CrossRoad.java create mode 100644 src/main/java/model/Visitor/FireFinder.java create mode 100644 src/main/java/model/Visitor/Visitor.java diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 6b009e4..2646eb7 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application { private static final String APP_NAME = "Firefighter simulator"; private static final int ROW_COUNT = 20; private static final int COLUMN_COUNT = 20; - private static final int SQUARE_WIDTH = 50; - private static final int SQUARE_HEIGHT = 50; + private static final int SQUARE_WIDTH = 30; + private static final int SQUARE_HEIGHT = 30; public static final int INITIAL_FIRE_COUNT = 3; public static final int INITIAL_FIREFIGHTER_COUNT = 6; diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java new file mode 100644 index 0000000..912a524 --- /dev/null +++ b/src/main/java/model/BoardElement.java @@ -0,0 +1,18 @@ +package model; + +import javafx.scene.paint.Color; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +public interface BoardElement { + + Color getColor(); + void setColor(Color color); + Boolean accept(Visitor visitor); + void initialize(int initialElementCount, HashMap<Position, ArrayList<BoardElement>> elementPosition); +} diff --git a/src/main/java/model/ExtenguishFire/Cloud.java b/src/main/java/model/ExtenguishFire/Cloud.java new file mode 100644 index 0000000..8301d6e --- /dev/null +++ b/src/main/java/model/ExtenguishFire/Cloud.java @@ -0,0 +1,4 @@ +package model.ExtenguishFire; + +public class Cloud { +} diff --git a/src/main/java/model/ExtenguishFire/FireFighter.java b/src/main/java/model/ExtenguishFire/FireFighter.java new file mode 100644 index 0000000..b9d56c6 --- /dev/null +++ b/src/main/java/model/ExtenguishFire/FireFighter.java @@ -0,0 +1,4 @@ +package model.ExtenguishFire; + +public class FireFighter { +} diff --git a/src/main/java/model/ExtenguishFire/FireFighters.java b/src/main/java/model/ExtenguishFire/FireFighters.java new file mode 100644 index 0000000..91e7ccf --- /dev/null +++ b/src/main/java/model/ExtenguishFire/FireFighters.java @@ -0,0 +1,11 @@ +package model.ExtenguishFire; + +import model.BoardElement; +import util.Position; + +import java.util.List; + +public interface FireFighters extends BoardElement { + List<Position> updateFirefighters(); + boolean accept(); +} diff --git a/src/main/java/model/ExtenguishFire/MotorizedFireFighter.java b/src/main/java/model/ExtenguishFire/MotorizedFireFighter.java new file mode 100644 index 0000000..e202215 --- /dev/null +++ b/src/main/java/model/ExtenguishFire/MotorizedFireFighter.java @@ -0,0 +1,4 @@ +package model.ExtenguishFire; + +public class MotorizedFireFighter { +} diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 3251952..2d0b030 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -6,14 +6,15 @@ import java.util.*; public class FirefighterBoard implements Board<List<ModelElement>> { - private final int columnCount; - private final int rowCount; + static int columnCount; + static int rowCount; private final int initialFireCount; private final int initialFirefighterCount; + protected HashMap<Position,ArrayList<BoardElement>> elementPosition; private List<Position> firefighterPositions; private Set<Position> firePositions; private int step = 0; - private final Random randomGenerator = new Random(); + static Random randomGenerator = new Random(); public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) { this.columnCount = columnCount; @@ -32,7 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { firefighterPositions.add(randomPosition()); } - private Position randomPosition() { + public static Position randomPosition() { return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); } diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java new file mode 100644 index 0000000..621ab15 --- /dev/null +++ b/src/main/java/model/Flammable/Fire.java @@ -0,0 +1,79 @@ +package model.Flammable; + +import javafx.scene.paint.Color; +import model.BoardElement; +import model.FirefighterBoard; +import model.Visitor.FireFinder; +import model.Visitor.Visitor; +import util.Position; + +import java.util.*; + +public class Fire implements Fires{ + + private Color color; + + public Fire(){ + } + public Fire(Color color){ + this.color = color; + } + + @Override + public Color getColor() { + return this.color; + } + + @Override + public void setColor(Color color) { + this.color = color; + } + + @Override + public Boolean accept(Visitor visitor){ + return visitor.visit(this); + } + + @Override + public void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) { + FireFinder fireFinder=new FireFinder(); + Position position = FirefighterBoard.randomPosition(); + int index; + for ( index = 0; index < initialFireCount; index++) { + if(elementPosition.containsKey(position) ) { + for (BoardElement element : elementPosition.get(position)) { + if (!element.accept(fireFinder)) { + break; + } + } + if(index==-1){ + elementPosition.get(position).add(new Fire()); + } + } + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(new Fire()); + elementPosition.put(position,boardElements); + } + } + } + + /*if(elementPosition.containsKey(position) && ){ + continue; + } + else if(elementPosition.containsKey(position)){ + elementPosition.get(position).add(fire); + } + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(fire); + elementPosition.put(position,boardElements); + } + } + }*/ + + @Override + public List<Position> updateFires() { + return null; + } +} diff --git a/src/main/java/model/Flammable/Fires.java b/src/main/java/model/Flammable/Fires.java new file mode 100644 index 0000000..b17a550 --- /dev/null +++ b/src/main/java/model/Flammable/Fires.java @@ -0,0 +1,20 @@ +package model.Flammable; + +import javafx.scene.paint.Color; +import model.BoardElement; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public interface Fires extends BoardElement{ + void setColor(Color color); + + Boolean accept(Visitor visitor); + + void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition); + + List<Position> updateFires(); +} diff --git a/src/main/java/model/Obstacle/Mountain.java b/src/main/java/model/Obstacle/Mountain.java new file mode 100644 index 0000000..3664256 --- /dev/null +++ b/src/main/java/model/Obstacle/Mountain.java @@ -0,0 +1,4 @@ +package model.Obstacle; + +public class Mountain { +} diff --git a/src/main/java/model/Obstacle/Obstacles.java b/src/main/java/model/Obstacle/Obstacles.java new file mode 100644 index 0000000..fc8290a --- /dev/null +++ b/src/main/java/model/Obstacle/Obstacles.java @@ -0,0 +1,10 @@ +package model.Obstacle; + +import model.BoardElement; +import util.Position; + +import java.util.List; + +public interface Obstacles extends BoardElement { + boolean accept(); +} diff --git a/src/main/java/model/Obstacle/Road.java b/src/main/java/model/Obstacle/Road.java new file mode 100644 index 0000000..70a0adb --- /dev/null +++ b/src/main/java/model/Obstacle/Road.java @@ -0,0 +1,4 @@ +package model.Obstacle; + +public class Road { +} diff --git a/src/main/java/model/Visitor/CrossMountain.java b/src/main/java/model/Visitor/CrossMountain.java new file mode 100644 index 0000000..288af45 --- /dev/null +++ b/src/main/java/model/Visitor/CrossMountain.java @@ -0,0 +1,34 @@ +package model.Visitor; + +import model.ExtenguishFire.FireFighter; +import model.ExtenguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; + +public class CrossMountain implements Visitor { + @Override + public boolean visit(Fire fire) { + return false; + } + + @Override + public boolean visit(FireFighter fireFighter) { + return false; + } + + @Override + public boolean visit(MotorizedFireFighter motorizedFireFighter) { + return false; + } + + @Override + public boolean visit(Mountain mountain) { + return false; + } + + @Override + public boolean visit(Road road) { + return false; + } +} diff --git a/src/main/java/model/Visitor/CrossRoad.java b/src/main/java/model/Visitor/CrossRoad.java new file mode 100644 index 0000000..cf53acf --- /dev/null +++ b/src/main/java/model/Visitor/CrossRoad.java @@ -0,0 +1,34 @@ +package model.Visitor; + +import model.ExtenguishFire.FireFighter; +import model.ExtenguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; + +public class CrossRoad implements Visitor { + @Override + public boolean visit(Fire fire) { + return false; + } + + @Override + public boolean visit(FireFighter fireFighter) { + return true; + } + + @Override + public boolean visit(MotorizedFireFighter motorizedFireFighter) { + return true; + } + + @Override + public boolean visit(Mountain mountain) { + return false; + } + + @Override + public boolean visit(Road road) { + return false; + } +} diff --git a/src/main/java/model/Visitor/FireFinder.java b/src/main/java/model/Visitor/FireFinder.java new file mode 100644 index 0000000..7e7ce43 --- /dev/null +++ b/src/main/java/model/Visitor/FireFinder.java @@ -0,0 +1,34 @@ +package model.Visitor; + +import model.ExtenguishFire.FireFighter; +import model.ExtenguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Obstacle.Mountain; +import model.Obstacle.Road; + +public class FireFinder implements Visitor { + @Override + public boolean visit(Fire fire) { + return true; + } + + @Override + public boolean visit(FireFighter fireFighter) { + return false; + } + + @Override + public boolean visit(MotorizedFireFighter motorizedFireFighter) { + return false; + } + + @Override + public boolean visit(Mountain mountain) { + return false; + } + + @Override + public boolean visit(Road road) { + return false; + } +} diff --git a/src/main/java/model/Visitor/Visitor.java b/src/main/java/model/Visitor/Visitor.java new file mode 100644 index 0000000..da5b1a2 --- /dev/null +++ b/src/main/java/model/Visitor/Visitor.java @@ -0,0 +1,17 @@ +package model.Visitor; + +import model.ExtenguishFire.FireFighter; +import model.ExtenguishFire.MotorizedFireFighter; +import model.Flammable.Fire; +import model.Flammable.Fires; +import model.Obstacle.Mountain; +import model.Obstacle.Road; + +public interface Visitor { + + boolean visit(Fire fire); + boolean visit(FireFighter fireFighter); + boolean visit(MotorizedFireFighter motorizedFireFighter); + boolean visit(Mountain mountain); + boolean visit(Road road); +} diff --git a/src/main/resources/view/view.fxml b/src/main/resources/view/view.fxml index 3f19ac9..ac3a91e 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" width="600.0" height="600.0" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"> </FirefighterGrid> -- GitLab