diff --git a/.gradle/8.4/executionHistory/executionHistory.bin b/.gradle/8.4/executionHistory/executionHistory.bin index ef3814db707d3311a601ee242faa1484aadf300d..8f1b2dd7e12c428126c841e15e393e8aa0750036 100644 Binary files a/.gradle/8.4/executionHistory/executionHistory.bin 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 index 90be8bbe46872fb2c2dfaa16c2b1debc3585b0e8..2f5ab811be3d96d24e78d9dc4139628ed8bc8a71 100644 Binary files a/.gradle/8.4/executionHistory/executionHistory.lock and b/.gradle/8.4/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.4/fileHashes/fileHashes.bin b/.gradle/8.4/fileHashes/fileHashes.bin index 3777e2fb75188a80f5ef02b487efb22b1d596b5c..f961414987ea05a2ba4cff7e6f0e15177557d141 100644 Binary files a/.gradle/8.4/fileHashes/fileHashes.bin 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 index 7b333d1b1b3ec72096d6acd1269ec9a0c55f1011..753dbf9dbddde9e52f56efab94835c5ce535b059 100644 Binary files a/.gradle/8.4/fileHashes/fileHashes.lock 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 index aa0feb0429a70db3fd0c1501c8b605824d233c01..838b0069cd156cd1359aad27da737a8fd0628a0a 100644 Binary files a/.gradle/8.4/fileHashes/resourceHashesCache.bin and b/.gradle/8.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index c77e84520038f8c47d14db5cb911ea630ec7b10d..0bfc94ece4020f6aa0d98d4a9986882cfc8fda8b 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 349a7660edc0174109e0bb6d9f10eadb1c99c724..26a07b303a3272556a607b454cab45b805954402 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class index 1003f5961c795950b88df71148fdc944e51f63e9..7e6f31bb2e3cb5962c4cc1ee6bc336501ac01730 100644 Binary files a/build/classes/java/main/app/SimulatorApplication.class and b/build/classes/java/main/app/SimulatorApplication.class differ diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class index 23933b95f3862a8016fa14fae947490553944e61..a8d8a50db6b3654e296244fac71b6fb8b811475b 100644 Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ diff --git a/build/classes/java/main/model/Builder/GameManage.class b/build/classes/java/main/model/Builder/GameManage.class index fd32c7f35a06865312c88379a1bd57794de41293..a0261b9904b2581661e7948aadf106998b3671b1 100644 Binary files a/build/classes/java/main/model/Builder/GameManage.class and b/build/classes/java/main/model/Builder/GameManage.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/Cloud.class b/build/classes/java/main/model/ExtinguishFire/Cloud.class index 61044ec9271ec1cec418aa6f50ce31b14ed7bf66..9a2ca81b62515b6aaff3d2f4ad91acf8b4fd3921 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/Cloud.class and b/build/classes/java/main/model/ExtinguishFire/Cloud.class differ diff --git a/build/classes/java/main/model/ExtinguishFire/FireFighter.class b/build/classes/java/main/model/ExtinguishFire/FireFighter.class index c0e51cda8547a4be38648418a2a9a1e46ff831f1..cec32da5f69030726d4773a781d4f3ce3c5d5131 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/FireFighter.class 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 index 2584644314d21ef8df7dc763702d6084d8844c81..73dcd4f4c73d5965ca13a94c1c33641c645b64c9 100644 Binary files a/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class and b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class differ diff --git a/build/classes/java/main/model/GameBoard.class b/build/classes/java/main/model/GameBoard.class index 6c8872b744c5e2a38f940a8d23806e30f1ac6e64..162baba038c7ed764297e1e083126849fc0c94a4 100644 Binary files a/build/classes/java/main/model/GameBoard.class 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 index 187c3cf23bc43eab3f4542f932b95e1291f70154..9d89533a3b088c27c70ebae6f63f2c2116accfe5 100644 Binary files a/build/classes/java/main/model/Obstacle/Mountain.class and b/build/classes/java/main/model/Obstacle/Mountain.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 37b3b8ba1f9900d28aabf3f9453e8536c2a212b8..c492006b2d0970468eb0f6acd127bd43204d83e7 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 241535ad21caa88d9dc9f06805b63b0593d3a18b..0ff42af2cb55da64fb072e87a0f0dce4aaab89be 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -17,11 +17,12 @@ public class SimulatorApplication extends javafx.application.Application { private static final int COLUMN_COUNT = 20; private static final int SQUARE_WIDTH = 30; private static final int SQUARE_HEIGHT = 30; - public static final int INITIAL_FIRE_COUNT = 5; + public static final int INITIAL_FIRE_COUNT = 8; public static final int INITIAL_FIREFIGHTER_COUNT = 3; public static final int INITIAL_CLOUD_COUNT = 15; public static final int INITIAL_MOTORIZEDFIREFIGHTER_COUNT = 2; public static final int INITIAL_MOUNTAIN_COUNT = 15; + public static final int INITIAL_ROAD_COUNT = 10; private Stage primaryStage; private Parent view; @@ -47,7 +48,7 @@ public class SimulatorApplication extends javafx.application.Application { view = loader.load(); Controller controller = loader.getController(); controller.initialize(SQUARE_WIDTH, SQUARE_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MOTORIZEDFIREFIGHTER_COUNT,INITIAL_MOUNTAIN_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MOTORIZEDFIREFIGHTER_COUNT,INITIAL_MOUNTAIN_COUNT,INITIAL_ROAD_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index b5f3cde65a57cbee5305ac5b521a9d103828d9a3..a5f13dee0791ec74705a2683e00fe5aac8573dad 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -24,7 +24,7 @@ import static java.util.Objects.requireNonNull; public class Controller { - public static final int PERIOD_IN_MILLISECONDS = 50; + public static final int PERIOD_IN_MILLISECONDS = 300; @FXML public Button restartButton; @FXML @@ -111,10 +111,11 @@ public class Controller { repaintGrid(); } - public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount,int initialMountainCount) { + public void initialize(int squareWidth, int squareHeight, int columnCount, int rowCount, int initialFireCount, + int initialFirefighterCount,int initialCloudCount, + int initialMotorizedFireFighterCount,int initialMountainCount,int initialRoadCount ) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - board = new GameBoard(rowCount,columnCount,initialFireCount,initialFirefighterCount,initialCloudCount,initialMotorizedFireFighterCount,initialMountainCount); + board = new GameBoard(rowCount,columnCount,initialFireCount,initialFirefighterCount,initialCloudCount,initialMotorizedFireFighterCount,initialMountainCount,initialRoadCount); board.initializeElements(); repaintGrid(); } diff --git a/src/main/java/model/Builder/ConcreteGameBuilder.java b/src/main/java/model/Builder/ConcreteGameBuilder.java index 0c367e38c7129e93b09c75108aa6571cc8c95a2b..627f03ffffc8a716a93e6e89e3f15e13226b31ca 100644 --- a/src/main/java/model/Builder/ConcreteGameBuilder.java +++ b/src/main/java/model/Builder/ConcreteGameBuilder.java @@ -36,9 +36,13 @@ public class ConcreteGameBuilder implements GameBuilder{ this.mountains=mountains; return this; } + public GameBuilder setRoad(int roads) { + this.roads=roads; + return this; + } @Override public GameManage build() { - return new GameManage(fire,firefighter,clouds,motorizedFireFighters,roads,mountains); + return new GameManage(fire,firefighter,clouds,motorizedFireFighters,mountains,roads); } } \ No newline at end of file diff --git a/src/main/java/model/Builder/FireFirefightersBuilder.java b/src/main/java/model/Builder/FireFirefightersBuilder.java index 53d18f891302d3885f5d5f803128802596cc1d87..85b8f5e671de385a1bdcb7d3a8e1e7d8bc8c575a 100644 --- a/src/main/java/model/Builder/FireFirefightersBuilder.java +++ b/src/main/java/model/Builder/FireFirefightersBuilder.java @@ -1,7 +1,7 @@ package model.Builder; public class FireFirefightersBuilder { - public void Build(int fires, int firefighters , int clouds , int motorizedFireFighters ,int mountains) { + public void Build(int fires, int firefighters , int clouds , int motorizedFireFighters ,int mountains,int roads) { ConcreteGameBuilder concreteGameBuilder; concreteGameBuilder =new ConcreteGameBuilder(); concreteGameBuilder.setFire(fires) @@ -9,6 +9,7 @@ public class FireFirefightersBuilder { .setCloud(clouds) .setMotorizedFireFighter(motorizedFireFighters) .setMountain(mountains) + .setRoad(roads) .build(); } } diff --git a/src/main/java/model/Builder/GameBuilder.java b/src/main/java/model/Builder/GameBuilder.java index 603ed19ba8f6b57d6b97439f6f5fef42e56c9488..64cb6b6466a21f0d6642d69f81e3f2d226d669d0 100644 --- a/src/main/java/model/Builder/GameBuilder.java +++ b/src/main/java/model/Builder/GameBuilder.java @@ -7,6 +7,7 @@ public interface GameBuilder { model.Builder.GameBuilder setCloud(int cloud); model.Builder.GameBuilder setMotorizedFireFighter(int motorizedFireFighter); model.Builder.GameBuilder setMountain(int mountain); + model.Builder.GameBuilder setRoad(int mountain); // TODO: 15/11/2023 la suite GameManage build(); diff --git a/src/main/java/model/Builder/GameManage.java b/src/main/java/model/Builder/GameManage.java index c544874832343d997be56627840b93ce4f6092b8..479b57403cb159964ebfde27f6f1396d0ea36add 100644 --- a/src/main/java/model/Builder/GameManage.java +++ b/src/main/java/model/Builder/GameManage.java @@ -6,6 +6,7 @@ import model.ExtinguishFire.FireFighter; import model.ExtinguishFire.MotorizedFireFighter; import model.Flammable.Fire; import model.Obstacle.Mountain; +import model.Obstacle.Road; public class GameManage { private final int fires; @@ -32,7 +33,7 @@ public class GameManage { new Fire(Color.RED); } for(int i=0;i<clouds;i++) { - new Cloud(Color.GRAY); + new Cloud(Color.DARKCYAN); } for(int i=0;i<motorizedFireFighters;i++) { new MotorizedFireFighter(Color.ORANGE); @@ -43,6 +44,9 @@ public class GameManage { for(int i=0;i<firefighters;i++) { new FireFighter(Color.BLUE); } + for(int i=0;i<roads;i++) { + new Road(Color.GRAY); + } } } diff --git a/src/main/java/model/ExtinguishFire/FireFighter.java b/src/main/java/model/ExtinguishFire/FireFighter.java index ba929484c77375da5c2d33304c088ffaff7e0104..5d0a8b594ce63f4fa09b8d1b1620587f8184f541 100644 --- a/src/main/java/model/ExtinguishFire/FireFighter.java +++ b/src/main/java/model/ExtinguishFire/FireFighter.java @@ -14,7 +14,7 @@ import java.util.*; import static model.GameBoard.elementPosition; -public class FireFighter implements ExtinguishFire { +public class FireFighter extends FireFighters { private final Color color; public FireFighter(Color color) { @@ -31,83 +31,35 @@ public class FireFighter implements ExtinguishFire { return visitor.visit(this); } - @Override public void initialize() { - Position position = GameBoard.randomPosition(); - while(!canInitialise(position)){ - position = GameBoard.randomPosition(); - } - addElementToElementPosition(elementPosition,position); + super.initialize(); } - - private void addElementToElementPosition(HashMap<Position, ArrayList<BoardElement>> elementPosition, Position position) { - if (elementPosition.containsKey(position) ) { - elementPosition.get(position).add(this); - - } else { - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(this); - elementPosition.put(position, boardElements); - } - } - - private boolean canInitialise(Position position) { - if(elementPosition.containsKey(position)){ - for (BoardElement element : GameBoard.elementPosition.get(position)) { - if (element.accept(new FireFinder()) || element.accept(new CrossMountain())) { - return false; - } - } - } - return true; + public void moveAndExtinguish(HashMap<Position, ArrayList<BoardElement>> newElementPosition, Position newFirefighterPosition, ArrayList<Position> extinguishPosition, List<Position> firePositions, GameBoard gameBoard) { + addElementToElementPosition(newElementPosition, newFirefighterPosition); + extinguishPosition.add(newFirefighterPosition); + List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream() + .filter(firePositions()::contains).toList(); + extinguishPosition.addAll(neighborFirePositions); } @Override public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { - List<Position> firePositions = firePosition(); + List<Position> firePositions = firePositions(); Position newFirefighterPosition = gameBoard.neighborClosestToFire(position); extinguishPosition.add(position); if(canMove(newFirefighterPosition)){ moveAndExtinguish(newElementPosition,newFirefighterPosition,extinguishPosition,firePositions,gameBoard); }else { List<Position> neighbors = gameBoard.neighbors(position); - for (Position positionNeighbour : neighbors) { - if(canMove(positionNeighbour)){ - moveAndExtinguish(newElementPosition,positionNeighbour,extinguishPosition,firePositions,gameBoard); + for (Position neighbourPosition : neighbors) { + if(canMove(neighbourPosition)){ + moveAndExtinguish(newElementPosition,neighbourPosition,extinguishPosition,firePositions,gameBoard); return; } } - moveAndExtinguish(newElementPosition,position,extinguishPosition,firePositions,gameBoard); + // moveAndExtinguish(newElementPosition,position,extinguishPosition,firePositions,gameBoard); } } - private void moveAndExtinguish(HashMap<Position, ArrayList<BoardElement>> newElementPosition, Position newFirefighterPosition, ArrayList<Position> extinguishPosition, List<Position> firePositions, GameBoard gameBoard) { - addElementToElementPosition(newElementPosition,newFirefighterPosition); - extinguishPosition.add(newFirefighterPosition); - List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream() - .filter(firePositions::contains).toList(); - extinguishPosition.addAll(neighborFirePositions); - } - private boolean canMove(Position newFirefighterPosition) { - if(elementPosition.containsKey(newFirefighterPosition)){ - for (BoardElement boardElement : elementPosition.get(newFirefighterPosition)) { - if (boardElement.accept(new CrossMountain())) { - return false; - } - } - } - return true; - } - private List<Position> firePosition(){ - List<Position> firePositions = new ArrayList<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { - for (BoardElement element : entry.getValue()) { - if (element.accept(new FireFinder())) { - firePositions.add(entry.getKey()); - } - } - } - return firePositions; - } } diff --git a/src/main/java/model/ExtinguishFire/FireFighters.java b/src/main/java/model/ExtinguishFire/FireFighters.java new file mode 100644 index 0000000000000000000000000000000000000000..519a76c9284e542b945c3c12f2755c026d87af12 --- /dev/null +++ b/src/main/java/model/ExtinguishFire/FireFighters.java @@ -0,0 +1,80 @@ +package model.ExtinguishFire; + +import javafx.scene.paint.Color; +import model.BoardElement; +import model.GameBoard; +import model.Visitor.CrossMountain; +import model.Visitor.FireFinder; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static model.GameBoard.elementPosition; + +public abstract class FireFighters implements BoardElement { + + public abstract Color getColor(); + + @Override + public abstract Boolean accept(Visitor visitor); + + @Override + public void initialize() { + Position position = GameBoard.randomPosition(); + while (!canInitialise(position)) { + position = GameBoard.randomPosition(); + } + addElementToElementPosition(elementPosition, position); + } + + public void addElementToElementPosition(HashMap<Position, ArrayList<BoardElement>> elementPosition, Position position) { + if (elementPosition.containsKey(position)) { + elementPosition.get(position).add(this); + + } else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position, boardElements); + } + } + + public boolean canInitialise(Position position) { + if (elementPosition.containsKey(position)) { + for (BoardElement element : GameBoard.elementPosition.get(position)) { + if (element.accept(new FireFinder()) || element.accept(new CrossMountain())) { + return false; + } + } + } + return true; + } + + public boolean canMove(Position newFirefighterPosition) { + if (elementPosition.containsKey(newFirefighterPosition)) { + for (BoardElement boardElement : elementPosition.get(newFirefighterPosition)) { + if (boardElement.accept(new CrossMountain())) { + return false; + } + } + } + return true; + } + + public List<Position> firePositions() { + List<Position> firePositions = new ArrayList<>(); + for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { + for (BoardElement element : entry.getValue()) { + if (element.accept(new FireFinder())) { + firePositions.add(entry.getKey()); + } + } + } + return firePositions; + } + + public abstract void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition); +} \ No newline at end of file diff --git a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java index 60b855dcfc447652a1083cf3156be0f3dc489017..a371a8ef090798e0f728e2aaf98678da0c08574a 100644 --- a/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java +++ b/src/main/java/model/ExtinguishFire/MotorizedFireFighter.java @@ -3,26 +3,23 @@ package model.ExtinguishFire; import javafx.scene.paint.Color; import model.BoardElement; import model.GameBoard; -import model.Visitor.CrossMountain; -import model.Visitor.FireFinder; import model.Visitor.Visitor; import util.Position; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; -import static model.GameBoard.elementPosition; -public class MotorizedFireFighter implements ExtinguishFire { +public class MotorizedFireFighter extends FireFighters { private final Color color; - public MotorizedFireFighter(Color color){ - this.color=color; + public MotorizedFireFighter(Color color) { + this.color = color; initialize(); } + @Override public Color getColor() { return color; @@ -33,75 +30,45 @@ public class MotorizedFireFighter implements ExtinguishFire { return visitor.visit(this); } - @Override public void initialize() { - CrossMountain crossMountain=new CrossMountain(); - boolean canInitialise; - Position position = GameBoard.randomPosition(); - if(elementPosition.containsKey(position)) { - for (;;) { - canInitialise = true; - for (BoardElement element : elementPosition.get(position)) { - if (element.accept(crossMountain)) { - canInitialise = false; - break; - } - } - if (canInitialise) { - break; - } - position = GameBoard.randomPosition(); - if (!elementPosition.containsKey(position)) break; - } - if (elementPosition.containsKey(position)) - elementPosition.get(position).add(this); - else { - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(this); - elementPosition.put(position, boardElements); - } + super.initialize(); + } + public void moveAndExtinguish(HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> newMotorizedFireFighterPositions, + ArrayList<Position> extinguishPosition, List<Position> firePositions, GameBoard gameBoard) { + addElementToElementPosition(newElementPosition, newMotorizedFireFighterPositions.get(1)); + + for (Position newPosition : newMotorizedFireFighterPositions) { + extinguishPosition.add(newPosition); + } + List<Position> neighborFirePositions = new ArrayList<>(); + neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPositions.get(0)).stream() + .filter(firePositions::contains).toList()); + neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPositions.get(1)).stream() + .filter(firePositions::contains).toList()); + for (Position firePosition : neighborFirePositions) { + extinguishPosition.add(firePosition); } - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(this); - elementPosition.put(position,boardElements); } @Override public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { - List<Position> firePositions = new ArrayList<>(); - for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) { - for (BoardElement element : entry.getValue()) { - if (element.accept(new FireFinder())) { - firePositions.add(entry.getKey()); - } - } - } + List<Position> firePositions = firePositions(); ArrayList<Position> newMotorizedFireFighterPositions = new ArrayList<>(); Position newMotorizedFireFighterPosition1 = gameBoard.neighborClosestToFire(position); newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition1); Position newMotorizedFireFighterPosition2 = gameBoard.neighborClosestToFire(newMotorizedFireFighterPosition1); newMotorizedFireFighterPositions.add(newMotorizedFireFighterPosition2); - - if(newElementPosition.containsKey(newMotorizedFireFighterPosition2)){ - newElementPosition.get(newMotorizedFireFighterPosition2).add(this); - } - else{ - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(this); - newElementPosition.put(newMotorizedFireFighterPosition2,boardElements); - } - for(Position newPosition : newMotorizedFireFighterPositions) { - extinguishPosition.add(newPosition); - } - List<Position> neighborFirePositions = new ArrayList<>(); - neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPosition1).stream() - .filter(firePositions::contains).toList()); - neighborFirePositions.addAll(gameBoard.neighbors(newMotorizedFireFighterPosition2).stream() - .filter(firePositions::contains).toList()); - for(Position firePosition : neighborFirePositions) { - extinguishPosition.add(firePosition); + if (canMove(newMotorizedFireFighterPosition2)) { + moveAndExtinguish(newElementPosition, newMotorizedFireFighterPositions, extinguishPosition,firePositions, gameBoard); + } else { + List<Position> neighbors = gameBoard.neighbors(position); + for (Position neighbourPosition : neighbors) { + if (canMove(neighbourPosition)) { + moveAndExtinguish(newElementPosition, newMotorizedFireFighterPositions, extinguishPosition, firePositions, gameBoard); + } + } } } } diff --git a/src/main/java/model/GameBoard.java b/src/main/java/model/GameBoard.java index 01565fa13b9758f0a38afa5602bc2600ea122c97..4cfd2b62e5d919e57d9f262d8b1897a5fa20a801 100644 --- a/src/main/java/model/GameBoard.java +++ b/src/main/java/model/GameBoard.java @@ -17,6 +17,7 @@ public class GameBoard implements Board{ private int initialCloudCount; private int initialMotorizedFireFighterCount; private int initialMountainCount; + private int initialRoadCount; private int step = 0; static Random randomGenerator = new Random(); @@ -27,7 +28,8 @@ public class GameBoard implements Board{ } - public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount,int initialMotorizedFireFighterCount,int initialMountainCount) { + public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount,int initialCloudCount, + int initialMotorizedFireFighterCount,int initialMountainCount,int initialRoadCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; @@ -35,11 +37,13 @@ public class GameBoard implements Board{ this.initialCloudCount = initialCloudCount; this.initialMotorizedFireFighterCount=initialMotorizedFireFighterCount; this.initialMountainCount = initialMountainCount; + this.initialRoadCount = initialRoadCount; } public void initializeElements(){ FireFirefightersBuilder fireFirefighterBuilder=new FireFirefightersBuilder(); - fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount,this.initialCloudCount,this.initialMotorizedFireFighterCount,this.initialMountainCount); + fireFirefighterBuilder.Build(this.initialFireCount,this.initialFirefighterCount, + this.initialCloudCount,this.initialMotorizedFireFighterCount,this.initialMountainCount,this.initialRoadCount); } public static Position randomPosition() { diff --git a/src/main/java/model/Obstacle/Mountain.java b/src/main/java/model/Obstacle/Mountain.java index d53d4cef0837361c4797699622fdbe9ab5fe1fbc..643242cc2833def55bdbfa85f6d3e4d6de5b29c6 100644 --- a/src/main/java/model/Obstacle/Mountain.java +++ b/src/main/java/model/Obstacle/Mountain.java @@ -3,17 +3,15 @@ package model.Obstacle; import javafx.scene.paint.Color; import model.BoardElement; import model.GameBoard; -import model.Visitor.FireFinder; import model.Visitor.Visitor; import util.Position; import java.util.ArrayList; import java.util.HashMap; -import java.util.Map; import static model.GameBoard.elementPosition; -public class Mountain implements Obstacles{ +public class Mountain extends Obstacles { private final Color color; @@ -33,24 +31,11 @@ public class Mountain implements Obstacles{ @Override public void initialize() { - Position position = GameBoard.randomPosition(); - if (elementPosition.containsKey(position)) - elementPosition.get(position).add(this); - else { - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(this); - elementPosition.put(position, boardElements); - } + super.initialize(); } @Override public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { - if(newElementPosition.containsKey(position)) - newElementPosition.get(position).add(this); - else{ - ArrayList<BoardElement> boardElements = new ArrayList<>(); - boardElements.add(this); - newElementPosition.put(position,boardElements); - } + super.update(gameBoard,position,newElementPosition,extinguishPosition); } } diff --git a/src/main/java/model/Obstacle/Obstacles.java b/src/main/java/model/Obstacle/Obstacles.java index c913b4a72f4c407f06db71a4f1c70f5b9aa0bdf9..52c830f525c622b9994781e998a9f9945d0a95ca 100644 --- a/src/main/java/model/Obstacle/Obstacles.java +++ b/src/main/java/model/Obstacle/Obstacles.java @@ -1,15 +1,38 @@ package model.Obstacle; +import javafx.scene.paint.Color; import model.BoardElement; import model.GameBoard; +import model.Visitor.Visitor; import util.Position; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; -public interface Obstacles extends BoardElement { +import static model.GameBoard.elementPosition; - //void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition); +public abstract class Obstacles implements BoardElement { + public abstract Color getColor(); + public abstract Boolean accept(Visitor visitor); + public void initialize(){ + Position position = GameBoard.randomPosition(); + if (elementPosition.containsKey(position)) + elementPosition.get(position).add(this); + else { + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + elementPosition.put(position, boardElements); + } + } + public void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, + ArrayList<Position> extinguishPosition){ + if(newElementPosition.containsKey(position)) + newElementPosition.get(position).add(this); + else{ + ArrayList<BoardElement> boardElements = new ArrayList<>(); + boardElements.add(this); + newElementPosition.put(position,boardElements); + } + } } diff --git a/src/main/java/model/Obstacle/Road.java b/src/main/java/model/Obstacle/Road.java index 70a0adb708ca4b522d16564840512561ccc1c34a..f4a15d5a94eeea524a5db428e0fa196fce3f06f8 100644 --- a/src/main/java/model/Obstacle/Road.java +++ b/src/main/java/model/Obstacle/Road.java @@ -1,4 +1,38 @@ package model.Obstacle; -public class Road { +import javafx.scene.paint.Color; +import model.BoardElement; +import model.GameBoard; +import model.Visitor.Visitor; +import util.Position; + +import java.util.ArrayList; +import java.util.HashMap; + +public class Road extends Obstacles { + private final Color color; + + public Road(Color color){ + this.color=color; + initialize(); + } + @Override + public Color getColor() { + return color; + } + + @Override + public Boolean accept(Visitor visitor) { + return visitor.visit(this); + } + + @Override + public void initialize() { + super.initialize(); + } + + @Override + public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) { + super.update(gameBoard,position,newElementPosition,extinguishPosition); + } }