我在Java程序中绘制线条时遇到了一些问题。
我希望使用一些迷宫生成算法,但我目前正在努力设置一个可视化过程和创建迷宫的板。以下是我目前的设置:
我生成一个50 x 25的网格(2D数组),每个网格宽20像素,高20像素,现在我想将每个网格绘制成四条墙。
通过将for循环值(用于遍历数组)乘以块大小,我得到每个块的起始x和y坐标。例如,如果我当前正在查看grid [2] [3],那么像素坐标将是(40,60)。我的问题是南墙和东墙没有被绘制,即使生成坐标,我的程序中也没有显示任何内容,但是我的北墙和西墙正在被绘制。
我试图通过如下调整位置来获得墙壁坐标,如果我想绘制南墙并且块的起始x和y坐标是(40,60)。那么应该用来绘制南墙的2个点应该是(40,80)和(60,80)。
以下是我目前使用的渲染方法:
private void renderBoard(Graphics g) {
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
Node node = grid[i][j];
// Draw the Node's Background
g.setColor(Color.BLACK);
g.fillRect(i * blockSize, j * blockSize, blockSize, blockSize);
// Draw the Node's North Wall
if (node.walls.contains(Walls.NORTH)) {
Line line = new Line(i, j, Walls.NORTH, blockSize);
// System.out.println("Point1 (X1: " + line.x1 + " Y1: " + line.y1 + ") Point2 (X2: " + line.x2 + " Y2: " + line.y2 + ")");
g.setColor(Color.WHITE);
g.drawLine(line.x1, line.y1, line.x2, line.y2);
}
// Draw the Node's South Wall
if (node.walls.contains(Walls.SOUTH)) {
Line line = new Line(i, j, Walls.SOUTH, blockSize);
g.setColor(Color.WHITE);
g.drawLine(line.x1, line.y1, line.x2, line.y2);
}
}
}
}
再次绘制北墙,而南墙则没有画出任何东西。我最初认为这可能是因为我以错误的顺序传递了两个for循环变量。但这似乎没有改变任何东西
这是我的Line Class:
class Line {
// Current X Y Coordinates in the Grid
private int x;
private int y;
// The Lines Start and End Coordinates
public int x1, x2;
public int y1, y2;
public Line(int x, int y, Walls wall, int blocksize) {
// Here we get the pixel coordinate based off of the current Array Position
this.x = (x * blocksize);
this.y = (y * blocksize);
switch(wall) {
case NORTH:
x1 = this.x;
y1 = this.y;
x2 = this.x + blocksize;
y2 = this.y;
break;
case SOUTH:
x1 = this.x;
y1 = this.y + blocksize;
x2 = this.x + blocksize;
y2 = this.y + blocksize;
break;
case EAST:
x1 = this.x + blocksize;
y1 = this.y;
x2 = this.x + blocksize;
y2 = this.y + blocksize;
break;
case WEST:
x1 = this.x;
y1 = this.y;
x2 = this.x;
y2 = this.y + blocksize;
break;
}
}
}
我有一种潜在的怀疑,我正在做一些非常愚蠢的事情,或者缺少一些非常小的东西,任何帮助都会很乐意欣赏