如何在类之间创建正确的关系

时间:2015-03-09 19:27:59

标签: java class

我有一种感觉,这个问题将成为我过于复杂的常识。我正在研究一个随机迷宫生成程序,所以给定一个宽度,高度和最大路径长度,它会随机选择一个起始点并生成一条路径,直到达到最大路径长度或它死角/卡住,然后它将为另一条路径选择一个新的起点并重复,直到整个网格被填满。我只是为练习创造它。

我有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;
}

2 个答案:

答案 0 :(得分:0)

迷宫模型很烦人,因为它们要么围绕房间或墙壁构建,要么在不同时间需要不同的模式,无论哪种方式,你最终会得到棘手的代码或冗余数据以及难以记录的记录保存

Thad说道,路径是移动的序列/列表(北,南,东西),迷宫是从坐标到细胞/房间的数组(或地图),而细胞有移动的布尔墙,所以{ East: true, North: false, South, false, West: true}

或者您可以将其设为无向图。

答案 1 :(得分:0)

我所要做的就是在我的Maze Class中创建Path和Point类的内部类。这样他们就可以获得Maze的所有实例数据,而无需通过他们的构造函数传递它。