Skip to content
Snippets Groups Projects
Commit 4fdaa5af authored by PHAM Thi ngoc linh's avatar PHAM Thi ngoc linh
Browse files

skeleton idea and code

parent 3c486887
Branches
No related tags found
No related merge requests found
Pipeline #22434 failed
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;
}
}
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));
}
}
package model;
public interface Extinguish {
}
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));
}
}
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));
}
}
......@@ -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;
......
package model;
import util.Position;
import java.util.*;
public interface State {
boolean isOnFire(Position position);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment