Skip to content
Snippets Groups Projects
Commit f830f8ba authored by BELHACHEMI Mehdi's avatar BELHACHEMI Mehdi
Browse files

fixing problems

parent 24dffc76
Branches
No related tags found
No related merge requests found
......@@ -2,25 +2,29 @@ package model;
import util.Position;
import java.util.Set;
public class Fire {
private Position firePositions;
private Position position;
public Fire(Position position){
this.firePositions = position;
this.position = position;
}
public void setFirePosition(Position postion){
this.firePositions = postion;
public Position getPosition() {
return position;
}
public Position getFirePosition() {
return firePositions;
public void setPosition(Position position) {
this.position = position;
}
}
}
\ No newline at end of file
......@@ -2,23 +2,27 @@ package model;
import util.Position;
import java.util.List;
public class FireFighter {
private Position position;
private Position FireFighterPosition;
public FireFighter(Position position){
this.FireFighterPosition = position;
this.position = position;
}
public void setFireFighterPosition(Position postion){
this.FireFighterPosition = postion;
public Position getPosition() {
return position;
}
public Position getFireFighterPosition() {
return FireFighterPosition;
public void setPosition(Position position) {
this.position = position;
}
}
}
\ No newline at end of file
package model;
import util.TargetStrategy;
import util.Position;
import util.TargetStrategy;
import java.util.*;
public class FirefighterBoard implements Board<List<ModelElement>> {
private final int columnCount;
private final int rowCount;
private final int initialFirefighterCount;
private final int initialFireCount;
private List<FireFighter> firefighter;
private Set<Fire> fire;
private final int initialFirefighterCount;
private final TargetStrategy targetStrategy = new TargetStrategy();
private List<FireFighter> firefighters;
private Set<Fire> fires;
private Map<Position, List<Position>> neighbors = new HashMap();
private final Position[][] positions;
private int step = 0;
......@@ -44,14 +41,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
}
public void initializeElements() {
firefighter = new ArrayList<>();
fire = new HashSet<>();
for (int index = 0; index < initialFireCount; index++) {
fire.add(new Fire(randomPosition()));
}
firefighters = new ArrayList<>();
fires = new HashSet<>();
for (int index = 0; index < initialFireCount; index++)
fires.add(new Fire(randomPosition()));
for (int index = 0; index < initialFirefighterCount; index++)
firefighter.add(new FireFighter(randomPosition()));
firefighters.add(new FireFighter(randomPosition()));
}
private Position randomPosition() {
......@@ -61,15 +56,13 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
@Override
public List<ModelElement> getState(Position position) {
List<ModelElement> result = new ArrayList<>();
for (FireFighter firefighter : firefighter)
if (firefighter.getFireFighterPosition().equals(position))
for (FireFighter firefighter : firefighters)
if (firefighter.getPosition().equals(position))
result.add(ModelElement.FIREFIGHTER);
for (Fire fire : fire) {
if (fire.getFirePosition().equals(position)) {
result.add(ModelElement.FIRE);
}
}
if (this.getFirePositions(fires).contains(position))
result.add(ModelElement.FIRE);
return result;
}
......@@ -94,14 +87,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
List<Position> modifiedPositions = new ArrayList<>();
if (step % 2 == 0) {
List<Position> newFirePositions = new ArrayList<>();
for (Fire fire : fire) {
for (Position fire : getFirePositions(this.fires)) {
newFirePositions.addAll(neighbors.get(fire));
}
for (Position position : newFirePositions) {
fire.add(new Fire(position));
}
this.getFirePositions(fires).addAll(newFirePositions);
modifiedPositions.addAll(newFirePositions);
}
return modifiedPositions;
......@@ -115,26 +104,26 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
private List<Position> updateFirefighters() {
List<Position> modifiedPosition = new ArrayList<>();
List<FireFighter> firefighters = new ArrayList<>();
List<Position> firePositions = new ArrayList<>();
for(Fire fire: fire){
firePositions.add(fire.getFirePosition());
}
for (FireFighter firefighter: firefighter) {
List<Position> firefighterNewPositions = new ArrayList<>();
for (Position firefighterPosition : this.getFireFighterPositions(this.firefighters)) {
Position newFirefighterPosition =
targetStrategy.neighborClosestToFire(firefighter.getFireFighterPosition(),
firePositions, neighbors);
firefighters.add(firefighter);
targetStrategy.neighborClosestToFire(firefighterPosition,
this.getFirePositions(fires), neighbors);
firefighterNewPositions.add(newFirefighterPosition);
extinguish(newFirefighterPosition);
modifiedPosition.add(firefighter.getFireFighterPosition());
modifiedPosition.add(firefighterPosition);
modifiedPosition.add(newFirefighterPosition);
List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
.filter(firePositions::contains).toList();
.filter(this.getFirePositions(fires)::contains).toList();
for (Position firePosition : neighborFirePositions)
extinguish(firePosition);
modifiedPosition.addAll(neighborFirePositions);
}
firefighter = firefighters;
ArrayList<FireFighter> newFireFighters = new ArrayList<>();
for(Position position : firefighterNewPositions){
newFireFighters.add(new FireFighter(position));
}
firefighters = newFireFighters;
return modifiedPosition;
}
......@@ -145,8 +134,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
}
private void extinguish(Position position) {
fire.remove(position);
for(Fire fire: fires){
if(fire.getPosition().equals(position)){
fires.remove(fire);
}
}
}
......@@ -154,24 +146,38 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public void setState(List<ModelElement> state, Position position) {
extinguish(position);
for (; ; ) {
for (FireFighter fireFighter : firefighter) {
if (fireFighter.getFireFighterPosition().equals(position)) {
firefighter.remove(position);
break;
}
if (!getFireFighterPositions(this.firefighters).remove(position)) break;
}
for (ModelElement element : state) {
switch (element) {
case FIRE -> fires.add(new Fire(position));
case FIREFIGHTER -> firefighters.add(new FireFighter(position));
}
}
}
for (ModelElement element : state) {
switch (element) {
case FIRE -> fire.add(new Fire(position));
case FIREFIGHTER -> firefighter.add(new FireFighter(position));
}
}
public Set<Position> getFirePositions(Set<Fire> fireSet){
Set<Position> firePositions = new HashSet<>();
for(Fire fire : fireSet){
firePositions.add(fire.getPosition());
}
return firePositions;
}
public ArrayList<Position> getFireFighterPositions(List<FireFighter> fireFighterList){
ArrayList<Position> fireFighterPositions = new ArrayList<>();
for(FireFighter fireFighter : fireFighterList){
fireFighterPositions.add(fireFighter.getPosition());
}
return fireFighterPositions;
}
}
\ No newline at end of file
......@@ -4,5 +4,6 @@ module firefighter {
requires javafx.graphics;
opens controller to javafx.fxml;
exports app;
exports view;
opens app to javafx.fxml;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment