diff --git a/src/main/java/model/Cell.java b/src/main/java/model/Cell.java new file mode 100644 index 0000000000000000000000000000000000000000..93a7faafb486bd5d5aaa3f82f36fa25d5272b611 --- /dev/null +++ b/src/main/java/model/Cell.java @@ -0,0 +1,51 @@ +package model; + +import util.Position; + +import java.util.List; + +public class Cell implements State, Board{ + Position position; + public Cell(Position position){ + this.position = position; + } + @Override + public boolean isOnFire(Position position) { + return false; + } + + @Override + public Object getState(Position position) { + return null; + } + + @Override + public void setState(Object state, Position position) { + + } + + @Override + public int rowCount() { + return 0; + } + + @Override + public int columnCount() { + return 0; + } + + @Override + public List<Position> updateToNextGeneration() { + return null; + } + + @Override + public void reset() { + + } + + @Override + public int stepNumber() { + return 0; + } +} diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java new file mode 100644 index 0000000000000000000000000000000000000000..ffc1cff34eca21e27a10946a381bc6c1d4b10a13 --- /dev/null +++ b/src/main/java/model/Cloud.java @@ -0,0 +1,12 @@ +package model; + +import util.Position; + +import java.util.Random; + +public class Cloud { + private final Random randomGenerator = new Random(); + private Position randomPosition() { + return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); + } +} diff --git a/src/main/java/model/Extinguish.java b/src/main/java/model/Extinguish.java new file mode 100644 index 0000000000000000000000000000000000000000..f6142e1a50ccee54a421b8e9eef56868a5e079e9 --- /dev/null +++ b/src/main/java/model/Extinguish.java @@ -0,0 +1,5 @@ +package model; + +public interface Extinguish { + +} diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java new file mode 100644 index 0000000000000000000000000000000000000000..595a26606f3b9c2b1d0a26763851f2090a49abea --- /dev/null +++ b/src/main/java/model/Fire.java @@ -0,0 +1,15 @@ +package model; + +import util.Position; + +import java.util.Random; +import java.util.Set; + +public class Fire { + private final int initialFireCount; + private Set<Position> firePositions; + private final Random randomGenerator = new Random(); + private Position randomPosition() { + return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); + } +} diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java new file mode 100644 index 0000000000000000000000000000000000000000..530cd6714de586af99b69dd99e9a0c9c499f398a --- /dev/null +++ b/src/main/java/model/FireFighter.java @@ -0,0 +1,16 @@ +package model; + +import util.Position; + +import java.util.List; +import java.util.Set; + +public class FireFighter { + private final int initialFirefighterCount; + private List<Position> firefighterPositions; + private Set<Position> firePositions; + private Position randomPosition() { + return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount)); + } + +} diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java index 3251952ea90ec5ea59fc3a3630f3d2a4e4e96f01..b5f0563236d6393f0fe972aa97c1c6d8762f1c82 100644 --- a/src/main/java/model/FirefighterBoard.java +++ b/src/main/java/model/FirefighterBoard.java @@ -8,10 +8,10 @@ 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<Position> firefighterPositions; - private Set<Position> firePositions; + private final int initialFireCount;// so luong o lu luc dau + private final int initialFirefighterCount;// so luong o linh cuu hoa luc dau + private List<Position> firefighterPositions;// danh sach vi tri linh cuu hoa + private Set<Position> firePositions;// tap hop vi tri lua private int step = 0; private final Random randomGenerator = new Random(); @@ -37,7 +37,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } @Override - public List<ModelElement> getState(Position position) { + public List<ModelElement> getState(Position position) {// xet xem vi tri nay la linh cuu hoa hay lua List<ModelElement> result = new ArrayList<>(); for(Position firefighterPosition : firefighterPositions) if (firefighterPosition.equals(position)) @@ -57,22 +57,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> { return columnCount; } - public List<Position> updateToNextGeneration() { + public List<Position> updateToNextGeneration() {// chua hieu lam gi List<Position> result = updateFirefighters(); result.addAll(updateFires()); step++; return result; } - private List<Position> updateFires() { - List<Position> result = new ArrayList<>(); - if (step % 2 == 0) { - List<Position> newFirePositions = new ArrayList<>(); + private List<Position> updateFires() {// chay lan ra + List<Position> result = new ArrayList<>();// list vi tri lua moi duoc khoi tao + if (step % 2 == 0) {// ko hieu vi sao phai chia het cho 2 + List<Position> newFirePositions = new ArrayList<>();// cac vi tri lua lan ra duoc khoi tao for (Position fire : firePositions) { newFirePositions.addAll(neighbors(fire)); } - firePositions.addAll(newFirePositions); - result.addAll(newFirePositions); + firePositions.addAll(newFirePositions);// lua da lan ra hang xom + result.addAll(newFirePositions);// updata tong vi tri lua moi } return result; @@ -83,19 +83,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> { return step; } - private List<Position> updateFirefighters() { + private List<Position> updateFirefighters() {// linh cuu hoa chia ra de dap lua List<Position> result = new ArrayList<>(); List<Position> firefighterNewPositions = new ArrayList<>(); for (Position firefighterPosition : firefighterPositions) { - Position newFirefighterPosition = neighborClosestToFire(firefighterPosition); - firefighterNewPositions.add(newFirefighterPosition); - extinguish(newFirefighterPosition); + Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);// linh ra den cho gan nhat co lua + firefighterNewPositions.add(newFirefighterPosition);// cap nhat vi tri moi cua linh cuu hoa + extinguish(newFirefighterPosition);// xoa vi tri cu cua linh cuu hoa result.add(firefighterPosition); result.add(newFirefighterPosition); List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream() .filter(firePositions::contains).toList(); for(Position firePosition : neighborFirePositions) - extinguish(firePosition); + extinguish(firePosition);//xoa di vi tri lua duoc dap result.addAll(neighborFirePositions); } firefighterPositions = firefighterNewPositions; @@ -129,12 +129,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> { firstMove.put(initialMove, initialMove); while (!toVisit.isEmpty()) { Position current = toVisit.poll(); - if (firePositions.contains(current)) + if (firePositions.contains(current))// neu lua o vi tri nay thi den day return firstMove.get(current); - for (Position adjacent : neighbors(current)) { - if (seen.contains(adjacent)) continue; - toVisit.add(adjacent); - seen.add(adjacent); + for (Position adjacent : neighbors(current)) {// moi hang xom cua vi tri nay + if (seen.contains(adjacent)) continue;// neu seen chua hang xom nay + toVisit.add(adjacent);// thi den day + seen.add(adjacent);// cho vi tri cua hang xom nay vao see firstMove.put(adjacent, firstMove.get(current)); } } @@ -142,7 +142,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> { } @Override - public void setState(List<ModelElement> state, Position position) { + public void setState(List<ModelElement> state, Position position) {//vi tri nay dang lua hay linh cuu hoa firePositions.remove(position); for (;;) { if (!firefighterPositions.remove(position)) break; diff --git a/src/main/java/model/State.java b/src/main/java/model/State.java new file mode 100644 index 0000000000000000000000000000000000000000..bea5fa5c83fee714a0be757c1ed8bd007b8ef0a4 --- /dev/null +++ b/src/main/java/model/State.java @@ -0,0 +1,10 @@ +package model; + +import util.Position; + +import java.util.*; + +public interface State { + boolean isOnFire(Position position); + +}