diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java index 6869f2186c80cc88a4c161b45fcf63d386fc091a..3c796977333c8a1c7c907f059e4e0161c3f6901e 100644 --- a/src/main/java/app/SimulatorApplication.java +++ b/src/main/java/app/SimulatorApplication.java @@ -20,6 +20,7 @@ public class SimulatorApplication extends javafx.application.Application { public static final int INITIAL_FIRE_COUNT = 3; public static final int INITIAL_FIREFIGHTER_COUNT = 6; public static final int INITIAL_CLOUD_COUNT = 6; + public static final int INITIAL_MONTAIN_COUNT = 4; private Stage primaryStage; private Parent view; @@ -45,7 +46,7 @@ public class SimulatorApplication extends javafx.application.Application { view = loader.load(); Controller controller = loader.getController(); controller.initialize(BOX_WIDTH, BOX_HEIGHT, COLUMN_COUNT, ROW_COUNT, - INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT); + INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_MONTAIN_COUNT); } private void showScene() { diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 7d23201b5b07f2ccfcf89b16b2be3eff85f259d0..4d0ca769ec200c76646912b22028fc4bca05bf60 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -91,6 +91,9 @@ public class Controller { if (model instanceof Cloud){ return new CLOUD(); } + if(model instanceof Montains){ + return new MONTAINS(); + } } @@ -130,9 +133,9 @@ public class Controller { } public void initialize(int squareWidth, int squareHeight, int columnCount, - int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount) { + int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainsCount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); - this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudsCount)); + this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount,initialCloudsCount, initialMontainsCount)); repaintGrid(); } diff --git a/src/main/java/model/BoardMethods.java b/src/main/java/model/BoardMethods.java new file mode 100644 index 0000000000000000000000000000000000000000..9ddf81196593f40de66fbb5b22336aff40e70962 --- /dev/null +++ b/src/main/java/model/BoardMethods.java @@ -0,0 +1,37 @@ +package model; + +import util.Position; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Set; + +public class BoardMethods { + int columnCount; + int rowCount; + + private final Random randomGenerator = new Random(); + + public void extinguish(Position position, Set<Position> firPositions) { + firPositions.remove(position); + } + + public List<Position> neighbors(Position position, int rowCount, int columnCount) { + List<Position> list = new ArrayList<>(); + if (position.row() > 0) list.add(new Position(position.row() - 1, position.column())); + if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1)); + if (position.row() < rowCount - 1) list.add(new Position(position.row() + 1, position.column())); + if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1)); + return list; + } + + public Position randomPosition() { + if (rowCount <= 0 || columnCount <= 0) { + throw new IllegalArgumentException("Les limites doivent être positives"); + } + + return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); + + } +} diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java index cfcc6f65c9d5fb8009f5b8084b83949b7abd3dd5..a18597cf7101a4589426a7f479fc06224ba1deed 100644 --- a/src/main/java/model/Cloud.java +++ b/src/main/java/model/Cloud.java @@ -4,12 +4,11 @@ import util.Position; import java.util.*; -public class Cloud implements ModelElement{ +public class Cloud extends BoardMethods implements ModelElement{ private List<Position> cloudsPositions; - private int rowCount; - private int columnCount; - private final Random randomGenerator = new Random(); + + public Cloud() { } @@ -35,13 +34,6 @@ public class Cloud implements ModelElement{ } - public Position randomPosition() { - if (rowCount <= 0 || columnCount <= 0) { - throw new IllegalArgumentException("Les limites doivent être positives"); - } - return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); - - } private Position randomMoveToNeighbor(Position position){ List<Position> list = new ArrayList<>(); @@ -52,14 +44,7 @@ public class Cloud implements ModelElement{ return list.get((int) (Math.random() * list.size())); } - private List<Position> neighbors(Position position) { - List<Position> list = new ArrayList<>(); - if (position.row() > 0) list.add(new Position(position.row() - 1, position.column())); - if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1)); - if (position.row() < rowCount - 1) list.add(new Position(position.row() + 1, position.column())); - if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1)); - return list; - } + public List<Position> updateCouds(Set<Position> firePositions) { List<Position> result = new ArrayList<>(); List<Position> cloudsNewPositions = new ArrayList<>(); @@ -79,9 +64,6 @@ public class Cloud implements ModelElement{ return result; } - private void extinguish(Position position,Set<Position> firePositions ) { - firePositions.remove(position); - } diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 44a839f13fc84f09eabaeefc02a8a35920d94b0e..7022bd7f68b1570ced0f3fbe5e9a8cf67f50edca 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -12,18 +12,21 @@ public class FirefighterBoard implements Board<List<ModelElement>> { private final int initialFirefighterCount; private final int initialCloudsCount; + private final int initialMontainCount; private Fires fires; private FireFighters fireFighters; private Cloud clouds; + private Montains Montains; private int step = 0; - public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount) { + public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudsCount, int initialMontainCount) { this.columnCount = columnCount; this.rowCount = rowCount; this.initialFireCount = initialFireCount; this.initialFirefighterCount = initialFirefighterCount; this.initialCloudsCount = initialCloudsCount; + this.initialMontainCount = initialMontainCount; initializeElements(); } @@ -31,9 +34,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> { this.fires = new Fires(); this.fireFighters = new FireFighters(); this.clouds = new Cloud(); + this.Montains = new Montains(); fires.initializeElements(initialFireCount,rowCount,columnCount); fireFighters.initializeElements(initialFirefighterCount,rowCount,columnCount); clouds.initializeElements(initialCloudsCount,rowCount, columnCount); + Montains.initializeElements(initialMontainCount, rowCount,columnCount); } @Override @@ -43,6 +48,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> { if (firefighterPosition.equals(position)) result.add(new FireFighters()); + for(Position MaintainPosition : Montains.getMontainsPositions()) + if (MaintainPosition.equals(position)) + result.add(new Montains()); + for(Position cloudsPositions : clouds.getCloudsPositions()) if (cloudsPositions.equals(position)) result.add(new Cloud()); @@ -91,7 +100,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { @Override public void setState(List<ModelElement> state, Position position) { - fires.extinguish(position); + //fires.extinguish(position); for (;;) { if (!fireFighters.getFireFightersPositions().remove(position)) break; } @@ -107,6 +116,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> { if (element instanceof Cloud){ clouds.add(position); } + if(element instanceof Montains){ + Montains.add(position); + } } } diff --git a/src/main/java/model/Fires.java b/src/main/java/model/Fires.java index c7cee370dd7a5f3785ae5584fa86811ce6e855a2..5ee1f2286b619f66debce4b4ee772183ae6c59ed 100644 --- a/src/main/java/model/Fires.java +++ b/src/main/java/model/Fires.java @@ -4,15 +4,12 @@ import util.Position; import java.util.*; -public class Fires implements ModelElement { +public class Fires extends BoardMethods implements ModelElement { private Set<Position> firePositions; private int step; - private int rowCount; - private int columnCount; - private final Random randomGenerator = new Random(); public Fires() { } @@ -52,27 +49,8 @@ public class Fires implements ModelElement { firePositions.add(randomPosition()); } - @Override - public Position randomPosition() { - if (rowCount <= 0 || columnCount <= 0) { - throw new IllegalArgumentException("Les limites doivent être positives"); - } - return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); - } - public void extinguish(Position position) { - firePositions.remove(position); - } - - private List<Position> neighbors(Position position, int rowCount, int columnCount) { - List<Position> list = new ArrayList<>(); - if (position.row() > 0) list.add(new Position(position.row() - 1, position.column())); - if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1)); - if (position.row() < rowCount - 1) list.add(new Position(position.row() + 1, position.column())); - if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1)); - return list; - } } diff --git a/src/main/java/model/Montains.java b/src/main/java/model/Montains.java index 963969c8e900d48a80f1a90aaac35eb97737db55..46b10c13df1b87677385460cbb207b455385efec 100644 --- a/src/main/java/model/Montains.java +++ b/src/main/java/model/Montains.java @@ -1,6 +1,49 @@ package model; -public class Montains { +import util.Position; + +import java.util.*; + +public class Montains extends BoardMethods implements ModelElement { + + private Set<Position> MontainsPositions; + + + public Montains() { + } + + public void add(Position newPositions){ + MontainsPositions.add(newPositions); + } + + public Set<Position> getMontainsPositions() { + return MontainsPositions; + } + + + + + + public void initializeElements(int initialFireCount, int rowCount, int columnCount) { + this.columnCount = columnCount; + this.rowCount = rowCount; + MontainsPositions = new HashSet<>(); + for (int index = 0; index < initialFireCount; index++) + MontainsPositions.add(randomPosition()); + } + + + + } + + + + + + + + + diff --git a/src/main/java/view/MONTAINS.java b/src/main/java/view/MONTAINS.java index 8dbec84128ec51c6cfc707d87e4d3f8a28394f04..b2f55e41a633b41236a1b9cbfdeacc444ecf5020 100644 --- a/src/main/java/view/MONTAINS.java +++ b/src/main/java/view/MONTAINS.java @@ -5,6 +5,6 @@ import javafx.scene.paint.Color; public class MONTAINS implements ViewElement { @Override public Color getColor() { - return Color.BROWN; + return Color.BLACK; } }