Completed Second Step of Maze Generation

Completed the second step of maze generation. In this step, a graph is
built that describes which rooms can be connected to each other by
doorways. A maze is created by removing nodes (rooms) from the graph.
The algorithm is incomplete, but it already produces interesting mazes
comparable to DD's hand-made mazes.

A few details for the future:
1. Doorways are currently carved into walls at default locations. This
is just for testing and placement should be improved later. Some
doorways should be removed and redundant doorways should be possible.
2. The size of a section should be assessed and the section should be
discarded if it has too few rooms.
3. An NPE occurs every so often when a maze is generated. It's possible
that it happens because of removing a node from the graph that is
coincidentally the current node for LinkedList's iterator. The solution
would be to add nodes to a list and defer removals until after the
iteration is done.
This commit is contained in:
SenseiKiwi
2013-12-28 22:49:11 -04:00
parent 81bac5d1c2
commit 31f0c1ca0c
9 changed files with 898 additions and 99 deletions

View File

@@ -4,35 +4,21 @@ import StevenDimDoors.mod_pocketDim.Point3D;
public class DoorwayData
{
public final char X_AXIS = 'X';
public final char Y_AXIS = 'Y';
public final char Z_AXIS = 'Z';
public static final char X_AXIS = 'X';
public static final char Y_AXIS = 'Y';
public static final char Z_AXIS = 'Z';
private RoomNode head;
private RoomNode tail;
private Point3D minCorner;
private Point3D maxCorner;
private char axis;
public DoorwayData(RoomNode head, RoomNode tail, Point3D minCorner, Point3D maxCorner, char axis)
public DoorwayData(Point3D minCorner, Point3D maxCorner, char axis)
{
this.head = head;
this.tail = tail;
this.minCorner = minCorner;
this.maxCorner = maxCorner;
this.axis = axis;
}
public RoomNode head()
{
return head;
}
public RoomNode tail()
{
return tail;
}
public Point3D minCorner()
{
return minCorner;