PathfinderUtils.closedNodes.add(parent);
PathfinderUtils.openNodes.remove(parent);
- if (parent.getX() == PathfinderUtils.endNode.getX() && parent.getY() == PathfinderUtils.endNode.getY()) {
- ControlPanel.toggleRunBtn.setText("End");
- map.isFinished = true;
- map.repaint();
- return;
- }
-
- if (!map.isFinished) {
+ if (!map.isFinished)
searchPath(parent);
- }
- else
- System.exit(0);
}
public void calculateOpenNode(int nextX, int nextY, Node parent) {
return;
if (nextX == PathfinderUtils.startNode.getX() && nextY == PathfinderUtils.startNode.getY())
return;
+ if (nextX == PathfinderUtils.endNode.getX() && nextY == PathfinderUtils.endNode.getY()) {
+ map.isFinished = true;
+ ControlPanel.toggleRunBtn.setText("Clear");
+ map.repaint();
+ return;
+ }
Node openNode = new Node(nextX, nextY);
openNode.setParentNode(parent);
public ControlPanel(Map map) {
algo = new JComboBox<>(new String[] { "Select an algorithm", "A*", "Dijkstra", "Breadth-first search"});
algo.setVisible(true);
+ algo.setFocusable(false);
toggleRunBtn = new JButton("Run");
toggleRunBtn.setVisible(true);
toggleRunBtn.setMargin(new Insets(0, 0, 0, 0));
toggleRunBtn.setBackground(Color.white);
toggleRunBtn.addActionListener(map);
+ toggleRunBtn.setFocusable(false);
map.add(algo);
map.add(toggleRunBtn);
import java.awt.event.KeyListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
+import java.awt.event.MouseEvent; import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
}
// Draws closed nodes
- g.setColor(Color.orange);
+ g.setColor(new Color(132, 255, 138));
for (Node node : PathfinderUtils.closedNodes) {
g.fillRect(node.getX() + 1, node.getY() + 1, size - 1, size - 1);
}
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) {
+ if (PathfinderUtils.startNode != null && PathfinderUtils.endNode != null) {
+ if (PathfinderUtils.checkDuplicateNode(PathfinderUtils.startNode, PathfinderUtils.endNode)) {
JOptionPane.showMessageDialog(null, "End node and start node can't be the same node",
"Same node error", JOptionPane.ERROR_MESSAGE);
return;
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) {
+ if (PathfinderUtils.startNode != null && PathfinderUtils.endNode != null) {
+ if (PathfinderUtils.checkDuplicateNode(PathfinderUtils.startNode, PathfinderUtils.endNode)) {
JOptionPane.showMessageDialog(null, "End node and start node can't be the same node!",
"SAME NODE ERROR", JOptionPane.ERROR_MESSAGE);
return;
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
+ if(PathfinderUtils.startNode != null)
+ if(PathfinderUtils.checkDuplicateNode(barrierNode, PathfinderUtils.startNode))
+ return;
+ if(PathfinderUtils.endNode != null)
+ if(PathfinderUtils.checkDuplicateNode(barrierNode, PathfinderUtils.endNode))
+ return;
PathfinderUtils.barriers.add(barrierNode);
switch (ControlPanel.algo.getItemAt(ControlPanel.algo.getSelectedIndex())) {
case ("A*"):
- System.out.println("A* selected");
new AStar(this).start();
break;
// AStar.start();
break;
- case ("Greedy best-first search"):
- System.out.println("Greedy best-first search selected");
- // AStar.start();
- break;
-
case ("Breadth-first search"):
System.out.println("Breadth-first search selected");
// AStar.start();
"Algorithm not selected", JOptionPane.ERROR_MESSAGE);
return;
}
-
- ControlPanel.toggleRunBtn.setText("Stop");
}
- else {
+ else if(ControlPanel.toggleRunBtn.getText().equals("Clear")){
+ PathfinderUtils.barriers.removeAll(PathfinderUtils.barriers);
+ PathfinderUtils.openNodes.removeAll(PathfinderUtils.openNodes);
+ PathfinderUtils.closedNodes.removeAll(PathfinderUtils.closedNodes);
+ PathfinderUtils.startNode = null;
+ PathfinderUtils.endNode = null;
+
+ isFinished = false;
+
+ this.repaint();
ControlPanel.toggleRunBtn.setText("Run");
}
}
barriers.remove(id);
}
+ static boolean checkDuplicateNode(Node a, Node b) {
+ if(a.getX() == b.getX() && a.getY() == b.getY())
+ return true;
+ return false;
+ }
+
static void sort() {
Node tmp;
-------------------------------------------------------------------------------
Test set: Main.AppTest
-------------------------------------------------------------------------------
-Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.02 s - in Main.AppTest
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 s - in Main.AppTest
<?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.02" 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.029" 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/surefirebooter12422851706423362175.jar /home/leo/Docs/Proj/PathVisualizer/target/surefire 2021-06-19T13-00-08_471-jvmRun1 surefire10461286948834527749tmp surefire_05278180969358337674tmp"/>
+ <property name="sun.java.command" value="/home/leo/Docs/Proj/PathVisualizer/target/surefire/surefirebooter8510599142121748610.jar /home/leo/Docs/Proj/PathVisualizer/target/surefire 2021-06-27T09-11-09_330-jvmRun1 surefire6120348368433176072tmp surefire_01333341478733871355tmp"/>
<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/surefirebooter12422851706423362175.jar"/>
+ <property name="surefire.real.class.path" value="/home/leo/Docs/Proj/PathVisualizer/target/surefire/surefirebooter8510599142121748610.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="path.separator" value=":"/>
- <property name="os.version" value="5.12.10-gentoo-LeoKernel"/>
+ <property name="os.version" value="5.12.12-gentoo-LeoKernel"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>