From 9e11be31497c7911e36e19cdf3601984d3802189 Mon Sep 17 00:00:00 2001
From: Anthony Viola <anthony.viola34@gmail.com>
Date: Sat, 11 Nov 2023 19:00:58 +0100
Subject: [PATCH] Firefighter first update

---
 src/main/java/model/Box.java              |  6 ++++
 src/main/java/model/Extinguisher.java     | 43 +++++++++++++++++++++++
 src/main/java/model/Fire.java             | 37 +++++++++++++++++++
 src/main/java/model/Firefighter.java      | 19 ++++++++++
 src/main/java/model/FirefighterBoard.java | 11 ++++--
 src/main/java/model/Item.java             | 14 ++++++++
 src/main/java/model/Mountain.java         |  5 +++
 src/main/java/model/Road.java             |  4 +++
 src/main/java/model/Rockeries.java        |  4 +++
 9 files changed, 140 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/model/Box.java
 create mode 100644 src/main/java/model/Extinguisher.java
 create mode 100644 src/main/java/model/Fire.java
 create mode 100644 src/main/java/model/Firefighter.java
 create mode 100644 src/main/java/model/Item.java
 create mode 100644 src/main/java/model/Mountain.java
 create mode 100644 src/main/java/model/Road.java
 create mode 100644 src/main/java/model/Rockeries.java

diff --git a/src/main/java/model/Box.java b/src/main/java/model/Box.java
new file mode 100644
index 0000000..39d4104
--- /dev/null
+++ b/src/main/java/model/Box.java
@@ -0,0 +1,6 @@
+package model;
+
+public interface Box {
+
+
+}
diff --git a/src/main/java/model/Extinguisher.java b/src/main/java/model/Extinguisher.java
new file mode 100644
index 0000000..4e15928
--- /dev/null
+++ b/src/main/java/model/Extinguisher.java
@@ -0,0 +1,43 @@
+package model;
+
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class Extinguisher {
+    private 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){
+        move(board);
+        extinguish(board);
+    }
+
+    private void extinguish(FirefighterBoard board) {
+        List<Item> itemList = board.itemList();
+        List<Position> neighborslist = neighbors(position, board);
+        for (Position neighborsposition: neighborslist) {
+            itemList.removeIf(item -> neighborsposition == item.position() && item instanceof Fire);
+
+        }
+    }
+
+    abstract void move(FirefighterBoard board);
+}
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
new file mode 100644
index 0000000..98512a2
--- /dev/null
+++ b/src/main/java/model/Fire.java
@@ -0,0 +1,37 @@
+package model;
+
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Fire implements Item{
+
+    private Position position;
+
+    public Fire(Position position) {
+        this.position = position;
+    }
+
+    @Override
+    public void update(FirefighterBoard board) {
+        List<Position> neighborslist = neighbors(position, board);
+        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;
+    }
+}
diff --git a/src/main/java/model/Firefighter.java b/src/main/java/model/Firefighter.java
new file mode 100644
index 0000000..3fa26bf
--- /dev/null
+++ b/src/main/java/model/Firefighter.java
@@ -0,0 +1,19 @@
+package model;
+
+import util.Position;
+
+public class Firefighter extends Extinguisher implements Item{
+    public Firefighter(Position position) {
+        super(position);
+    }
+
+    @Override
+    void move(FirefighterBoard board) {
+
+    }
+
+    @Override
+    public void update(FirefighterBoard board) {
+
+    }
+}
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 3251952..b37bb43 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -8,8 +8,11 @@ import java.util.*;
 public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int columnCount;
   private final int rowCount;
+
   private final int initialFireCount;
   private final int initialFirefighterCount;
+  private List<Item> itemList;
+  private List<Box> boxList;
   private List<Position> firefighterPositions;
   private Set<Position> firePositions;
   private int step = 0;
@@ -79,9 +82,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   @Override
-  public int stepNumber() {
-    return step;
-  }
+  public int stepNumber() { return step; }
+
+  public List<Item> itemList() { return itemList; }
+
+  public List<Box> boxList() { return boxList; }
 
   private List<Position> updateFirefighters() {
     List<Position> result = new ArrayList<>();
diff --git a/src/main/java/model/Item.java b/src/main/java/model/Item.java
new file mode 100644
index 0000000..1593d56
--- /dev/null
+++ b/src/main/java/model/Item.java
@@ -0,0 +1,14 @@
+package model;
+
+import util.Position;
+import java.util.ArrayList;
+import java.util.List;
+
+public interface Item {
+
+    void update(FirefighterBoard board);
+
+    List<Position> neighbors(Position position, FirefighterBoard board);
+
+    Position position();
+}
diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/Mountain.java
new file mode 100644
index 0000000..2f288d3
--- /dev/null
+++ b/src/main/java/model/Mountain.java
@@ -0,0 +1,5 @@
+package model;
+
+public class Mountain implements Box{
+}
+
diff --git a/src/main/java/model/Road.java b/src/main/java/model/Road.java
new file mode 100644
index 0000000..3aec54f
--- /dev/null
+++ b/src/main/java/model/Road.java
@@ -0,0 +1,4 @@
+package model;
+
+public class Road implements Box{
+}
diff --git a/src/main/java/model/Rockeries.java b/src/main/java/model/Rockeries.java
new file mode 100644
index 0000000..18e1a9f
--- /dev/null
+++ b/src/main/java/model/Rockeries.java
@@ -0,0 +1,4 @@
+package model;
+
+public class Rockeries implements Box{
+}
-- 
GitLab