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

Java 如何在类之间创建正确的关系,java,class,Java,Class,我有一种感觉,这个问题将成为一些真正的常识,我正在过度复杂化。我正在开发一个随机迷宫生成程序,因此给定一个宽度、高度和最大路径长度,它将随机选择一个起点并生成一条路径,直到达到最大路径长度或它的死角/卡住为止,然后它将为另一条路径选择一个新的起点并重复,直到整个网格填满为止。我只是为了练习而做的 我有3门课,但我想我真的不明白他们应该如何互动,或者我应该如何让他们互动以获得最佳表现等等。我只知道有一件事是特别糟糕的。因为我的路径和点类必须在迷宫类中创建的点网格上操作,所以我将路径和点的构造函数传

我有一种感觉,这个问题将成为一些真正的常识,我正在过度复杂化。我正在开发一个随机迷宫生成程序,因此给定一个宽度、高度和最大路径长度,它将随机选择一个起点并生成一条路径,直到达到最大路径长度或它的死角/卡住为止,然后它将为另一条路径选择一个新的起点并重复,直到整个网格填满为止。我只是为了练习而做的

我有3门课,但我想我真的不明白他们应该如何互动,或者我应该如何让他们互动以获得最佳表现等等。我只知道有一件事是特别糟糕的。因为我的路径和点类必须在迷宫类中创建的点网格上操作,所以我将路径和点的构造函数传递给点数组。它是有效的。。。但我刚刚意识到,在这样做的过程中,我得到了一个看似无限的循环,我在其中创建了一个网格,并为该网格创建了所有的点,在这些点中我传递了一个点数组,每个点都传递了一个点数组,永远

我曾想过让路径和点延伸迷宫,但我不认为这是正确的关系。我在谷歌上搜索了接口和抽象类,看看这是否是我想要的,但这些似乎也不正确

迷宫构造器:

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

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

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


或者你可以把它做成一个无向图。

我所要做的就是把路径类和点类做成迷宫类的内部类。这样,他们就可以从迷宫中获得所需的所有实例数据,而无需将其传递给构造函数。

发布代码,而不是描述您的代码。如果发布一些代码片段,显示您现在拥有的内容以及您认为存在的问题,您可能会得到更快的答案。按照你现在的提问方式,人们需要做更多的思考来了解你的意思。对不起,现在编辑@jbnizety你有很多冗余。试着去掉一些。例如,为什么每个类都需要点数组,或者宽度和高度。问题是什么?