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 {
if (squareState.contains(ModelElement.ROCAILLE)) {
return ViewElement.ROCAILLE;
}
if (squareState.contains(ModelElement.MOTORIZEDFIREFIGHTER)) {
return ViewElement.MOTORIZEDFIREFIGHTER;
}
return ViewElement.EMPTY;
}
......
......@@ -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;
......
......@@ -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
......@@ -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
}
......@@ -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);
};
......
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 {
MOUNTAIN(Color.BROWN),
ROCAILLE(Color.GREEN),
MOTORIZEDFIREFIGHTER(Color.PURPLE),
EMPTY(Color.WHITE);
final 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