Fixes issue #2
This commit is contained in:
parent
ae2c6c321f
commit
526d15f2c7
3 changed files with 40 additions and 14 deletions
|
|
@ -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<T> {
|
|||
*/
|
||||
public List<T> 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<T> {
|
|||
*/
|
||||
public List<Edge<T>> getEdges(Node<T> 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<T> {
|
|||
|
||||
final Node<T> firstNode = nodes.get(0);
|
||||
|
||||
ArrayList<Node<T>> allVisitedNodes = new ArrayList<Node<T>>();
|
||||
ArrayList<Node<T>> nextVisitNodes = new ArrayList<Node<T>>();
|
||||
HashSet<Node<T>> allVisitedNodes = new HashSet<Node<T>>();
|
||||
ArrayDeque<Node<T>> nextVisitNodes = new ArrayDeque<Node<T>>();
|
||||
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<T> 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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Node<Castle>> 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<Castle> cast : castleNodes) {
|
||||
for (Node<Castle> c : allCastlesInRadius(cast, castleNodes, radius))
|
||||
castleGraph.addEdge(cast, c);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private List<Node<Castle>> allCastlesInRadius(Node<Castle> castle, List<Node<Castle>> 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.
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue