Fixes issue #2

This commit is contained in:
joachimschmidt557 2019-02-15 15:01:48 +01:00
parent ae2c6c321f
commit 526d15f2c7
3 changed files with 40 additions and 14 deletions

View file

@ -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();
}
}

View file

@ -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.

View file

@ -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());