diff --git a/Projektgruppe_175/src/base/Graph.java b/Projektgruppe_175/src/base/Graph.java index 6db2ef7..fd7a87c 100644 --- a/Projektgruppe_175/src/base/Graph.java +++ b/Projektgruppe_175/src/base/Graph.java @@ -1,6 +1,8 @@ package base; +import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.function.Function; @@ -80,7 +82,9 @@ public class Graph { */ public List getAllValues() { - return nodes.stream().map(x -> x.getValue()).collect(Collectors.toList()); + return nodes.stream() + .map(x -> x.getValue()) + .collect(Collectors.toList()); } @@ -93,7 +97,9 @@ public class Graph { */ public List> getEdges(Node node) { - return edges.stream().filter(x -> x.getNodeA().equals(node)).collect(Collectors.toList()); + return edges.stream() + .filter(x -> x.getNodeA().equals(node) || x.getNodeB().equals(node)) + .collect(Collectors.toList()); } @@ -137,29 +143,33 @@ public class Graph { final Node firstNode = nodes.get(0); - ArrayList> allVisitedNodes = new ArrayList>(); - ArrayList> nextVisitNodes = new ArrayList>(); + HashSet> allVisitedNodes = new HashSet>(); + ArrayDeque> nextVisitNodes = new ArrayDeque>(); allVisitedNodes.add(firstNode); nextVisitNodes.addAll(getEdges(firstNode).stream() - .map(x -> x.getNodeB()) + .map(x -> x.getOtherNode(firstNode)) .filter(x -> !allVisitedNodes.contains(x)) .collect(Collectors.toList())); - while (nextVisitNodes.size() > 0) { + while (!nextVisitNodes.isEmpty()) { - allVisitedNodes.add(nextVisitNodes.get(0)); + final Node nextNode = nextVisitNodes.removeFirst(); - nextVisitNodes.addAll(getEdges(nextVisitNodes.get(0)).stream() - .map(x -> x.getNodeB()) + allVisitedNodes.add(nextNode); + + nextVisitNodes.addAll(getEdges(nextNode).stream() + .map(x -> x.getOtherNode(nextNode)) .filter(x -> !allVisitedNodes.contains(x)) .collect(Collectors.toList())); - - nextVisitNodes.remove(0); - + } + System.out.println(allVisitedNodes.size()); + System.out.println(nodes.size()); + return allVisitedNodes.size() == nodes.size(); } + } diff --git a/Projektgruppe_175/src/game/map/GameMap.java b/Projektgruppe_175/src/game/map/GameMap.java index c4a4167..41c5c5f 100644 --- a/Projektgruppe_175/src/game/map/GameMap.java +++ b/Projektgruppe_175/src/game/map/GameMap.java @@ -8,6 +8,7 @@ import java.awt.*; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * Diese Klasse representiert das Spielfeld. Sie beinhaltet das Hintergrundbild, welches mit Perlin noise erzeugt wurde, @@ -153,15 +154,30 @@ public class GameMap { private void generateEdges() { List> castleNodes = castleGraph.getNodes(); - + /* for (int i = 0; i < castleNodes.size(); i++) { if (i == castleNodes.size() - 1) castleGraph.addEdge(castleNodes.get(i), castleNodes.get(0)); else castleGraph.addEdge(castleNodes.get(i), castleNodes.get(i+1)); + }*/ + + final double radius = 300.0; + + for (Node cast : castleNodes) { + for (Node c : allCastlesInRadius(cast, castleNodes, radius)) + castleGraph.addEdge(cast, c); } } + + private List> allCastlesInRadius(Node castle, List> allCastles, double r) { + + return allCastles.stream() + .filter(x -> x.getValue().distance(castle.getValue()) <= r) + .collect(Collectors.toList()); + + } /** * Hier werden die Burgen in Königreiche unterteilt. Dazu wird der {@link Clustering} Algorithmus aufgerufen. diff --git a/Projektgruppe_175/src/tests/student/GraphConnectionTest.java b/Projektgruppe_175/src/tests/student/GraphConnectionTest.java index 0e83499..2768a87 100644 --- a/Projektgruppe_175/src/tests/student/GraphConnectionTest.java +++ b/Projektgruppe_175/src/tests/student/GraphConnectionTest.java @@ -21,7 +21,7 @@ public class GraphConnectionTest { testGraph.addEdge(a, b); testGraph.addEdge(a, c); - testGraph.addEdge(c, d); + testGraph.addEdge(d, c); assertTrue(testGraph.allNodesConnected());