我有一种感觉,这个问题将成为我过于复杂的常识。我正在研究一个随机迷宫生成程序,所以给定一个宽度,高度和最大路径长度,它会随机选择一个起始点并生成一条路径,直到达到最大路径长度或它死角/卡住,然后它将为另一条路径选择一个新的起点并重复,直到整个网格被填满。我只是为练习创造它。
我有3个课程,但我想我真的不明白他们应该如何互动,或者我应该如何让他们互动以获得最佳表现等等。有一件事,我只知道是可怕的做法。由于我的Path和Point类必须在Maze类中创建的Points网格上运行,因此我传递了Path和Point的构造函数。它已经工作了......但我刚刚意识到,在这样做的过程中,我得到了一个看似无限的循环,我创建了一个网格,并为该网格创建了所有的点,并在这些点上传递了一个数组点数,每个点都会永远传递一个点数组。
我想过让Path和Point扩展迷宫,但我不认为这是正确的关系。我用Google搜索接口和抽象类,看看是否可能是我想要的,但那些看起来也不正确。
迷宫构造函数:
public class Maze
{
private int fileNum = 0;
private Random rand = new Random();
private Point[] grid;
private int width, height;
private int pathLength;
private int curLoc;
private boolean debug, toTxt, toPng, hasValidNewHead = true;
public int frameNum = 0;
public int lastPercent = 0;
public Maze(int iWidth, int iHeight, int iPathLength, boolean d, boolean txt, boolean png)
{
width = iWidth;
height = iHeight;
pathLength = iPathLength;
grid = new Point[width * height];
debug = d;
toTxt = txt;
toPng = png;
}
路径构造函数:
public class Path
{
private Random rand = new Random();
private Maze maze;
private int length, maxLength, lastDir, height, width;
private int curLoc;
private boolean generating;
private Point[] grid;
private boolean debug, toTxt, toPng;
public Path(int head, int gridWidth, int gridHeight, int ml, Point[] iGrid, Maze m, boolean d, boolean txt, boolean png)
{
maze = m;
generating = true;
lastDir = -1;
length = 1;
grid = iGrid;
curLoc = head;
height = gridHeight;
width = gridWidth;
maxLength = ml;
debug = d;
toTxt = txt;
toPng = png;
}
点构造函数:
public class Point
{
private int x, y, width, height;
private Point[] grid;
private int type, curLoc;
public Point(int iX, int iY, int w, int h, Point[] iGrid)
{
x = iX;
y = iY;
width = w;
height = h;
grid = iGrid;
curLoc = Arrays.asList(grid).indexOf(this);
type = 0;
}
答案 0 :(得分:0)
迷宫模型很烦人,因为它们要么围绕房间或墙壁构建,要么在不同时间需要不同的模式,无论哪种方式,你最终会得到棘手的代码或冗余数据以及难以记录的记录保存
Thad说道,路径是移动的序列/列表(北,南,东西),迷宫是从坐标到细胞/房间的数组(或地图),而细胞有移动的布尔墙,所以{ East: true, North: false, South, false, West: true}
。
或者您可以将其设为无向图。
答案 1 :(得分:0)
我所要做的就是在我的Maze Class中创建Path和Point类的内部类。这样他们就可以获得Maze的所有实例数据,而无需通过他们的构造函数传递它。