From 5059fbfe938664da6d61b0cedcd9e8d22f2c9ee0 Mon Sep 17 00:00:00 2001 From: MEHDI <mehdi.belhachemi@etu-univ.amu.fr> Date: Sun, 24 Nov 2024 20:44:39 +0100 Subject: [PATCH] mehdi: finished MotorizedFireFighter class --- src/main/java/controller/Controller.java | 3 ++ src/main/java/model/Extinguisher.java | 2 + src/main/java/model/Fire.java | 32 ++++++++++-- src/main/java/model/FireFighter.java | 19 +++---- src/main/java/model/ModelElement.java | 6 ++- src/main/java/model/MotorizedFireFighter.java | 49 +++++++++++++++++++ src/main/java/view/ViewElement.java | 1 + 7 files changed, 96 insertions(+), 16 deletions(-) create mode 100644 src/main/java/model/MotorizedFireFighter.java diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index 577a4d1..f1fa004 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -100,6 +100,9 @@ public class Controller { if (squareState.contains(ModelElement.ROCAILLE)) { return ViewElement.ROCAILLE; } + if (squareState.contains(ModelElement.MOTORIZEDFIREFIGHTER)) { + return ViewElement.MOTORIZEDFIREFIGHTER; + } return ViewElement.EMPTY; } diff --git a/src/main/java/model/Extinguisher.java b/src/main/java/model/Extinguisher.java index 4983ad2..1d7a630 100644 --- a/src/main/java/model/Extinguisher.java +++ b/src/main/java/model/Extinguisher.java @@ -2,10 +2,12 @@ package model; import util.Neighbour; import util.Position; +import util.TargetStrategy; import java.util.List; public abstract class Extinguisher implements Element{ + protected final TargetStrategy targetStrategy = new TargetStrategy(); protected Neighbour neighbour; protected Position position; diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java index 994ed1e..798f4c4 100644 --- a/src/main/java/model/Fire.java +++ b/src/main/java/model/Fire.java @@ -40,13 +40,11 @@ public class Fire implements Element { List<Position> modifiedPositions = new ArrayList<>(); if (firefighterBoard.stepNumber() % 2 == 0) { Set<Position> newFirePositions = new HashSet<>(); - for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) { - List<Position> neighboursAvailable = this.neighbour.getNeighbors().get(fire); - neighboursAvailable.removeAll(firefighterBoard.getObstacles().keySet()); - - newFirePositions.addAll(this.neighbour.getNeighbors().get(fire)); + for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) { + newFirePositions.addAll(removeMountainAndRoads(firefighterBoard,fire)); } + for (Position position : newFirePositions) { if (!firefighterBoard.getFires().containsKey(position)) { firefighterBoard.getFires().put(position, new Fire(position)); @@ -62,6 +60,30 @@ public class Fire implements Element { } + public List<Position>removeMountainAndRoads(Board<List<ModelElement>> firefighterBoard,Position position){ + List<Position>neighboursAvailable; + + neighboursAvailable = this.neighbour.getNeighbors().get(position); + if(firefighterBoard.stepNumber()%4==0){ + List<Position>MountainAndRoadsPositions = new ArrayList<>(); + for(Obstacle obstacle : firefighterBoard.getObstacles().values()){ + if(obstacle instanceof Road || obstacle instanceof Montain){ + MountainAndRoadsPositions.add(obstacle.getPosition()); + neighboursAvailable.removeAll(MountainAndRoadsPositions); + } + } + } + else{ + + neighboursAvailable.removeAll(firefighterBoard.getObstacles().keySet()); + } + + + return neighboursAvailable; + } + + + } \ No newline at end of file diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java index b656cf7..9e1233e 100644 --- a/src/main/java/model/FireFighter.java +++ b/src/main/java/model/FireFighter.java @@ -2,36 +2,33 @@ package model; import util.Neighbour; import util.Position; -import util.TargetStrategy; + import java.util.ArrayList; -import java.util.HashSet; + import java.util.List; public class FireFighter extends Extinguisher { - private final TargetStrategy targetStrategy = new TargetStrategy(); - - public FireFighter(Position position){ + public FireFighter(Position position) { super(position); element = ModelElement.FIREFIGHTER; } - public List<Position> update(Board<List<ModelElement>> firefighterBoard){ + public List<Position> update(Board<List<ModelElement>> firefighterBoard) { this.neighbour = new Neighbour(firefighterBoard); - List<Position> modifiedPositions = new ArrayList<>(); Position currentPosition = this.getPosition(); Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors()); + this.setPosition(newPosition); - this.setPosition(newPosition); modifiedPositions.add(currentPosition); modifiedPositions.add(newPosition); @@ -53,4 +50,8 @@ public class FireFighter extends Extinguisher { return modifiedPositions; } -} \ No newline at end of file + + + } + + diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java index 4aa440e..64c839a 100644 --- a/src/main/java/model/ModelElement.java +++ b/src/main/java/model/ModelElement.java @@ -7,12 +7,13 @@ import java.util.List; public enum ModelElement { - FIREFIGHTER(10), + FIREFIGHTER(5), FIRE(10), CLOUD(10), ROAD(5), MOUNTAIN(5), - ROCAILLE(3); + ROCAILLE(3), + MOTORIZEDFIREFIGHTER(5); private final int initialNumber; @@ -34,6 +35,7 @@ public enum ModelElement { case CLOUD -> new Cloud(position); case MOUNTAIN -> new Montain(position); case ROCAILLE -> new Rocaille(position); + case MOTORIZEDFIREFIGHTER -> new MotorizedFireFighter(position); default -> throw new IllegalArgumentException("Unknown ModelElement: " + this); }; diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/MotorizedFireFighter.java new file mode 100644 index 0000000..a9dad94 --- /dev/null +++ b/src/main/java/model/MotorizedFireFighter.java @@ -0,0 +1,49 @@ +package model; + +import util.Neighbour; +import util.Position; + +import java.util.ArrayList; +import java.util.List; + +public class MotorizedFireFighter extends Extinguisher { + + public MotorizedFireFighter(Position position) { + super(position); + this.element = ModelElement.MOTORIZEDFIREFIGHTER; + } + + @Override + public List<Position> update(Board<List<ModelElement>> firefighterBoard) { + this.neighbour = new Neighbour(firefighterBoard); + + List<Position> modifiedPositions = new ArrayList<>(); + + Position currentPosition = this.getPosition(); + Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors()); + Position DoublenewPosition = targetStrategy.neighborClosestToFire(newPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors()); + this.setPosition(DoublenewPosition); + + modifiedPositions.add(currentPosition); + modifiedPositions.add(newPosition); + modifiedPositions.add(DoublenewPosition); + + extinguish(firefighterBoard, newPosition); + extinguish(firefighterBoard, DoublenewPosition); + + + for (Position neighbor : this.neighbour.getNeighbors().get(DoublenewPosition)) { + extinguish(firefighterBoard, neighbor); + modifiedPositions.add(neighbor); + } + + for (Obstacle obstacle : firefighterBoard.getObstacles().values()) { + if (obstacle instanceof Montain) { + modifiedPositions.remove(obstacle.getPosition()); + } + } + + return modifiedPositions; + + } +} diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java index 57b2b15..a5db13a 100644 --- a/src/main/java/view/ViewElement.java +++ b/src/main/java/view/ViewElement.java @@ -10,6 +10,7 @@ public enum ViewElement { MOUNTAIN(Color.BROWN), ROCAILLE(Color.GREEN), + MOTORIZEDFIREFIGHTER(Color.PURPLE), EMPTY(Color.WHITE); final Color color; ViewElement(Color color) { -- GitLab