diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java index d31718d9c238368f6ca8540c284d6fc1bed3fe2b..918bab88b9a57fc860bf52974678935e8458c1cf 100644 --- a/src/main/java/controller/Controller.java +++ b/src/main/java/controller/Controller.java @@ -151,11 +151,10 @@ public class Controller { int rowCount, int initialFireCount, int initialFirefighterCount) { grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight); List<item> items= new ArrayList<>(); - Fboard b=new Fboard(columnCount,rowCount); List<item> list= new ArrayList<>(); - list.add(new Fire(initialFireCount,b)); + list.add(new Fire(initialFireCount)); list.add(new FireFighter(initialFirefighterCount,b)); - b.setItems(list); + Fboard b=new Fboard(columnCount,rowCount,items); this.setModel(b); repaintGrid(); } diff --git a/src/main/java/newmodel/Fboard.java b/src/main/java/newmodel/Fboard.java index 059764b5b2ac4f34b1174e53a492e7ba8815ac23..39b43df5dd2ef0a13eccce72710f663a303c380b 100644 --- a/src/main/java/newmodel/Fboard.java +++ b/src/main/java/newmodel/Fboard.java @@ -7,28 +7,27 @@ import java.util.*; public class Fboard { - protected final int columnCount; - protected final int rowCount; + protected static int columnCount; + protected static int rowCount; private int step = 0; private List<item> items; - public Fboard(int columnCount, int rowCount) { - this.columnCount = columnCount; - this.rowCount = rowCount; + public Fboard(int columnCount, int rowCount,List<item> item) { + this.items=item; + Fboard.columnCount = columnCount; + Fboard.rowCount = rowCount; } public int rowCount() { return rowCount; } - public void setItems(List<item> s){ - this.items=s; - } public int columnCount() { return columnCount; } + // Visitor for ID can be added public List<Position> updateToNextGeneration() { List<Position> result = new ArrayList<>(); for(item item : items){ @@ -79,12 +78,12 @@ public class Fboard { Fire x = null; for (item e : items) { if(e.getID()==0){ - x= (Fire) e; + x = (Fire) e; } } return x; } - public List<Position> neighbors(Position position) { + public static List<Position> neighbors(Position position) { List<Position> list = new ArrayList<>(); 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)); @@ -93,7 +92,7 @@ public class Fboard { return list; } - public Position neighborClosestToFire(Position position) { + public static Position neighborClosestToFire(Position position) { Set<Position> seen = new HashSet<>(); HashMap<Position, Position> firstMove = new HashMap<>(); Queue<Position> toVisit = new LinkedList<>(neighbors(position)); //Queue is initialised with the neighbors of position @@ -101,7 +100,7 @@ public class Fboard { firstMove.put(initialMove, initialMove); while (!toVisit.isEmpty()) { Position current = toVisit.poll(); - if (this.getFire().getPositions().contains(current)) + if (getFire().getPositions().contains(current)) return firstMove.get(current); for (Position adjacent : neighbors(current)) { if (seen.contains(adjacent)) continue; diff --git a/src/main/java/newmodel/Fire.java b/src/main/java/newmodel/Fire.java index 3e862181d2aa5f6c8f9eb450e36633cc3ded95e3..9bcd911ff51283f9214c6cf72a86613e73e26593 100644 --- a/src/main/java/newmodel/Fire.java +++ b/src/main/java/newmodel/Fire.java @@ -13,12 +13,10 @@ public class Fire implements item{ private ModelElement state; private final Random randomGenerator = new Random(); - private final Fboard board; private final int ID=0; - public Fire(int initialFireCount,Fboard b) { - this.initialFireCount = initialFireCount; - this.board=b; + public Fire(int initialFireCount) { + this.initialFireCount = initialFireCount;this.state=ModelElement.FIRE; } @@ -26,7 +24,7 @@ public class Fire implements item{ List<Position> result = new ArrayList<>(); List<Position> newFirePositions = new ArrayList<>(); for (Position fire : firePositions) { - newFirePositions.addAll(board.neighbors(fire)); + newFirePositions.addAll(Fboard.neighbors(fire)); } firePositions.addAll(newFirePositions); result.addAll(newFirePositions); @@ -35,11 +33,6 @@ public class Fire implements item{ } - public void setState() { - state=ModelElement.FIRE; - } - - public ModelElement getState() { return state; } @@ -60,7 +53,7 @@ public class Fire implements item{ } 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) { diff --git a/src/main/java/newmodel/FireFighter.java b/src/main/java/newmodel/FireFighter.java index c42ee69b2c7407ae67b2e8a2c2531beb8fd05773..66bf4b3825e50634ae261dacb5db35681947bf57 100644 --- a/src/main/java/newmodel/FireFighter.java +++ b/src/main/java/newmodel/FireFighter.java @@ -7,13 +7,11 @@ import java.util.Random; public class FireFighter extends Extinguisher { private ModelElement state; - private final Fboard board; private List<Position> firefighterPositions; private final Random randomGenerator = new Random(); private final int initialFirefighterCount; - public FireFighter(int initialFirefighterCount,Fboard b){ - this.board=b; + public FireFighter(int initialFirefighterCount){ this.initialFirefighterCount=initialFirefighterCount; } @@ -22,12 +20,12 @@ public class FireFighter extends Extinguisher { List<Position> result = new ArrayList<>(); List<Position> firefighterNewPositions = new ArrayList<>(); for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = board.neighborClosestToFire(firefighterPosition); + Position newFirefighterPosition = Fboard.neighborClosestToFire(firefighterPosition); firefighterNewPositions.add(newFirefighterPosition); extinguish(newFirefighterPosition); result.add(firefighterPosition); 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 for(Position firePosition : neighborFirePositions) //and exist in the firepositions list also extinguish(firePosition); @@ -63,7 +61,7 @@ public class FireFighter extends Extinguisher { firefighterPositions.add(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(){ @@ -72,3 +70,4 @@ public class FireFighter extends Extinguisher { } + diff --git a/src/main/java/newmodel/item.java b/src/main/java/newmodel/item.java index d4d53c72fe863710a076a75b0bf939c832ea724f..11735f5298e070d2cf4cf179a88f2540b0db42eb 100644 --- a/src/main/java/newmodel/item.java +++ b/src/main/java/newmodel/item.java @@ -7,7 +7,6 @@ import java.util.List; public interface item { public List<Position> update(); - void setState(); public ModelElement getState(); public int getID();