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;
|
package base;
|
||||||
|
|
||||||
|
import java.util.ArrayDeque;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
@ -80,7 +82,9 @@ public class Graph<T> {
|
||||||
*/
|
*/
|
||||||
public List<T> getAllValues() {
|
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) {
|
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);
|
final Node<T> firstNode = nodes.get(0);
|
||||||
|
|
||||||
ArrayList<Node<T>> allVisitedNodes = new ArrayList<Node<T>>();
|
HashSet<Node<T>> allVisitedNodes = new HashSet<Node<T>>();
|
||||||
ArrayList<Node<T>> nextVisitNodes = new ArrayList<Node<T>>();
|
ArrayDeque<Node<T>> nextVisitNodes = new ArrayDeque<Node<T>>();
|
||||||
allVisitedNodes.add(firstNode);
|
allVisitedNodes.add(firstNode);
|
||||||
|
|
||||||
nextVisitNodes.addAll(getEdges(firstNode).stream()
|
nextVisitNodes.addAll(getEdges(firstNode).stream()
|
||||||
.map(x -> x.getNodeB())
|
.map(x -> x.getOtherNode(firstNode))
|
||||||
.filter(x -> !allVisitedNodes.contains(x))
|
.filter(x -> !allVisitedNodes.contains(x))
|
||||||
.collect(Collectors.toList()));
|
.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()
|
allVisitedNodes.add(nextNode);
|
||||||
.map(x -> x.getNodeB())
|
|
||||||
|
nextVisitNodes.addAll(getEdges(nextNode).stream()
|
||||||
|
.map(x -> x.getOtherNode(nextNode))
|
||||||
.filter(x -> !allVisitedNodes.contains(x))
|
.filter(x -> !allVisitedNodes.contains(x))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
nextVisitNodes.remove(0);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println(allVisitedNodes.size());
|
||||||
|
System.out.println(nodes.size());
|
||||||
|
|
||||||
return allVisitedNodes.size() == nodes.size();
|
return allVisitedNodes.size() == nodes.size();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Diese Klasse representiert das Spielfeld. Sie beinhaltet das Hintergrundbild, welches mit Perlin noise erzeugt wurde,
|
* 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() {
|
private void generateEdges() {
|
||||||
|
|
||||||
List<Node<Castle>> castleNodes = castleGraph.getNodes();
|
List<Node<Castle>> castleNodes = castleGraph.getNodes();
|
||||||
|
/*
|
||||||
for (int i = 0; i < castleNodes.size(); i++) {
|
for (int i = 0; i < castleNodes.size(); i++) {
|
||||||
if (i == castleNodes.size() - 1)
|
if (i == castleNodes.size() - 1)
|
||||||
castleGraph.addEdge(castleNodes.get(i), castleNodes.get(0));
|
castleGraph.addEdge(castleNodes.get(i), castleNodes.get(0));
|
||||||
else
|
else
|
||||||
castleGraph.addEdge(castleNodes.get(i), castleNodes.get(i+1));
|
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.
|
* 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, b);
|
||||||
testGraph.addEdge(a, c);
|
testGraph.addEdge(a, c);
|
||||||
testGraph.addEdge(c, d);
|
testGraph.addEdge(d, c);
|
||||||
|
|
||||||
assertTrue(testGraph.allNodesConnected());
|
assertTrue(testGraph.allNodesConnected());
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue