Skip to content
Snippets Groups Projects
Commit 5d451f57 authored by MAAZOUZ Ilyas's avatar MAAZOUZ Ilyas
Browse files

cbc

parent c2c141be
No related branches found
No related tags found
No related merge requests found
Pipeline #24786 failed
...@@ -151,11 +151,10 @@ public class Controller { ...@@ -151,11 +151,10 @@ public class Controller {
int rowCount, int initialFireCount, int initialFirefighterCount) { int rowCount, int initialFireCount, int initialFirefighterCount) {
grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
List<item> items= new ArrayList<>(); List<item> items= new ArrayList<>();
Fboard b=new Fboard(columnCount,rowCount);
List<item> list= new ArrayList<>(); List<item> list= new ArrayList<>();
list.add(new Fire(initialFireCount,b)); list.add(new Fire(initialFireCount));
list.add(new FireFighter(initialFirefighterCount,b)); list.add(new FireFighter(initialFirefighterCount,b));
b.setItems(list); Fboard b=new Fboard(columnCount,rowCount,items);
this.setModel(b); this.setModel(b);
repaintGrid(); repaintGrid();
} }
......
...@@ -7,28 +7,27 @@ import java.util.*; ...@@ -7,28 +7,27 @@ import java.util.*;
public class Fboard { public class Fboard {
protected final int columnCount; protected static int columnCount;
protected final int rowCount; protected static int rowCount;
private int step = 0; private int step = 0;
private List<item> items; private List<item> items;
public Fboard(int columnCount, int rowCount) { public Fboard(int columnCount, int rowCount,List<item> item) {
this.columnCount = columnCount; this.items=item;
this.rowCount = rowCount; Fboard.columnCount = columnCount;
Fboard.rowCount = rowCount;
} }
public int rowCount() { public int rowCount() {
return rowCount; return rowCount;
} }
public void setItems(List<item> s){
this.items=s;
}
public int columnCount() { public int columnCount() {
return columnCount; return columnCount;
} }
// Visitor for ID can be added
public List<Position> updateToNextGeneration() { public List<Position> updateToNextGeneration() {
List<Position> result = new ArrayList<>(); List<Position> result = new ArrayList<>();
for(item item : items){ for(item item : items){
...@@ -84,7 +83,7 @@ public class Fboard { ...@@ -84,7 +83,7 @@ public class Fboard {
} }
return x; return x;
} }
public List<Position> neighbors(Position position) { public static List<Position> neighbors(Position position) {
List<Position> list = new ArrayList<>(); List<Position> list = new ArrayList<>();
if (position.row() > 0) list.add(new Position(position.row() - 1, position.column())); if (position.row() > 0) list.add(new Position(position.row() - 1, position.column()));
if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1)); if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1));
...@@ -93,7 +92,7 @@ public class Fboard { ...@@ -93,7 +92,7 @@ public class Fboard {
return list; return list;
} }
public Position neighborClosestToFire(Position position) { public static Position neighborClosestToFire(Position position) {
Set<Position> seen = new HashSet<>(); Set<Position> seen = new HashSet<>();
HashMap<Position, Position> firstMove = new HashMap<>(); HashMap<Position, Position> firstMove = new HashMap<>();
Queue<Position> toVisit = new LinkedList<>(neighbors(position)); //Queue is initialised with the neighbors of position Queue<Position> toVisit = new LinkedList<>(neighbors(position)); //Queue is initialised with the neighbors of position
...@@ -101,7 +100,7 @@ public class Fboard { ...@@ -101,7 +100,7 @@ public class Fboard {
firstMove.put(initialMove, initialMove); firstMove.put(initialMove, initialMove);
while (!toVisit.isEmpty()) { while (!toVisit.isEmpty()) {
Position current = toVisit.poll(); Position current = toVisit.poll();
if (this.getFire().getPositions().contains(current)) if (getFire().getPositions().contains(current))
return firstMove.get(current); return firstMove.get(current);
for (Position adjacent : neighbors(current)) { for (Position adjacent : neighbors(current)) {
if (seen.contains(adjacent)) continue; if (seen.contains(adjacent)) continue;
......
...@@ -13,12 +13,10 @@ public class Fire implements item{ ...@@ -13,12 +13,10 @@ public class Fire implements item{
private ModelElement state; private ModelElement state;
private final Random randomGenerator = new Random(); private final Random randomGenerator = new Random();
private final Fboard board;
private final int ID=0; private final int ID=0;
public Fire(int initialFireCount,Fboard b) { public Fire(int initialFireCount) {
this.initialFireCount = initialFireCount; this.initialFireCount = initialFireCount;this.state=ModelElement.FIRE;
this.board=b;
} }
...@@ -26,7 +24,7 @@ public class Fire implements item{ ...@@ -26,7 +24,7 @@ public class Fire implements item{
List<Position> result = new ArrayList<>(); List<Position> result = new ArrayList<>();
List<Position> newFirePositions = new ArrayList<>(); List<Position> newFirePositions = new ArrayList<>();
for (Position fire : firePositions) { for (Position fire : firePositions) {
newFirePositions.addAll(board.neighbors(fire)); newFirePositions.addAll(Fboard.neighbors(fire));
} }
firePositions.addAll(newFirePositions); firePositions.addAll(newFirePositions);
result.addAll(newFirePositions); result.addAll(newFirePositions);
...@@ -35,11 +33,6 @@ public class Fire implements item{ ...@@ -35,11 +33,6 @@ public class Fire implements item{
} }
public void setState() {
state=ModelElement.FIRE;
}
public ModelElement getState() { public ModelElement getState() {
return state; return state;
} }
...@@ -60,7 +53,7 @@ public class Fire implements item{ ...@@ -60,7 +53,7 @@ public class Fire implements item{
} }
public Position randomPosition() { public Position randomPosition() {
return new Position(randomGenerator.nextInt(board.rowCount), randomGenerator.nextInt(board.columnCount)); return new Position(randomGenerator.nextInt(Fboard.rowCount), randomGenerator.nextInt(Fboard.columnCount));
} }
public void extinguish(Position position) { public void extinguish(Position position) {
......
...@@ -7,13 +7,11 @@ import java.util.Random; ...@@ -7,13 +7,11 @@ import java.util.Random;
public class FireFighter extends Extinguisher { public class FireFighter extends Extinguisher {
private ModelElement state; private ModelElement state;
private final Fboard board;
private List<Position> firefighterPositions; private List<Position> firefighterPositions;
private final Random randomGenerator = new Random(); private final Random randomGenerator = new Random();
private final int initialFirefighterCount; private final int initialFirefighterCount;
public FireFighter(int initialFirefighterCount,Fboard b){ public FireFighter(int initialFirefighterCount){
this.board=b;
this.initialFirefighterCount=initialFirefighterCount; this.initialFirefighterCount=initialFirefighterCount;
} }
...@@ -22,12 +20,12 @@ public class FireFighter extends Extinguisher { ...@@ -22,12 +20,12 @@ public class FireFighter extends Extinguisher {
List<Position> result = new ArrayList<>(); List<Position> result = new ArrayList<>();
List<Position> firefighterNewPositions = new ArrayList<>(); List<Position> firefighterNewPositions = new ArrayList<>();
for (Position firefighterPosition : firefighterPositions) { for (Position firefighterPosition : firefighterPositions) {
Position newFirefighterPosition = board.neighborClosestToFire(firefighterPosition); Position newFirefighterPosition = Fboard.neighborClosestToFire(firefighterPosition);
firefighterNewPositions.add(newFirefighterPosition); firefighterNewPositions.add(newFirefighterPosition);
extinguish(newFirefighterPosition); extinguish(newFirefighterPosition);
result.add(firefighterPosition); result.add(firefighterPosition);
result.add(newFirefighterPosition); result.add(newFirefighterPosition);
List<Position> neighborFirePositions = board.neighbors(newFirefighterPosition).stream() List<Position> neighborFirePositions = Fboard.neighbors(newFirefighterPosition).stream()
.filter(board.getFire().getPositions()::contains).toList(); //this code create a list filtred with only the fire positions that are close to the newfirefighter position .filter(board.getFire().getPositions()::contains).toList(); //this code create a list filtred with only the fire positions that are close to the newfirefighter position
for(Position firePosition : neighborFirePositions) //and exist in the firepositions list also for(Position firePosition : neighborFirePositions) //and exist in the firepositions list also
extinguish(firePosition); extinguish(firePosition);
...@@ -63,7 +61,7 @@ public class FireFighter extends Extinguisher { ...@@ -63,7 +61,7 @@ public class FireFighter extends Extinguisher {
firefighterPositions.add(randomPosition()); firefighterPositions.add(randomPosition());
} }
private Position randomPosition() { private Position randomPosition() {
return new Position(randomGenerator.nextInt(board.rowCount), randomGenerator.nextInt(board.columnCount)); return new Position(randomGenerator.nextInt(Fboard.rowCount), randomGenerator.nextInt(Fboard.columnCount));
} }
public List<Position> getPositions(){ public List<Position> getPositions(){
...@@ -72,3 +70,4 @@ public class FireFighter extends Extinguisher { ...@@ -72,3 +70,4 @@ public class FireFighter extends Extinguisher {
} }
...@@ -7,7 +7,6 @@ import java.util.List; ...@@ -7,7 +7,6 @@ import java.util.List;
public interface item { public interface item {
public List<Position> update(); public List<Position> update();
void setState();
public ModelElement getState(); public ModelElement getState();
public int getID(); public int getID();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment