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.
37 lines
623 B
Java
37 lines
623 B
Java
package StevenDimDoors.experimental;
|
|
|
|
import StevenDimDoors.mod_pocketDim.Point3D;
|
|
|
|
public class DoorwayData
|
|
{
|
|
public static final char X_AXIS = 'X';
|
|
public static final char Y_AXIS = 'Y';
|
|
public static final char Z_AXIS = 'Z';
|
|
|
|
private Point3D minCorner;
|
|
private Point3D maxCorner;
|
|
private char axis;
|
|
|
|
public DoorwayData(Point3D minCorner, Point3D maxCorner, char axis)
|
|
{
|
|
this.minCorner = minCorner;
|
|
this.maxCorner = maxCorner;
|
|
this.axis = axis;
|
|
}
|
|
|
|
public Point3D minCorner()
|
|
{
|
|
return minCorner;
|
|
}
|
|
|
|
public Point3D maxCorner()
|
|
{
|
|
return maxCorner;
|
|
}
|
|
|
|
public char axis()
|
|
{
|
|
return axis;
|
|
}
|
|
}
|