Java图形-绘制线条

Java图形-绘制线条,java,graphics,drawing,line,coordinates,Java,Graphics,Drawing,Line,Coordinates,我在Java程序中绘制线条时遇到一些问题 我想玩一些迷宫生成算法,但目前正在努力建立一个董事会,以可视化的过程和创造的迷宫。以下是我当前的设置: 我生成了一个50 x 25的网格(2D数组),每个块宽20像素,高20像素,现在我要为每个网格将四面墙都画成线 我通过将for循环值(用于遍历数组)乘以块大小来获得每个块的起始x和y坐标。例如,如果我当前正在查看网格[2][3],那么像素坐标将为(40,60)。我的问题是,没有绘制南墙和东墙,在我的程序中没有显示任何内容,即使正在生成坐标,但是正在绘制

我在Java程序中绘制线条时遇到一些问题

我想玩一些迷宫生成算法,但目前正在努力建立一个董事会,以可视化的过程和创造的迷宫。以下是我当前的设置:

我生成了一个50 x 25的网格(2D数组),每个块宽20像素,高20像素,现在我要为每个网格将四面墙都画成线

我通过将for循环值(用于遍历数组)乘以块大小来获得每个块的起始x和y坐标。例如,如果我当前正在查看网格[2][3],那么像素坐标将为(40,60)。我的问题是,没有绘制南墙和东墙,在我的程序中没有显示任何内容,即使正在生成坐标,但是正在绘制我的北墙和西墙

如果我想画南墙,我试图通过如下调整位置来获得墙坐标,块的起始x和y坐标是(40,60)。那么应该用来绘制南墙的两点应该是,(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);

            }
        }
    }
}

我暗自怀疑我正在做一些非常愚蠢的事情,或者遗漏了一些非常小的事情,如果能得到任何帮助,我将不胜感激。

renderBoard(Graphics g g)
中,
x
y
的值是什么?这些是数组的维度,x=50,y=25。在构建行时:
新行(i,j,Walls.NORTH,blockSize);
是否应该将
i
j
作为参数传递,或者
i*blockSize
j*blockSize
作为参数传递?请注意,在
行中,与
其他if
(s)语句相比,
开关将看起来整洁得多.
enum
switch
语句兼容。@copeg我在Line类构造函数中处理乘法,@Bruce Wayne我将把它切换为switch-Case语句,我同意你的说法,它看起来会更整洁
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;

        }
    }
}