Skip to content
Snippets Groups Projects
Commit 968ab2b0 authored by Anthony Viola's avatar Anthony Viola
Browse files

Firefighter rebuild

parent 9e11be31
No related branches found
No related tags found
No related merge requests found
Pipeline #24460 passed
......@@ -77,7 +77,6 @@ public class Controller {
for(int column = 0; column < columnCount; column++)
for(int row = 0; row < rowCount; row++)
viewElements[row][column] = getViewElement(board.getState(new Position(row, column)));
grid.repaint(viewElements);
updateGenerationLabel(board.stepNumber());
}
......
package model;
import util.Position;
import java.util.List;
import java.util.Random;
public class Cloud extends Extinguisher implements Item {
public Cloud(Position position) {
super(position);
}
void move(FirefighterBoard board) {
List<Position> neighborslist = board.neighbors(position);
Random ran = new Random();
position = neighborslist.get(ran.nextInt(neighborslist.size()));
}
}
......@@ -6,33 +6,25 @@ import java.util.ArrayList;
import java.util.List;
public abstract class Extinguisher {
private Position position;
protected Position position;
public Extinguisher(Position position){
this.position = position;
}
public List<Position> neighbors(Position position, FirefighterBoard board){
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));
if (position.row() < board.rowCount() - 1) list.add(new Position(position.row() + 1, position.column()));
if (position.column() < board.columnCount() - 1) list.add(new Position(position.row(), position.column() + 1));
return list;
}
public Position position() {
return position;
}
void update(FirefighterBoard board){
public void update(FirefighterBoard board){
move(board);
extinguish(board);
}
private void extinguish(FirefighterBoard board) {
List<Item> itemList = board.itemList();
List<Position> neighborslist = neighbors(position, board);
List<Position> neighborslist = board.neighbors(position);
for (Position neighborsposition: neighborslist) {
itemList.removeIf(item -> neighborsposition == item.position() && item instanceof Fire);
......
......@@ -7,31 +7,19 @@ import java.util.List;
public class Fire implements Item{
private Position position;
private final Position position;
public Fire(Position position) {
this.position = position;
}
@Override
public void update(FirefighterBoard board) {
List<Position> neighborslist = neighbors(position, board);
List<Position> neighborslist = board.neighbors(position);
for (Position neighborposition : neighborslist) {
board.itemList().add(new Fire(neighborposition));
}
}
public List<Position> neighbors(Position position, FirefighterBoard board){
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));
if (position.row() < board.rowCount() - 1) list.add(new Position(position.row() + 1, position.column()));
if (position.column() < board.columnCount() - 1) list.add(new Position(position.row(), position.column() + 1));
return list;
}
@Override
public Position position() {
return null;
return position;
}
}
......@@ -2,18 +2,32 @@ package model;
import util.Position;
import java.util.*;
public class Firefighter extends Extinguisher implements Item{
public Firefighter(Position position) {
super(position);
}
@Override
void move(FirefighterBoard board) {
Set<Position> seen = new HashSet<>();
HashMap<Position, Position> firstMove = new HashMap<>();
Queue<Position> toVisit = new LinkedList<>(board.neighbors(position));
for (Position initialMove : toVisit) {
firstMove.put(initialMove, initialMove);
}
while (!toVisit.isEmpty()) {
Position current = toVisit.poll();
if (board.getItemByPosition(current) instanceof Fire) {
position = firstMove.get(current);
return;
}
for (Position adjacent : board.neighbors(current)) {
if (seen.contains(adjacent)) continue;
toVisit.add(adjacent);
seen.add(adjacent);
firstMove.put(adjacent, firstMove.get(current));
}
}
@Override
public void update(FirefighterBoard board) {
}
}
......@@ -86,6 +86,15 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
public List<Item> itemList() { return itemList; }
public Item getItemByPosition(Position position) {
for (Item item: itemList) {
if (item.position() == position){
return item;
}
}
return null;
}
public List<Box> boxList() { return boxList; }
private List<Position> updateFirefighters() {
......@@ -117,7 +126,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
firePositions.remove(position);
}
private List<Position> neighbors(Position position) {
public 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));
......@@ -130,8 +139,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
Set<Position> seen = new HashSet<>();
HashMap<Position, Position> firstMove = new HashMap<>();
Queue<Position> toVisit = new LinkedList<>(neighbors(position));
for (Position initialMove : toVisit)
for (Position initialMove : toVisit) {
firstMove.put(initialMove, initialMove);
}
while (!toVisit.isEmpty()) {
Position current = toVisit.poll();
if (firePositions.contains(current))
......
......@@ -8,7 +8,5 @@ public interface Item {
void update(FirefighterBoard board);
List<Position> neighbors(Position position, FirefighterBoard board);
Position position();
}
package model;
public class Road implements Box{
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment