diff --git a/.gradle/7.4/fileHashes/resourceHashesCache.bin b/.gradle/7.4/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..9bff27bafb7b6100eed2008b7aa679c9455def16 Binary files /dev/null and b/.gradle/7.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..b9647d18a023b65db35462985ee38f79494d3efe Binary files /dev/null and b/.gradle/file-system.probe differ diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000000000000000000000000000000000000..e588a89280298b674f6ad86639a14bf2b86c42a9 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +ff \ No newline at end of file diff --git a/build/classes/java/main/AntiFire$Position.class b/build/classes/java/main/AntiFire$Position.class new file mode 100644 index 0000000000000000000000000000000000000000..7547f4bafec835a73c42408a68545ec53ad10ee0 Binary files /dev/null and b/build/classes/java/main/AntiFire$Position.class differ diff --git a/build/classes/java/main/AntiFire.class b/build/classes/java/main/AntiFire.class new file mode 100644 index 0000000000000000000000000000000000000000..edf3af720839d02a3d477b8002d211e1d429afc4 Binary files /dev/null and b/build/classes/java/main/AntiFire.class differ diff --git a/build/classes/java/main/App$1.class b/build/classes/java/main/App$1.class new file mode 100644 index 0000000000000000000000000000000000000000..98d51f802497deae0e1387a24d43001df1e48c74 Binary files /dev/null and b/build/classes/java/main/App$1.class differ diff --git a/build/classes/java/main/App.class b/build/classes/java/main/App.class new file mode 100644 index 0000000000000000000000000000000000000000..d295b944a9625d1a7a2f892180b64733cbc7ae54 Binary files /dev/null and b/build/classes/java/main/App.class differ diff --git a/build/classes/java/main/Clouds.class b/build/classes/java/main/Clouds.class new file mode 100644 index 0000000000000000000000000000000000000000..9ed13d4bd20ab64d05aa9707562c6eb4616a9296 Binary files /dev/null and b/build/classes/java/main/Clouds.class differ diff --git a/build/classes/java/main/Grid.class b/build/classes/java/main/Grid.class new file mode 100644 index 0000000000000000000000000000000000000000..abc72c01fbe72954e14638fa7e2b6bffc14378ed Binary files /dev/null and b/build/classes/java/main/Grid.class differ diff --git a/build/classes/java/main/Model.class b/build/classes/java/main/Model.class new file mode 100644 index 0000000000000000000000000000000000000000..e8275b1856b942724c1e257e1e9c8263e2fb5cef Binary files /dev/null and b/build/classes/java/main/Model.class differ diff --git a/build/classes/java/main/MotoFighter.class b/build/classes/java/main/MotoFighter.class new file mode 100644 index 0000000000000000000000000000000000000000..a6e726acf81de951c94e8a90476341fc1c41a76b Binary files /dev/null and b/build/classes/java/main/MotoFighter.class differ diff --git a/build/classes/java/main/Position.class b/build/classes/java/main/Position.class new file mode 100644 index 0000000000000000000000000000000000000000..919933142d440b6278f5b21b1c80bfe4c0edbdd1 Binary files /dev/null and b/build/classes/java/main/Position.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..a03e2a7667f4aee40a96aa3d95994982de790be4 Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/AntiFire.java b/src/main/java/AntiFire.java new file mode 100644 index 0000000000000000000000000000000000000000..c42dd1c803e325e4ab4d2a8928c9f7ee2bb46395 --- /dev/null +++ b/src/main/java/AntiFire.java @@ -0,0 +1,30 @@ +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public abstract class AntiFire { + Set<Position> fires = new HashSet<>(); + Grid grid; + + int colCount, rowCount; + + public abstract void activation(); + public abstract Position activateFighter(Position position); + public abstract List<Position> next(Position position); + public abstract Position moveTowardFire(Position position); + + + + public void extinguish(Position position){ + fires.remove(position); + grid.paint(position.row, position.col); + } + public Position randomPosition() { + return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); + } + + + public record Position(int row, int col){ + } + +} diff --git a/src/main/java/Clouds.java b/src/main/java/Clouds.java new file mode 100644 index 0000000000000000000000000000000000000000..bbbf9f92a2491d679802336fb7e0f82eff9cd96c --- /dev/null +++ b/src/main/java/Clouds.java @@ -0,0 +1,5 @@ +import java.util.List; + +public class Clouds { + +} diff --git a/src/main/java/MotoFighter.java b/src/main/java/MotoFighter.java new file mode 100644 index 0000000000000000000000000000000000000000..c3d9186a8f12474562c53fe28c49ce67b1c21d92 --- /dev/null +++ b/src/main/java/MotoFighter.java @@ -0,0 +1,63 @@ +import java.util.*; + +public class MotoFighter extends AntiFire { + List<Position> mfNewPositions; + List<Position> motofighter = new ArrayList<>(); + + + + @Override + public void activation() { + mfNewPositions = new ArrayList<>(); + for(Position mF : motofighter){ + Position newPosition = activateFighter(mF); + grid.paint(mF.row(), mF.row()); + grid.paintMF(newPosition.row(), newPosition.col()); + mfNewPositions.add(newPosition); + } + motofighter = mfNewPositions; + } + + @Override + public Position activateFighter(Position position) { + Position randomPosition = moveTowardFire(position); + //next(position).get((int) (Math.random()*next(position).size())); + List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); + extinguish(randomPosition); + for (Position fire : nextFires) + extinguish(fire); + return randomPosition; + } + + @Override + public List<Position> next(Position position) { + List<Position> list = new ArrayList<>(); + if(position.row()>0) list.add(new Position(position.row()-2, position.col())); + if(position.col()>0) list.add(new Position(position.row(), position.col()-2)); + if(position.row()<rowCount-1) list.add(new Position(position.row()+2, position.col())); + if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+2)); + return list; + } + + @Override + public Position moveTowardFire(Position position) { + Queue<Position> toVisit = new LinkedList<>(); + Set<Position> seen = new HashSet<>(); + HashMap<Position, Position> firstMove = new HashMap<>(); + toVisit.addAll(next(position)); + for(Position initialMove : toVisit) + firstMove.put(initialMove,initialMove); + while(!toVisit.isEmpty()){ + Position current = toVisit.poll(); + if(fires.contains(current)) + return firstMove.get(current); + for(Position adjacent : next(current)){ + if(seen.contains(adjacent)) continue; + toVisit.add(adjacent); + seen.add(adjacent); + firstMove.put(adjacent, firstMove.get(current)); + } + } + return position; + } +} diff --git a/src/main/java/Position.java b/src/main/java/Position.java new file mode 100644 index 0000000000000000000000000000000000000000..47d44a136003ca44d3aba0f9d14a213dc4a2307a --- /dev/null +++ b/src/main/java/Position.java @@ -0,0 +1,2 @@ +public record Position(int row , int col) { +}