Java Graphics - 绘制线

时间:2015-05-26 17:20:50

标签: java graphics drawing line coordinates

我在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;

        }
    }
}

我有一种潜在的怀疑,我正在做一些非常愚蠢的事情,或者缺少一些非常小的东西,任何帮助都会很乐意欣赏

0 个答案:

没有答案