1
0
Fork 0
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

97 Zeilen
2.6 KiB
Java

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package dungeon;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import main.Counter;
import main.Dice;
import org.jgraph.graph.DefaultEdge;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.SimpleGraph;
/**
*
* @author MrMcX
*/
public class Dungeon {
private final List<Room> rooms;
private final LinkedList<Room> toGenerate;
private final Counter counter;
public Dungeon(int size, Type type, Mode mode){
rooms = new ArrayList<>();
toGenerate = new LinkedList<>();
counter = new Counter();
generate(size, type, mode);
}
private void generate(int size, Type type, Mode mode){
toGenerate.add(Room.RandomRoom(true, Exit.Start(), counter, type));
while(!toGenerate.isEmpty() && rooms.size() < size){
Room next;
switch(mode){
case STRAIGHT:
next = toGenerate.getLast();
break;
case BRANCHED:
next = toGenerate.getFirst();
break;
case RANDOM:
next = toGenerate.get(Dice.Roll(toGenerate.size(), 1)-1);
break;
default:
next = toGenerate.getFirst();
break;
}
next.generate(counter, type).stream().forEach((r) -> {
toGenerate.add(r);
});
toGenerate.remove(next);
rooms.add(next);
}
}
@Override
public String toString(){
return rooms.stream().map((r) -> r.toLongString() + "\n").reduce("", String::concat);
}
public UndirectedGraph toGraph(){
UndirectedGraph g = new SimpleGraph(DefaultEdge.class);
rooms.stream().forEach((r) -> {
g.addVertex(r);
});
rooms.stream().forEach((r) -> {
for(Exit e : r.exits){
if(e.isStart || e.room.number == 0 || g.containsEdge(r, e.room)){
continue;
}
g.addEdge(r, e.room, e);
}
});
return g;
}
public static boolean Natural(Type n){
return (n == Type.NATURAL || n == Type.EXP_NATURAL);
}
public static enum Mode{
STRAIGHT,
BRANCHED,
RANDOM,
}
public static enum Type{
NATURAL,
ARTIFICIAL,
EXP_NATURAL,
EXP_ARTIFICIAL
}
}