diff --git a/.gradle/7.4/checksums/checksums.lock b/.gradle/7.4/checksums/checksums.lock index df54c1e0932a6aad9b35fe2f5781753d92dd27c2..05bf94807c93fa240a16ad651bdb2179e5022856 100644 Binary files a/.gradle/7.4/checksums/checksums.lock and b/.gradle/7.4/checksums/checksums.lock differ diff --git a/.gradle/7.4/checksums/md5-checksums.bin b/.gradle/7.4/checksums/md5-checksums.bin index 38740cef473d59e77cc7580e7c7e168c289010c2..6ce413ad4b66b7b5bc4d4eec40e1040272c2023a 100644 Binary files a/.gradle/7.4/checksums/md5-checksums.bin and b/.gradle/7.4/checksums/md5-checksums.bin differ diff --git a/.gradle/7.4/checksums/sha1-checksums.bin b/.gradle/7.4/checksums/sha1-checksums.bin index 37d18a5f1d3ac5802ec2e11e6e2ee389d38eabe7..228d9eedbd99af90c75b73d08d1529c14e3310bc 100644 Binary files a/.gradle/7.4/checksums/sha1-checksums.bin and b/.gradle/7.4/checksums/sha1-checksums.bin differ diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin index 8044f8db540d8ca16951815ac998f6158a86ba9c..482e3bdabfbae03cd5487a119ad5f3965e386c49 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 e57456dc4f9a187338a1af68d935fbf5cffe29da..9941b2c52553d73e13143e16fb70a977ea5e0ef9 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 ac4d206fd6144671088bac4e8af72f9d24c99d8f..4967a97b225f66ba74f8ce3a2c0c13d4676fff19 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 f382ced7e8f10e14ccd723be3c74dae1c97aa72b..12eb8cbe55628dc15efc14f86e6ba1b86813d97b 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 new file mode 100644 index 0000000000000000000000000000000000000000..ab592c7a31bfa7d10f331af39895804b94763548 Binary files /dev/null and b/.gradle/7.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index f7492f18c6ecf67db5af3279f7c8498953313f0a..f9bfce77ea4384b451ec4b6f1a5479072d930f33 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 22247e075c97d900294472751d70aa6810330c43..4bcaca91cdbd023010d013659aafa9c3bcf80e91 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..d94dcb441eb81719468d22e20d87091ecbebd734 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/.idea/compiler.xml b/.idea/compiler.xml index 659bf43190d1afbfe1907e2e5e2bd75ad761dfb3..fb7f4a8a465d42b4a0390d464b83b99e8465bba7 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="CompilerConfiguration"> - <bytecodeTargetLevel target="16" /> + <bytecodeTargetLevel target="11" /> </component> </project> \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ba1ec5c7e20c12eb5b893684698eab151c4a8803..611e7c8ad7b91e576987485e8678b0fdad4193ae 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> diff --git a/.idea/misc.xml b/.idea/misc.xml index 3db7abf849bb2eb6f6e84f40abd01c1aba9033b5..8476b296e8a659d80d9c1da62e6ea7f7f1e15a39 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ <component name="FrameworkDetectionExcludesConfiguration"> <file type="web" url="file://$PROJECT_DIR$" /> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="corretto-16" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_X" default="true" project-jdk-name="corretto-18 (2)" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000000000000000000000000000000000000..e96534fb27b68192f27f985d3879e173ec77adb8 --- /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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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/App$1.class b/build/classes/java/main/App$1.class new file mode 100644 index 0000000000000000000000000000000000000000..136eec5fd5de762f9958c0f9e0c25c95369e559e 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..6d4b4a3cf2baacad8fae05e86dc06dcb8e8aa6ed Binary files /dev/null and b/build/classes/java/main/App.class differ diff --git a/build/classes/java/main/Grid.class b/build/classes/java/main/Grid.class new file mode 100644 index 0000000000000000000000000000000000000000..2979e0e7f08c7d0bff33daa48fabe02028e1045b Binary files /dev/null and b/build/classes/java/main/Grid.class differ diff --git a/build/classes/java/main/Model$Position.class b/build/classes/java/main/Model$Position.class new file mode 100644 index 0000000000000000000000000000000000000000..51c52b923ab5b501b3803cc99bb5101b0b07402d Binary files /dev/null and b/build/classes/java/main/Model$Position.class differ diff --git a/build/classes/java/main/Model.class b/build/classes/java/main/Model.class new file mode 100644 index 0000000000000000000000000000000000000000..5d858bfcb70dbf28f83d9ed1c56ce1f4d1db1948 Binary files /dev/null and b/build/classes/java/main/Model.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..99ccfdfd3ea2fd7ca14837d733baf60e85e1d94c Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/Fighters/AntiFire.java b/src/main/java/Fighters/AntiFire.java new file mode 100644 index 0000000000000000000000000000000000000000..b4a6d1cb0a2ed4f21140d489af4338e0f751f88c --- /dev/null +++ b/src/main/java/Fighters/AntiFire.java @@ -0,0 +1,30 @@ +package Fighters; + +import javax.swing.text.Position; +import java.util.*; + +public abstract class AntiFire { + Grid grid; + int colCount, rowCount; + List<Position> firefighters = new ArrayList<>(); + Set<Position> fires = new HashSet<>(); + + public Model.Position randomPosition() { + return new Model.Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); + } + + public abstract Position moveTowardFire(Position position); + public abstract List<Position> next(Position position); + public abstract Position activateFight(Position position); + + + + + + public void extinguish(Position position) { + fires.remove(position); + grid.paint(position.row, position.col); + } + } + +} diff --git a/src/main/java/Fighters/Clouds.java b/src/main/java/Fighters/Clouds.java new file mode 100644 index 0000000000000000000000000000000000000000..1ceaa9dfdde5154172b2c7a63681517515a9cec7 --- /dev/null +++ b/src/main/java/Fighters/Clouds.java @@ -0,0 +1,35 @@ +package Fighters; + + + + +import java.util.ArrayList; +import java.util.List; +import Position.Position; +public abstract class Clouds extends AntiFire { + + @Override + public Position activateFight(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; + } + + + + + @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; + } + +} diff --git a/src/main/java/Fighters/FireFighters.java b/src/main/java/Fighters/FireFighters.java new file mode 100644 index 0000000000000000000000000000000000000000..5ac517608e82375bad92e5506808badafedbc4c6 --- /dev/null +++ b/src/main/java/Fighters/FireFighters.java @@ -0,0 +1,58 @@ +package Fighters; + +import Fighters.AntiFire; + +import Position.Position; +import java.util.*; + +public class FireFighters extends AntiFire { + int colCount, rowCount; + + Position position; + + + @Override + public Position activateFight(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/Fighters/MotorizedFireFighters.java b/src/main/java/Fighters/MotorizedFireFighters.java new file mode 100644 index 0000000000000000000000000000000000000000..fe9b6a52257f52238c19c2fcd6d9b9d17628d49f --- /dev/null +++ b/src/main/java/Fighters/MotorizedFireFighters.java @@ -0,0 +1,52 @@ +package Fighters; + +import Position.Position; +import java.util.*; + +public class MotorizedFireFighters extends AntiFire { + + @Override + public Position activateFight(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 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; + } + + + + @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; + } +} diff --git a/src/main/java/Fire.java b/src/main/java/Fire.java new file mode 100644 index 0000000000000000000000000000000000000000..19aa564e6af338acd1d2b9c250b98014c45f05d5 --- /dev/null +++ b/src/main/java/Fire.java @@ -0,0 +1,21 @@ + +import Position.Position; + +import java.util.ArrayList; +import java.util.List; + +public class Fire { + int colCount,rowCount; + + 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; + } +} diff --git a/src/main/java/Grid.java b/src/main/java/Grid.java index 23fb50d23d9ba0dd308def943a81d8fe898d40a9..4ce3285c486ee31f4b17eb0326a726740d501081 100644 --- a/src/main/java/Grid.java +++ b/src/main/java/Grid.java @@ -17,12 +17,12 @@ public class Grid extends Canvas{ setFocusTraversable(true); setOnMousePressed(this::mousePressed); model = new Model(this); - model.initialisation(3,8); + model.initialisation(3,8,2,2); } public void restart(MouseEvent mouseEvent){ model = new Model(this); - model.initialisation(3,6); + model.initialisation(10,50,2,1); getGraphicsContext2D().clearRect(0,0,width,height); repaint(); } @@ -48,7 +48,7 @@ public class Grid extends Canvas{ } public void paintFF(int row, int col) { - getGraphicsContext2D().setFill(Color.BLUE); + getGraphicsContext2D().setFill(Color.GREEN); getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount); } diff --git a/src/main/java/Model.java b/src/main/java/Model.java index f23d0d13c6a3e847962201dc7c72fd5dedc0a249..7e6653f332c7d248448a91cc6a925bb51472dee8 100644 --- a/src/main/java/Model.java +++ b/src/main/java/Model.java @@ -1,11 +1,16 @@ +import javax.swing.text.Position; import java.util.*; public class Model { + + Position position; Grid grid; int colCount, rowCount; List<Position> firefighters = new ArrayList<>(); Set<Position> fires = new HashSet<>(); + List<Position> motorizedfirefighters = new ArrayList<>(); + List<Position> clouds = new ArrayList<>(); List<Position> ffNewPositions; int step = 0; @@ -16,14 +21,21 @@ public class Model { } - public void initialisation(int fireNumber, int fireFighterNumber){ + public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber, int motorizedFireFighterNumber){ 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<motorizedFireFighterNumber;index++) + motorizedfirefighters.add(randomPosition()); + } - private Position randomPosition() { + + public Position randomPosition() { return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)); } @@ -32,6 +44,7 @@ public class Model { 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); @@ -50,28 +63,28 @@ public class Model { } - private List<Position> activateFire(Position position) { + public List<Position> activateFire(Position position) { return next(position); } - private Position activateFirefighter(Position position) { + public Position activateFirefighter(Position position) { Position randomPosition = aStepTowardFire(position); - //next(position).get((int) (Math.random()*next(position).size())); + //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; - } + for (Position fire : nextFires) + extinguish(fire); + return randomPosition; + } - private void extinguish(Position position) { + public void extinguish(Position position) { fires.remove(position); grid.paint(position.row, position.col); } - private List<Position> next(Position position){ + 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)); @@ -80,7 +93,7 @@ public class Model { return list; } - private Position aStepTowardFire(Position position){ + public Position aStepTowardFire(Position position){ Queue<Position> toVisit = new LinkedList<>(); Set<Position> seen = new HashSet<>(); HashMap<Position,Position> firstMove = new HashMap<>(); @@ -100,6 +113,6 @@ public class Model { } return position; } - public record Position(int row, int col){} -} \ No newline at end of file + +} diff --git a/src/main/java/Position/Position.java b/src/main/java/Position/Position.java new file mode 100644 index 0000000000000000000000000000000000000000..31cbc69c281fd9ebae15ec2c8c3008b8e41fe855 --- /dev/null +++ b/src/main/java/Position/Position.java @@ -0,0 +1,4 @@ +package Position; + +public record Position(int row , int col) { +}