diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 6b009e4114f78b4f406f2a3954cb94be05354e80..2646eb7602accd2b174ae3a116377f828e0b1473 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 0000000000000000000000000000000000000000..912a524ab8f5b87c0cd646e7ee97d02544e98e51 --- /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 0000000000000000000000000000000000000000..8301d6e0305fc8d958bb64c04d138c0ad973ea78 --- /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 0000000000000000000000000000000000000000..b9d56c631693b8d5383b23a8d278dcade6fbf929 --- /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 0000000000000000000000000000000000000000..91e7ccf29f20745e2601a919a6391f2158fb13d7 --- /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 0000000000000000000000000000000000000000..e202215711af31838c048b882230d900969a941a --- /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 3251952ea90ec5ea59fc3a3630f3d2a4e4e96f01..2d0b03048f701e29ad8314836efb12fb6537d22e 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 0000000000000000000000000000000000000000..621ab15ae60f0b6bb6efa4369536f263daeb5566 --- /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 0000000000000000000000000000000000000000..b17a5509556b363b8ca7753e183b60df44469b2b --- /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 0000000000000000000000000000000000000000..36642561fef73104618563ff81e54732a4ef2f6a --- /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 0000000000000000000000000000000000000000..fc8290ad64a103e9ac78ed571720ac51e55defcb --- /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 0000000000000000000000000000000000000000..70a0adb708ca4b522d16564840512561ccc1c34a --- /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 0000000000000000000000000000000000000000..288af45085d83abed059642b9ddf34a4e2377198 --- /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 0000000000000000000000000000000000000000..cf53acf322cc562e77338bc2ad48c491e2097d85 --- /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 0000000000000000000000000000000000000000..7e7ce43771fb2b4503e6c666c8ba49a16eada7f6 --- /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 0000000000000000000000000000000000000000..da5b1a222d9c24946e95e7ade64a596f4a099f93 --- /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 3f19ac9de44d6f0b571dc29e43bf15ff2ebeff79..ac3a91e3880d9099cf029fdf4a6cab518b6fde07 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>