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

fixing problems

parent 24dffc76
Branches
Tags
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)) {
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