From df2bd6e4685127e062456a8f1028f4e035eeaf0b Mon Sep 17 00:00:00 2001 From: LeonardoBizzoni Date: Thu, 17 Jun 2021 12:05:10 +0200 Subject: [PATCH] Initial commit with basic funtionality --- pom.xml | 75 ++++++++ src/main/java/Main/App.java | 9 + src/main/java/Main/Map.java | 168 ++++++++++++++++++ src/main/java/Main/Node.java | 26 +++ src/test/java/Main/AppTest.java | 20 +++ target/PathVisualizer-1.0-SNAPSHOT.jar | Bin 0 -> 5001 bytes target/classes/Main/App.class | Bin 0 -> 393 bytes target/classes/Main/Map.class | Bin 0 -> 4174 bytes target/classes/Main/Node.class | Bin 0 -> 660 bytes target/maven-archiver/pom.properties | 4 + .../compile/default-compile/createdFiles.lst | 3 + .../compile/default-compile/inputFiles.lst | 3 + .../default-testCompile/createdFiles.lst | 1 + .../default-testCompile/inputFiles.lst | 1 + target/surefire-reports/Main.AppTest.txt | 4 + target/surefire-reports/TEST-Main.AppTest.xml | 63 +++++++ target/test-classes/Main/AppTest.class | Bin 0 -> 455 bytes 17 files changed, 377 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/Main/App.java create mode 100644 src/main/java/Main/Map.java create mode 100644 src/main/java/Main/Node.java create mode 100644 src/test/java/Main/AppTest.java create mode 100644 target/PathVisualizer-1.0-SNAPSHOT.jar create mode 100644 target/classes/Main/App.class create mode 100644 target/classes/Main/Map.class create mode 100644 target/classes/Main/Node.class create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/surefire-reports/Main.AppTest.txt create mode 100644 target/surefire-reports/TEST-Main.AppTest.xml create mode 100644 target/test-classes/Main/AppTest.class diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d6aede7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,75 @@ + + + + 4.0.0 + + Main + PathVisualizer + 1.0-SNAPSHOT + + PathVisualizer + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/src/main/java/Main/App.java b/src/main/java/Main/App.java new file mode 100644 index 0000000..5e562da --- /dev/null +++ b/src/main/java/Main/App.java @@ -0,0 +1,9 @@ +package Main; + +public class App { + + public static void main(String[] args) { + new Map(); + } + +} diff --git a/src/main/java/Main/Map.java b/src/main/java/Main/Map.java new file mode 100644 index 0000000..4c24ad5 --- /dev/null +++ b/src/main/java/Main/Map.java @@ -0,0 +1,168 @@ +/* TODO + * aggiungere una sorta di menu dove scegliere: + * - velocità di riproduzione + * - tipo di algoritmo: + * + a* + * + dijkstra + * + greedy best-first search + * + swarm + * + convergent swarm + * + bidirectional swarm + * + breadth-first search + * + depth-first search + * zoommare sulla griglia + */ +package Main; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.event.MouseListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; +import java.util.ArrayList; +import java.util.List; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + +class Map extends JPanel implements MouseListener, MouseMotionListener, KeyListener { + private JFrame window; + private int size = 30; + private char key = (char) 0; + + private Node startNode, endNode; + private List barriers = new ArrayList<>(); + + public Map() { + addMouseListener(this); + addKeyListener(this); + setFocusable(true); + addMouseMotionListener(this); + + // Settings up the window + window = new JFrame(); + window.setContentPane(this); + window.setTitle("Pathfinding Algorithm Visualizer"); + window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + window.pack(); + window.setVisible(true); + + this.revalidate(); + this.repaint(); + } + + public void paintComponent(Graphics g) { + super.paintComponent(g); + + // Draws the grid + g.setColor(Color.lightGray); + for (int i = 0; i < this.getWidth(); i += size) { + for (int j = 0; j < this.getHeight(); j += size) { + g.drawRect(i, j, size, size); + } + } + + // Draws start node + if (startNode != null) { + g.setColor(new Color(117, 110, 202)); + g.fillRect(startNode.getX() + 1, startNode.getY() + 1, size - 1, size - 1); + } + + // Draws end node + if (endNode != null) { + g.setColor(new Color(204, 36, 29)); + g.fillRect(endNode.getX() + 1, endNode.getY() + 1, size - 1, size - 1); + } + + // Draws barrier nodes + g.setColor(new Color(40, 40, 40)); + for (Node node : barriers) { + g.fillRect(node.getX() + 1, node.getY() + 1, size - 1, size - 1); + } + } + + // Drawing on the grid + public void mapDrawing(MouseEvent e) { + if (SwingUtilities.isLeftMouseButton(e)) { + if (key == 's') { + int posX = e.getX() % size; + int posY = e.getY() % size; + + if (startNode == null) { + startNode = new Node(e.getX() - posX, e.getY() - posY); + } else { + startNode.setX(e.getX() - posX); + startNode.setY(e.getY() - posY); + } + + repaint(); + } + + else if (key == 'e') { + int posX = e.getX() % size; + int posY = e.getY() % size; + + if (endNode == null) { + endNode = new Node(e.getX() - posX, e.getY() - posY); + } else { + endNode.setX(e.getX() - posX); + endNode.setY(e.getY() - posY); + } + + repaint(); + } + + else { + int posX = e.getX() % size; + int posY = e.getY() % size; + + barriers.add(new Node(e.getX() - posX, e.getY() - posY)); + + repaint(); + } + } + // TODO cancellare le barriere col tasto destro del mouse + } + + @Override + public void keyPressed(KeyEvent e) { + key = e.getKeyChar(); + // TODO far partire/fermare l'algoritmo con il tasto invio + } + + @Override + public void keyReleased(KeyEvent e) { + key = (char) 0; + } + + @Override + public void mousePressed(MouseEvent e) { + mapDrawing(e); + } + + @Override + public void mouseDragged(MouseEvent e) { + mapDrawing(e); + } + + @Override + public void keyTyped(KeyEvent e) {} + + @Override + public void mouseClicked(MouseEvent e) {} + + @Override + public void mouseReleased(MouseEvent e) {} + + @Override + public void mouseEntered(MouseEvent e) {} + + @Override + public void mouseExited(MouseEvent e) {} + + @Override + public void mouseMoved(MouseEvent e) {} +} diff --git a/src/main/java/Main/Node.java b/src/main/java/Main/Node.java new file mode 100644 index 0000000..479a5fb --- /dev/null +++ b/src/main/java/Main/Node.java @@ -0,0 +1,26 @@ +package Main; + +public class Node { + private int x, y; + + public Node(int x, int y) { + this.x = x; + this.y = y; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } +} diff --git a/src/test/java/Main/AppTest.java b/src/test/java/Main/AppTest.java new file mode 100644 index 0000000..4960c68 --- /dev/null +++ b/src/test/java/Main/AppTest.java @@ -0,0 +1,20 @@ +package Main; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/target/PathVisualizer-1.0-SNAPSHOT.jar b/target/PathVisualizer-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..406f8f9e75a312c81d28476fbb9aec14cf315f67 GIT binary patch literal 5001 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 YVGfAixgk!>0ns-%#Mm4VX;TONU*^A@mH+?% literal 0 HcmV?d00001 diff --git a/target/classes/Main/Node.class b/target/classes/Main/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..8ff1fb222e009e5806cc7c7529a3a2e888feaac2 GIT binary patch literal 660 zcmZ{hPfG$p7{-6^I=k!YmS$%Eqi*IQ4;_mxK_HkN3aR62gKe0CZBgH;OHc$I`T%{X zh?y0OusQ6^`_4Si^P8Q|ulEmNmyH}QO96^y^I7p(^;r|-L6C+ZkAk-!58~uNaI1~R zc3V(~!%Hm`n(;ul?ru7IbQX2`S|~M#-KgJ=MzN{KO_f~5w?e*o9L0lrYj~;m1l7~Y zg^;OkHw1NS3sp_sdpbE!o99CAba*%F>Z92B2S&Yf9o + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/test-classes/Main/AppTest.class b/target/test-classes/Main/AppTest.class new file mode 100644 index 0000000000000000000000000000000000000000..6b3f4e2a47ae644aee71876320b08afdf766f7ab GIT binary patch literal 455 zcmZvWyH3ME5Jk@flYlW0!ZRgZLV=5vAfyP1%76rsk?1zbifrVpBYO?sMFpbZ1NbO} zY=WR*s+l`;&z+CYw|AgN+s9+er^R-Iod&x?{nS|F&V;2-Hx|6}bgYHV$XI<<%!WD} zs9~aoR+NrZ606LV^Fs98#N@(8bg7ID`}6rg=k7$<$tP)%jQci!(%GGHlR;K!p?yQMzOQ*W>ru+M=I z{EZiy&ywhs+#Z5yv}_$=8z>k%Bmq{1VRG{5d>I1dO@D6 v^$JvL@L2_d?*n|+03o1Gtupt1%-$=tU$ajQXyLK_4`6+P->6`lRb=xE+GtqT literal 0 HcmV?d00001 -- 2.52.0