diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin index 379c05b56bf4592bad402191032e6a449f6f8730..13a6d8b11bb569fd8cbf183e93c733df491a9132 100644 Binary files a/.gradle/7.4/executionHistory/executionHistory.bin and b/.gradle/7.4/executionHistory/executionHistory.bin differ diff --git a/.gradle/7.4/executionHistory/executionHistory.lock b/.gradle/7.4/executionHistory/executionHistory.lock index 80e8955e82d390b14df82ea4edcc8a752d441d75..e35b445edb554d7fa073edc271abfd98838ce07d 100644 Binary files a/.gradle/7.4/executionHistory/executionHistory.lock and b/.gradle/7.4/executionHistory/executionHistory.lock differ diff --git a/.gradle/7.4/fileHashes/fileHashes.bin b/.gradle/7.4/fileHashes/fileHashes.bin index 142907fc41e849b439843292be0e751c757d5320..290d329335402dce06010b3d3a3ceebbcb324563 100644 Binary files a/.gradle/7.4/fileHashes/fileHashes.bin and b/.gradle/7.4/fileHashes/fileHashes.bin differ diff --git a/.gradle/7.4/fileHashes/fileHashes.lock b/.gradle/7.4/fileHashes/fileHashes.lock index 377c088269107b126a7bee13fb74d2242b021620..31ba47f15f9492cc156499a67c65a5c57ebc9633 100644 Binary files a/.gradle/7.4/fileHashes/fileHashes.lock and b/.gradle/7.4/fileHashes/fileHashes.lock differ diff --git a/.gradle/7.4/fileHashes/resourceHashesCache.bin b/.gradle/7.4/fileHashes/resourceHashesCache.bin index 9bff27bafb7b6100eed2008b7aa679c9455def16..a618b0ff71f22779264da258e7bdb8b39279b6a3 100644 Binary files a/.gradle/7.4/fileHashes/resourceHashesCache.bin and b/.gradle/7.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 4ec51350aa97f62b3460115e0baef1fe9e4bf6f6..707445b757d1205790ba6eab3062110ccac43783 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index b9647d18a023b65db35462985ee38f79494d3efe..cb028f4205a1fabe70cff5ec865ed4504b6cae58 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b63946d5b31084bbb7dda418ceb3d75eb686373 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Palette2"> + <group name="Swing"> + <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> + </item> + <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> + <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> + <initial-values> + <property name="text" value="Button" /> + </initial-values> + </item> + <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="RadioButton" /> + </initial-values> + </item> + <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="CheckBox" /> + </initial-values> + </item> + <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="Label" /> + </initial-values> + </item> + <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> + <preferred-size width="-1" height="20" /> + </default-constraints> + </item> + <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> + </item> + </group> + </component> +</project> \ No newline at end of file diff --git a/build/classes/java/main/AntiFire$Position.class b/build/classes/java/main/AntiFire$Position.class deleted file mode 100644 index 7547f4bafec835a73c42408a68545ec53ad10ee0..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/AntiFire$Position.class and /dev/null differ diff --git a/build/classes/java/main/AntiFire.class b/build/classes/java/main/AntiFire.class deleted file mode 100644 index edf3af720839d02a3d477b8002d211e1d429afc4..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/AntiFire.class and /dev/null differ diff --git a/build/classes/java/main/App$1.class b/build/classes/java/main/App$1.class index 98d51f802497deae0e1387a24d43001df1e48c74..80ec6c10a634c0eba5e577cc4795820f17885624 100644 Binary files a/build/classes/java/main/App$1.class 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 index d295b944a9625d1a7a2f892180b64733cbc7ae54..9a62bf97329c0156cbdc7ce6defdf70e57521761 100644 Binary files a/build/classes/java/main/App.class 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 deleted file mode 100644 index 9ed13d4bd20ab64d05aa9707562c6eb4616a9296..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/Clouds.class and /dev/null differ diff --git a/build/classes/java/main/Model.class b/build/classes/java/main/Model.class deleted file mode 100644 index e8275b1856b942724c1e257e1e9c8263e2fb5cef..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/Model.class and /dev/null differ diff --git a/build/classes/java/main/MotoFighter.class b/build/classes/java/main/MotoFighter.class deleted file mode 100644 index a6e726acf81de951c94e8a90476341fc1c41a76b..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/MotoFighter.class and /dev/null differ diff --git a/build/classes/java/main/Position.class b/build/classes/java/main/Position.class deleted file mode 100644 index 919933142d440b6278f5b21b1c80bfe4c0edbdd1..0000000000000000000000000000000000000000 Binary files a/build/classes/java/main/Position.class and /dev/null differ diff --git a/build/classes/java/main/fightfire/AntiFire$Position.class b/build/classes/java/main/fightfire/AntiFire$Position.class new file mode 100644 index 0000000000000000000000000000000000000000..7b3534afc972de4297091159558cb5c6b6c9dcdc Binary files /dev/null and b/build/classes/java/main/fightfire/AntiFire$Position.class differ diff --git a/build/classes/java/main/fightfire/AntiFire.class b/build/classes/java/main/fightfire/AntiFire.class new file mode 100644 index 0000000000000000000000000000000000000000..000edc73d1cbe7233d82ed4268c8c7023364c985 Binary files /dev/null and b/build/classes/java/main/fightfire/AntiFire.class differ diff --git a/build/classes/java/main/fightfire/Clouds.class b/build/classes/java/main/fightfire/Clouds.class new file mode 100644 index 0000000000000000000000000000000000000000..98d34018f37bc4540a3b81a5f2d5df533e066c99 Binary files /dev/null and b/build/classes/java/main/fightfire/Clouds.class differ diff --git a/build/classes/java/main/fightfire/FireFigher.class b/build/classes/java/main/fightfire/FireFigher.class new file mode 100644 index 0000000000000000000000000000000000000000..5ce77f12ae35b0bc5981488dbe1a73c069b1704c Binary files /dev/null and b/build/classes/java/main/fightfire/FireFigher.class differ diff --git a/build/classes/java/main/fightfire/MotoFighter.class b/build/classes/java/main/fightfire/MotoFighter.class new file mode 100644 index 0000000000000000000000000000000000000000..ec8fa238f4cf44cd92e19f5edb39646f8a5c2087 Binary files /dev/null and b/build/classes/java/main/fightfire/MotoFighter.class differ diff --git a/build/classes/java/main/Grid.class b/build/classes/java/main/grid/Grid.class similarity index 58% rename from build/classes/java/main/Grid.class rename to build/classes/java/main/grid/Grid.class index abc72c01fbe72954e14638fa7e2b6bffc14378ed..08aa92028cbb925516370f3224907b2157bc2a89 100644 Binary files a/build/classes/java/main/Grid.class and b/build/classes/java/main/grid/Grid.class differ diff --git a/build/classes/java/main/model/Fire.class b/build/classes/java/main/model/Fire.class new file mode 100644 index 0000000000000000000000000000000000000000..ffaef6a003613578cc8e673e2ce27e75258d51f6 Binary files /dev/null and b/build/classes/java/main/model/Fire.class differ diff --git a/build/classes/java/main/model/Model.class b/build/classes/java/main/model/Model.class new file mode 100644 index 0000000000000000000000000000000000000000..f5a82156ee03baf18c7ee96cbffafb38d006dfc5 Binary files /dev/null and b/build/classes/java/main/model/Model.class differ diff --git a/build/classes/java/main/position/Position.class b/build/classes/java/main/position/Position.class new file mode 100644 index 0000000000000000000000000000000000000000..7678dcf784c91dfeffd7de8ac1c7c502dd86fc9e Binary files /dev/null and b/build/classes/java/main/position/Position.class differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index a03e2a7667f4aee40a96aa3d95994982de790be4..0f0728cc4c133795de8262bbb5804bba0037686c 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/App.java b/src/main/java/App.java index 10dda1d5b5dac2118958e64a64772f18e7258f18..4f0eed44c56ecd21c71925eff1d40786ebf3743f 100644 --- a/src/main/java/App.java +++ b/src/main/java/App.java @@ -1,3 +1,4 @@ +import grid.Grid; import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; diff --git a/src/main/java/Clouds.java b/src/main/java/Clouds.java deleted file mode 100644 index bbbf9f92a2491d679802336fb7e0f82eff9cd96c..0000000000000000000000000000000000000000 --- a/src/main/java/Clouds.java +++ /dev/null @@ -1,5 +0,0 @@ -import java.util.List; - -public class Clouds { - -} diff --git a/src/main/java/Model.java b/src/main/java/Model.java deleted file mode 100644 index 52d20ea9b762f37e32f3aefafae70ba3c222be84..0000000000000000000000000000000000000000 --- a/src/main/java/Model.java +++ /dev/null @@ -1,191 +0,0 @@ -import java.util.*; - - -public class Model { - Grid grid; - int colCount, rowCount; - MotoFighter motoFighter = new MotoFighter(); - List<Position>linefite=new ArrayList<>(); - - List<Position> firefighters = new ArrayList<>(); - List<Position> clouds = new ArrayList<>(); - Set<Position> fires = new HashSet<>(); - List<Position> ffNewPositions; - List<Position> cNewPositions; - - - int step = 0; - - public Model(Grid grid) { - this.grid = grid; - colCount = grid.colCount; - rowCount = grid.rowCount; - } - - - public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){ - for(int index=0; index<fireNumber;index++) - fires.add(randomPosition()); - for(int index=0; index<fireFighterNumber;index++) - firefighters.add(randomPosition()); - for(int index=0; index<cloudNumber;index++) - clouds.add(randomPosition()); - for(int index=0; index<motoFighterNumber;index++) - linefite.add(randomPosition()); - motoFighter.motofighter.add(randomPosition().row()); - } - - private Position randomPosition() { - return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); - } - - - - public void activation(){ - ffNewPositions = new ArrayList<>(); - for(Position ff : firefighters){ - Position newPosition = activateFirefighter(ff); - grid.paint(ff.row(),ff.col()); - grid.paintFF(newPosition.row(), newPosition.col()); - ffNewPositions.add(newPosition); - } - - cNewPositions = new ArrayList<>(); - - for(Position cc : clouds){ - Position newPosition = activeCloud(cc); - grid.paint(cc.row(),cc.col()); - grid.paintCC(newPosition.row(), newPosition.col()); - cNewPositions.add(newPosition); - } - - /* for(Position mF : motofighter){ - Position newPosition = motoFighter.activateFighter(mF); - grid.paint(mF.row,mF.col); - grid.paintMF(newPosition.row, newPosition.col); - mfNewPositions.add(newPosition); - }*/ - - firefighters = ffNewPositions; - - clouds = cNewPositions; - - motoFighter.activation(); - - - - if(step%2==0){ - List<Position> newFires = new ArrayList<>(); - for(Position fire : fires){ - newFires.addAll(activateFire(fire)); - } - for(Position newFire : newFires) - grid.paintFire(newFire.row(), newFire.col()); - - fires.addAll(newFires);} - step++; - - } - - private List<Position> activateFire(Position position) { - return next(position); - } - - private Position activeCloud(Position position){ - Position randomPosition=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; - - } - - /* private Position activateMotofighter(Position position) { - Position randomPosition = tStepTowardFire(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; - }*/ - - - - private Position activateFirefighter(Position position) { - Position randomPosition = aStepTowardFire(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; - } - - private void extinguish(Position position) { - fires.remove(position); - grid.paint(position.row(), position.col()); - } - - private List<Position> next(Position position){ - List<Position> list = new ArrayList<>(); - if(position.row()>0) list.add(new Position(position.row()-1, position.col())); - if(position.col()>0) list.add(new Position(position.row(), position.col()-1)); - if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col())); - if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1)); - return list; - } - /* private List<Position> nextTwo(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; - }*/ - - private Position aStepTowardFire(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; - } - - /* private Position tStepTowardFire(Position position){ - Queue<Position> toVisit = new LinkedList<>(); - Set<Position> seen = new HashSet<>(); - HashMap<Position,Position> firstMove = new HashMap<>(); - toVisit.addAll(nextTwo(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; - }*/ - - -} \ No newline at end of file diff --git a/src/main/java/AntiFire.java b/src/main/java/fightfire/AntiFire.java similarity index 83% rename from src/main/java/AntiFire.java rename to src/main/java/fightfire/AntiFire.java index c42dd1c803e325e4ab4d2a8928c9f7ee2bb46395..92f06c533b97adf51de54aedf0b45328d9654640 100644 --- a/src/main/java/AntiFire.java +++ b/src/main/java/fightfire/AntiFire.java @@ -1,12 +1,17 @@ +package fightfire; + import java.util.HashSet; import java.util.List; import java.util.Set; +import grid.Grid; + public abstract class AntiFire { Set<Position> fires = new HashSet<>(); Grid grid; int colCount, rowCount; + public abstract void initiali(int number); public abstract void activation(); public abstract Position activateFighter(Position position); @@ -17,7 +22,7 @@ public abstract class AntiFire { public void extinguish(Position position){ fires.remove(position); - grid.paint(position.row, position.col); + grid.paint(position.row(), position.col()); } public Position randomPosition() { return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); diff --git a/src/main/java/fightfire/Clouds.java b/src/main/java/fightfire/Clouds.java new file mode 100644 index 0000000000000000000000000000000000000000..dd6eebf09d6a960af7df1ecb1b3e98e860300535 --- /dev/null +++ b/src/main/java/fightfire/Clouds.java @@ -0,0 +1,57 @@ +package fightfire; + +import fightfire.AntiFire; + +import java.util.*; + +public class Clouds extends AntiFire { + List<Position> ccNewPositions; + List<Position> clouds = new ArrayList<>(); + + @Override + public void initiali(int number) { + for(int index=0; index<number;index++) + clouds.add(randomPosition()); + + } + + @Override + public void activation() { + ccNewPositions = new ArrayList<>(); + for(Position cc : clouds){ + Position newPosition = activateFighter(cc); + grid.paint(cc.row(), cc.row()); + grid.paintMF(newPosition.row(), newPosition.col()); + ccNewPositions.add(newPosition); + } + clouds = ccNewPositions; + + } + + @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()-1, position.col())); + if(position.col()>0) list.add(new Position(position.row(), position.col()-1)); + if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col())); + if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1)); + return list; + } + + @Override + public Position moveTowardFire(Position position) { + return next(position).get((int) (Math.random()*next(position).size())); + } + +} diff --git a/src/main/java/fightfire/FireFigher.java b/src/main/java/fightfire/FireFigher.java new file mode 100644 index 0000000000000000000000000000000000000000..345a62f6e3a9bb2f1a75da1df72094ca574497c7 --- /dev/null +++ b/src/main/java/fightfire/FireFigher.java @@ -0,0 +1,72 @@ +package fightfire; + +import fightfire.AntiFire; + +import java.util.*; + +public class FireFigher extends AntiFire { + List<Position>ffNewPositions= new ArrayList<>(); + List<Position>firefighters=new ArrayList<>(); + @Override + public void initiali(int number) { + for(int index=0; index<number;index++) + firefighters.add(randomPosition()); + + } + + @Override + public void activation() { + ffNewPositions = new ArrayList<>(); + for(Position ff : firefighters){ + Position newPosition = activateFighter(ff); + grid.paint(ff.row(),ff.col()); + grid.paintFF(newPosition.row(), newPosition.col()); + ffNewPositions.add(newPosition); + } + + } + + @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()-1, position.col())); + if(position.col()>0) list.add(new Position(position.row(), position.col()-1)); + if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col())); + if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1)); + 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/MotoFighter.java b/src/main/java/fightfire/MotoFighter.java similarity index 92% rename from src/main/java/MotoFighter.java rename to src/main/java/fightfire/MotoFighter.java index c3d9186a8f12474562c53fe28c49ce67b1c21d92..903da1151bd29c475f84e7814cac5b2664189895 100644 --- a/src/main/java/MotoFighter.java +++ b/src/main/java/fightfire/MotoFighter.java @@ -1,3 +1,7 @@ +package fightfire; + +import fightfire.AntiFire; + import java.util.*; public class MotoFighter extends AntiFire { @@ -5,6 +9,11 @@ public class MotoFighter extends AntiFire { List<Position> motofighter = new ArrayList<>(); + @Override + public void initiali(int number) { + for(int index=0; index<number;index++) + motofighter.add(randomPosition()); + } @Override public void activation() { diff --git a/src/main/java/Grid.java b/src/main/java/grid/Grid.java similarity index 90% rename from src/main/java/Grid.java rename to src/main/java/grid/Grid.java index 0c522287853ee33182d1cc47f62c268bd1eb1b36..187212a01c32f33e51c3c53292313b6faeeef014 100644 --- a/src/main/java/Grid.java +++ b/src/main/java/grid/Grid.java @@ -1,11 +1,17 @@ +package grid; + import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.MouseEvent; import javafx.scene.paint.Color; +import model.Model; public class Grid extends Canvas{ - int width, height, colCount, rowCount; - Model model; + int width; + int height; + public int colCount; + public int rowCount; + public Model model; public Grid(int width, int height, int colCount, int rowCount) { @@ -17,7 +23,7 @@ public class Grid extends Canvas{ setFocusTraversable(true); setOnMousePressed(this::mousePressed); model = new Model(this); - model.initialisation(3,1,2,1); + model.initialisation(3,1,2,2); } public void restart(MouseEvent mouseEvent){ @@ -34,7 +40,7 @@ public class Grid extends Canvas{ model.click((int)x*rowCount/height,(int)y*colCount/width);*/ } - void repaint(){ + public void repaint(){ for(int col=0; col<colCount; col++) getGraphicsContext2D().strokeLine(0, col*width/colCount,height, col*width/colCount); for(int row=0; row<rowCount;row++) @@ -42,7 +48,7 @@ public class Grid extends Canvas{ } - void paint(int row, int col){ + public void paint(int row, int col){ getGraphicsContext2D().setFill(Color.WHITE); getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount); } diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java new file mode 100644 index 0000000000000000000000000000000000000000..9a72bd60980635f43ec7800f1be2e99b7fb261c1 --- /dev/null +++ b/src/main/java/model/Fire.java @@ -0,0 +1,48 @@ +package model; + +import grid.Grid; +import position.Position; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class Fire { + int step =0; + Grid grid; + int rowCount,colCount; + + Set<Position> fires = new HashSet<>(); + + public void initiali(int fireNumber){ + for(int index=0; index<fireNumber;index++) + fires.add(new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)));} + + public void activation() { + if(step%2==0){ + List<Position> newFires = new ArrayList<>(); + for(Position fire : fires){ + newFires.addAll(activateFire(fire)); + } + for(Position newFire : newFires) + grid.paintFire(newFire.row(), newFire.col()); + + fires.addAll(newFires);} + step++; + } + private List<Position> activateFire(Position position) { + return next(position); + } + + private List<Position> next(Position position){ + List<Position> list = new ArrayList<>(); + if(position.row()>0) list.add(new Position(position.row()-1, position.col())); + if(position.col()>0) list.add(new Position(position.row(), position.col()-1)); + if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col())); + if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1)); + return list; + } + + +} \ No newline at end of file diff --git a/src/main/java/model/Model.java b/src/main/java/model/Model.java new file mode 100644 index 0000000000000000000000000000000000000000..454700d4b7d4938a0c4cbe041b62e56c2de6db64 --- /dev/null +++ b/src/main/java/model/Model.java @@ -0,0 +1,218 @@ +package model; + +import fightfire.Clouds; +import fightfire.FireFigher; +import fightfire.MotoFighter; +import grid.Grid; + +import model.Model; +import position.Position; + +import java.util.*; + + +public class Model { + Grid grid; + int colCount, rowCount; + MotoFighter motoFighter =new MotoFighter(); + + FireFigher fireFigher = new FireFigher(); + Clouds clouds=new Clouds(); + + List<Position> firefighters = new ArrayList<>(); + Fire fires = new Fire(); + + List<Position> ffNewPositions; + List<Position> cNewPositions; + + + int step = 0; + + public Model(Grid grid) { + this.grid = grid; + colCount = grid.colCount; + rowCount = grid.rowCount; + } + + + public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){ + + fires.initiali(fireNumber); + fireFigher.initiali(fireFighterNumber); + clouds.initiali(cloudNumber); + motoFighter.initiali(motoFighterNumber); + + + + /*for(int index=0; index<fireFighterNumber;index++) + firefighters.add(randomPosition()); + for(int index=0; index<cloudNumber;index++) + clouds.add(randomPosition());*/ + + } + + /*private position.Position randomPosition() { + return new position.Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); + }*/ + + + + + public void activation(){ + + + + /* + ffNewPositions = new ArrayList<>(); + for(position.Position ff : firefighters){ + position.Position newPosition = activateFirefighter(ff); + grid.paint(ff.row(),ff.col()); + grid.paintFF(newPosition.row(), newPosition.col()); + ffNewPositions.add(newPosition); + } + firefighters = ffNewPositions; + */ + + fireFigher.activation(); + + /* cNewPositions = new ArrayList<>(); + + for(position.Position cc : clouds){ + position.Position newPosition = activeCloud(cc); + grid.paint(cc.row(),cc.col()); + grid.paintCC(newPosition.row(), newPosition.col()); + cNewPositions.add(newPosition); + } + + clouds = cNewPositions; + + */ + clouds.activation(); + + /* for(position.Position mF : motofighter){ + position.Position newPosition = motoFighter.activateFighter(mF); + grid.paint(mF.row,mF.col); + grid.paintMF(newPosition.row, newPosition.col); + mfNewPositions.add(newPosition); + }*/ + + motoFighter.activation(); + + + + /* if(step%2==0){ + List<position.Position> newFires = new ArrayList<>(); + for(position.Position fire : fires){ + newFires.addAll(activateFire(fire)); + } + for(position.Position newFire : newFires) + grid.paintFire(newFire.row(), newFire.col()); + + fires.addAll(newFires);} + step++;8*/ + fires.activation(); + + } + + /* private List<position.Position> activateFire(position.Position position) { + return next(position); + }*/ + + /* private position.Position activeCloud(position.Position position){ + position.Position randomPosition=next(position).get((int) (Math.random()*next(position).size())); + List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); + extinguish(randomPosition); + for (position.Position fire : nextFires) + extinguish(fire); + return randomPosition; + + }*/ + + /* private position.Position activateMotofighter(position.Position position) { + position.Position randomPosition = tStepTowardFire(position); + //next(position).get((int) (Math.random()*next(position).size())); + List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); + extinguish(randomPosition); + for (position.Position fire : nextFires) + extinguish(fire); + return randomPosition; + }*/ + + + + /* private position.Position activateFirefighter(position.Position position) { + position.Position randomPosition = aStepTowardFire(position); + //next(position).get((int) (Math.random()*next(position).size())); + List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList(); + extinguish(randomPosition); + for (position.Position fire : nextFires) + extinguish(fire); + return randomPosition; + }*/ + + /* private void extinguish(position.Position position) { + fires.remove(position); + grid.paint(position.row(), position.col()); + }*/ +/* + private List<position.Position> next(position.Position position){ + List<position.Position> list = new ArrayList<>(); + if(position.row()>0) list.add(new position.Position(position.row()-1, position.col())); + if(position.col()>0) list.add(new position.Position(position.row(), position.col()-1)); + if(position.row()<rowCount-1) list.add(new position.Position(position.row()+1, position.col())); + if(position.col()<colCount-1) list.add(new position.Position(position.row(), position.col()+1)); + return list; + }*/ + /* private List<position.Position> nextTwo(position.Position position){ + List<position.Position> list = new ArrayList<>(); + if(position.row>0) list.add(new position.Position(position.row-2, position.col)); + if(position.col>0) list.add(new position.Position(position.row, position.col-2)); + if(position.row<rowCount-1) list.add(new position.Position(position.row+2, position.col)); + if(position.col<colCount-1) list.add(new position.Position(position.row, position.col+2)); + return list; + }*/ + + /* private position.Position aStepTowardFire(position.Position position){ + Queue<position.Position> toVisit = new LinkedList<>(); + Set<position.Position> seen = new HashSet<>(); + HashMap<position.Position,position.Position> firstMove = new HashMap<>(); + toVisit.addAll(next(position)); + for(position.Position initialMove : toVisit) + firstMove.put(initialMove,initialMove); + while(!toVisit.isEmpty()){ + position.Position current = toVisit.poll(); + if(fires.contains(current)) + return firstMove.get(current); + for(position.Position adjacent : next(current)){ + if(seen.contains(adjacent)) continue; + toVisit.add(adjacent); + seen.add(adjacent); + firstMove.put(adjacent, firstMove.get(current)); + } + } + + }*/ + + /* private position.Position tStepTowardFire(position.Position position){ + Queue<position.Position> toVisit = new LinkedList<>(); + Set<position.Position> seen = new HashSet<>(); + HashMap<position.Position,position.Position> firstMove = new HashMap<>(); + toVisit.addAll(nextTwo(position)); + for(position.Position initialMove : toVisit) + firstMove.put(initialMove,initialMove); + while(!toVisit.isEmpty()){ + position.Position current = toVisit.poll(); + if(fires.contains(current)) + return firstMove.get(current); + for(position.Position adjacent : next(current)){ + if(seen.contains(adjacent)) continue; + toVisit.add(adjacent); + seen.add(adjacent); + firstMove.put(adjacent, firstMove.get(current)); + } + } + return position; + }*/ + + +} \ No newline at end of file diff --git a/src/main/java/Position.java b/src/main/java/position/Position.java similarity index 70% rename from src/main/java/Position.java rename to src/main/java/position/Position.java index 47d44a136003ca44d3aba0f9d14a213dc4a2307a..8af853b475a1f30858eaccae2bc105e988304707 100644 --- a/src/main/java/Position.java +++ b/src/main/java/position/Position.java @@ -1,2 +1,4 @@ +package position; + public record Position(int row , int col) { }