Skip to content
Snippets Groups Projects
Commit 5059fbfe authored by MEHDI's avatar MEHDI
Browse files

mehdi: finished MotorizedFireFighter class

parent a23b1cce
No related branches found
No related tags found
No related merge requests found
...@@ -100,6 +100,9 @@ public class Controller { ...@@ -100,6 +100,9 @@ public class Controller {
if (squareState.contains(ModelElement.ROCAILLE)) { if (squareState.contains(ModelElement.ROCAILLE)) {
return ViewElement.ROCAILLE; return ViewElement.ROCAILLE;
} }
if (squareState.contains(ModelElement.MOTORIZEDFIREFIGHTER)) {
return ViewElement.MOTORIZEDFIREFIGHTER;
}
return ViewElement.EMPTY; return ViewElement.EMPTY;
} }
......
...@@ -2,10 +2,12 @@ package model; ...@@ -2,10 +2,12 @@ package model;
import util.Neighbour; import util.Neighbour;
import util.Position; import util.Position;
import util.TargetStrategy;
import java.util.List; import java.util.List;
public abstract class Extinguisher implements Element{ public abstract class Extinguisher implements Element{
protected final TargetStrategy targetStrategy = new TargetStrategy();
protected Neighbour neighbour; protected Neighbour neighbour;
protected Position position; protected Position position;
......
...@@ -40,13 +40,11 @@ public class Fire implements Element { ...@@ -40,13 +40,11 @@ public class Fire implements Element {
List<Position> modifiedPositions = new ArrayList<>(); List<Position> modifiedPositions = new ArrayList<>();
if (firefighterBoard.stepNumber() % 2 == 0) { if (firefighterBoard.stepNumber() % 2 == 0) {
Set<Position> newFirePositions = new HashSet<>(); 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) { for (Position position : newFirePositions) {
if (!firefighterBoard.getFires().containsKey(position)) { if (!firefighterBoard.getFires().containsKey(position)) {
firefighterBoard.getFires().put(position, new Fire(position)); firefighterBoard.getFires().put(position, new Fire(position));
...@@ -62,6 +60,30 @@ public class Fire implements Element { ...@@ -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
...@@ -2,19 +2,17 @@ package model; ...@@ -2,19 +2,17 @@ package model;
import util.Neighbour; import util.Neighbour;
import util.Position; import util.Position;
import util.TargetStrategy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
public class FireFighter extends Extinguisher { public class FireFighter extends Extinguisher {
private final TargetStrategy targetStrategy = new TargetStrategy();
public FireFighter(Position position) { public FireFighter(Position position) {
super(position); super(position);
...@@ -24,14 +22,13 @@ public class FireFighter extends Extinguisher { ...@@ -24,14 +22,13 @@ public class FireFighter extends Extinguisher {
public List<Position> update(Board<List<ModelElement>> firefighterBoard) { public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
this.neighbour = new Neighbour(firefighterBoard); this.neighbour = new Neighbour(firefighterBoard);
List<Position> modifiedPositions = new ArrayList<>(); List<Position> modifiedPositions = new ArrayList<>();
Position currentPosition = this.getPosition(); Position currentPosition = this.getPosition();
Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors()); Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors());
this.setPosition(newPosition);
this.setPosition(newPosition);
modifiedPositions.add(currentPosition); modifiedPositions.add(currentPosition);
modifiedPositions.add(newPosition); modifiedPositions.add(newPosition);
...@@ -53,4 +50,8 @@ public class FireFighter extends Extinguisher { ...@@ -53,4 +50,8 @@ public class FireFighter extends Extinguisher {
return modifiedPositions; return modifiedPositions;
} }
} }
...@@ -7,12 +7,13 @@ import java.util.List; ...@@ -7,12 +7,13 @@ import java.util.List;
public enum ModelElement { public enum ModelElement {
FIREFIGHTER(10), FIREFIGHTER(5),
FIRE(10), FIRE(10),
CLOUD(10), CLOUD(10),
ROAD(5), ROAD(5),
MOUNTAIN(5), MOUNTAIN(5),
ROCAILLE(3); ROCAILLE(3),
MOTORIZEDFIREFIGHTER(5);
private final int initialNumber; private final int initialNumber;
...@@ -34,6 +35,7 @@ public enum ModelElement { ...@@ -34,6 +35,7 @@ public enum ModelElement {
case CLOUD -> new Cloud(position); case CLOUD -> new Cloud(position);
case MOUNTAIN -> new Montain(position); case MOUNTAIN -> new Montain(position);
case ROCAILLE -> new Rocaille(position); case ROCAILLE -> new Rocaille(position);
case MOTORIZEDFIREFIGHTER -> new MotorizedFireFighter(position);
default -> throw new IllegalArgumentException("Unknown ModelElement: " + this); default -> throw new IllegalArgumentException("Unknown ModelElement: " + this);
}; };
......
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;
}
}
...@@ -10,6 +10,7 @@ public enum ViewElement { ...@@ -10,6 +10,7 @@ public enum ViewElement {
MOUNTAIN(Color.BROWN), MOUNTAIN(Color.BROWN),
ROCAILLE(Color.GREEN), ROCAILLE(Color.GREEN),
MOTORIZEDFIREFIGHTER(Color.PURPLE),
EMPTY(Color.WHITE); EMPTY(Color.WHITE);
final Color color; final Color color;
ViewElement(Color color) { ViewElement(Color color) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment