package Main;
import javax.swing.JFrame;
+import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
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;
private int size = 30;
private char key = (char) 0;
- private Node startNode, endNode;
- private List<Node> barriers = new ArrayList<>();
-
public Map() {
+ this.setBackground(new Color(40, 40, 40));
addMouseListener(this);
addKeyListener(this);
setFocusable(true);
addMouseMotionListener(this);
- // Settings up the window
+ // Setting up the window
window = new JFrame();
window.setContentPane(this);
window.setTitle("Pathfinding Algorithm Visualizer");
super.paintComponent(g);
// Draws the grid
- g.setColor(Color.lightGray);
+ g.setColor(new Color(50, 48, 47));
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) {
+ if (PathfinderUtils.startNode != null) {
g.setColor(new Color(117, 110, 202));
- g.fillRect(startNode.getX() + 1, startNode.getY() + 1, size - 1, size - 1);
+ g.fillRect(PathfinderUtils.startNode.getX() + 1, PathfinderUtils.startNode.getY() + 1, size - 1, size - 1);
}
// Draws end node
- if (endNode != null) {
+ if (PathfinderUtils.endNode != null) {
g.setColor(new Color(204, 36, 29));
- g.fillRect(endNode.getX() + 1, endNode.getY() + 1, size - 1, size - 1);
+ g.fillRect(PathfinderUtils.endNode.getX() + 1, PathfinderUtils.endNode.getY() + 1, size - 1, size - 1);
}
// Draws barrier nodes
- g.setColor(new Color(40, 40, 40));
- for (Node node : barriers) {
+ g.setColor(new Color(235, 219, 178));
+ for (Node node : PathfinderUtils.barriers) {
g.fillRect(node.getX() + 1, node.getY() + 1, size - 1, size - 1);
}
}
// Drawing on the grid
public void mapDrawing(MouseEvent e) {
+ // Creating nodes
if (SwingUtilities.isLeftMouseButton(e)) {
if (key == 's') {
- int posX = e.getX() % size;
- int posY = e.getY() % size;
+ int posX = e.getX() - (e.getX() % size);
+ int posY = e.getY() - (e.getY() % size);
+
+ // TODO fa cagare
+ // Checks if start node and end node are the same
+ if (PathfinderUtils.endNode != null) {
+ if (PathfinderUtils.endNode.getX() == posX && PathfinderUtils.endNode.getY() == posY) {
+ JOptionPane.showMessageDialog(null, "End node and start node can't be the same node", "Same node error", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ }
- if (startNode == null) {
- startNode = new Node(e.getX() - posX, e.getY() - posY);
+ if (PathfinderUtils.startNode == null) {
+ PathfinderUtils.startNode = new Node(posX, posY);
} else {
- startNode.setX(e.getX() - posX);
- startNode.setY(e.getY() - posY);
+ PathfinderUtils.startNode.setX(posX);
+ PathfinderUtils.startNode.setY(posY);
}
repaint();
}
else if (key == 'e') {
- int posX = e.getX() % size;
- int posY = e.getY() % size;
+ int posX = e.getX() - (e.getX() % size);
+ int posY = e.getY() - (e.getY() % size);
+
+ // TODO fa cagare
+ // Checks if end node and start node are the same
+ if (PathfinderUtils.startNode != null) {
+ if (PathfinderUtils.startNode.getX() == posX && PathfinderUtils.startNode.getY() == posY) {
+ JOptionPane.showMessageDialog(null, "End node and start node can't be the same node!", "SAME NODE ERROR", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ }
- if (endNode == null) {
- endNode = new Node(e.getX() - posX, e.getY() - posY);
+ if (PathfinderUtils.endNode == null) {
+ PathfinderUtils.endNode = new Node(posX, posY);
} else {
- endNode.setX(e.getX() - posX);
- endNode.setY(e.getY() - posY);
+ PathfinderUtils.endNode.setX(posX);
+ PathfinderUtils.endNode.setY(posY);
}
repaint();
}
else {
- int posX = e.getX() % size;
- int posY = e.getY() % size;
+ int posX = e.getX() - (e.getX() % size);
+ int posY = e.getY() - (e.getY() % size);
+ Node barrierNode = new Node(posX, posY);
+
+ // TODO controlla se si sta creando una barriera su start o end
+
+
+ PathfinderUtils.barriers.add(barrierNode);
+
+ repaint();
+ }
+ }
- barriers.add(new Node(e.getX() - posX, e.getY() - posY));
+ // Deleting nodes
+ else if (SwingUtilities.isRightMouseButton(e)) {
+ int posX = e.getX() - (e.getX() % size);
+ int posY = e.getY() - (e.getY() % size);
+ if (key == 's' && PathfinderUtils.startNode != null) {
+ if (PathfinderUtils.startNode.getX() == posX && PathfinderUtils.startNode.getY() == posY) {
+ PathfinderUtils.startNode = null;
+ repaint();
+ }
+ }
+
+ else if (key == 'e' && PathfinderUtils.endNode != null) {
+ if (PathfinderUtils.endNode.getX() == posX && PathfinderUtils.endNode.getY() == posY) {
+ PathfinderUtils.endNode = null;
+ repaint();
+ }
+ }
+
+ else {
+ int nodeID = PathfinderUtils.locate(posX, posY);
+
+ if (nodeID != -1) {
+ PathfinderUtils.remove(nodeID);
+ }
repaint();
}
}
- // TODO cancellare le barriere col tasto destro del mouse
}
@Override
<?xml version="1.0" encoding="UTF-8"?>
-<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="Main.AppTest" time="0.028" tests="1" errors="0" skipped="0" failures="0">
+<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="Main.AppTest" time="0.027" tests="1" errors="0" skipped="0" failures="0">
<properties>
<property name="awt.toolkit" value="sun.awt.X11.XToolkit"/>
<property name="java.specification.version" value="11"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="GB"/>
<property name="sun.boot.library.path" value="/opt/openjdk-bin-11.0.11_p9/lib"/>
- <property name="sun.java.command" value="/home/leo/Docs/Proj/PathVisualizer/target/surefire/surefirebooter16417584190550890545.jar /home/leo/Docs/Proj/PathVisualizer/target/surefire 2021-06-17T11-55-55_292-jvmRun1 surefire4864576372469895393tmp surefire_01966433911489221877tmp"/>
+ <property name="sun.java.command" value="/home/leo/Docs/Proj/PathVisualizer/target/surefire/surefirebooter514838881418717725.jar /home/leo/Docs/Proj/PathVisualizer/target/surefire 2021-06-17T18-00-26_353-jvmRun1 surefire13060722636073724137tmp surefire_07869077185134568567tmp"/>
<property name="jdk.debug" value="release"/>
<property name="surefire.test.class.path" value="/home/leo/Docs/Proj/PathVisualizer/target/test-classes:/home/leo/Docs/Proj/PathVisualizer/target/classes:/home/leo/.m2/repository/junit/junit/4.11/junit-4.11.jar:/home/leo/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:"/>
<property name="sun.cpu.endian" value="little"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/>
- <property name="surefire.real.class.path" value="/home/leo/Docs/Proj/PathVisualizer/target/surefire/surefirebooter16417584190550890545.jar"/>
+ <property name="surefire.real.class.path" value="/home/leo/Docs/Proj/PathVisualizer/target/surefire/surefirebooter514838881418717725.jar"/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="11.0.11+9"/>
<property name="user.name" value="leo"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="55.0"/>
</properties>
- <testcase name="shouldAnswerWithTrue" classname="Main.AppTest" time="0.001"/>
+ <testcase name="shouldAnswerWithTrue" classname="Main.AppTest" time="0.002"/>
</testsuite>
\ No newline at end of file