繁体   English   中英

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

[英]How to create the correct relationship between classes

我觉得这个问题将使我变得过于复杂。 我正在研究一个随机的迷宫生成程序,因此在给定宽度,高度和最大路径长度的情况下,它将随机选择一个起点并生成一条路径,直到达到最大路径长度或死角/卡住为止,然后将为另一条路径选择一个新的起点,然后重复进行直到整个网格被填满。 我只是为练习创建它。

我有3个班级,但是我想我并不真正了解他们应该如何互动,或者我应该如何使其互动以获得最佳性能。 我只知道一件事,那就是可怕的做法。 由于我的Path和Point类必须在Maze类中创建的Points网格上进行操作,因此我将Path和Point的构造函数传递给Points of Points数组。 它“有效” ...但是我只是意识到这样做,我得到了一个看似无限的循环,其中我创建了一个网格,并为该网格创建了所有点,在这些点中,我传递了一个点数组,每个点这些点中的一部分将永远传递一个点数组。

我曾考虑过使“路径”和“点”扩展迷宫,但我认为这不是正确的关系。 我在接口和抽象类上进行了搜索,以查看是否这正是我想要的,但是这些似乎也不对。

迷宫构造函数:

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}

或者,您可以使其成为无向图。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM