Почему мой 2D лабиринт не окрашивается с помощью JComponent? - PullRequest
0 голосов
/ 10 октября 2018

ОБНОВЛЕНИЕ: Я разобрался с проблемой и выписал ее ниже. Если вы хотите увидеть полный совместимый код здесь, на GitHub: https://github.com/scohen40/cohen-mco364-fall-2018/tree/mazeGUI/src/main/java/cohen/maze

У меня есть 2D Array of Cells,каждый с 4 стенами.Мой класс generateMaze () начинается в произвольной точке и выкапывает лабиринт.Эта часть работает правильно, и когда я распечатываю лабиринт в консоли, все в порядке.
Моя следующая цель - раскрасить лабиринт с помощью JComponent в JPanel.Проблема в том, что я получаю только одну толстую коробку в верхнем левом углу.Вот код рисования:

public class AnimatedMaze extends JComponent {
private Maze maze;
private int componentHeight;
private int componentWidth;
private int seventhHeight;
private int seventhWidth;

protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    componentHeight = this.getHeight();
    componentWidth = this.getWidth();
    seventhHeight = componentHeight/7;
    seventhWidth = componentWidth/7;

    maze = new Maze(7, 7);
    g.setColor(Color.black);

    paintMaze(g);

}

/**
 * The paintMaze() method runs through the generated maze and paints the existing walls.
 * @param g
 */
void paintMaze(Graphics g) {
    for (int x = 0; x < maze.getHeight(); x++) {
        System.out.println("|");
        for (int y = 0; y < maze.getWidth(); y++) {
            Cell current = maze.getMaze()[x][y];
            if(current.isWestWall()) {
                g.drawLine(x, y, x, y + seventhHeight);
            }
            if(current.isNorthWall()){
                g.drawLine(x, y,x + seventhWidth, y);
            }
            if(current.isEastWall()) {
                g.drawLine(x + seventhWidth, y, x+ seventhWidth, y + seventhHeight);
            }
            if(current.isSouthWall()) {
                g.drawLine(x, y + seventhHeight, x + seventhWidth, y +seventhHeight);
            }

        }
    }
}

}

Вы можете увидеть в консоли сгенерированный лабиринт, но в JPanel это просто поле.Issue

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Опираясь на ответ Кшиштофа Чихоцки, понял, что координаты работают иначе, чем строки и таблицы.Я поменял x на y и наоборот, после умножения всего на седьмую высоту.Также любые добавления, которые я сделал к любой координате, теперь всегда седьмой высоты, чтобы все было пропорционально.Вот текущий код метода рисования:

    void paintMaze(Graphics g) {
    for (int x = 0; x < maze.getHeight(); x++) {
        System.out.println("|");
        for (int y = 0; y < maze.getWidth(); y++) {
            Cell current = maze.getMaze()[x][y];
            if(current.isWestWall()) {
                g.setColor(Color.black);
                g.drawLine((y+1)*seventhHeight, x*seventhHeight, (y+1)*seventhHeight, x*seventhHeight + seventhHeight);
            }

            if(current.isNorthWall()){
                g.drawLine((y+1)*seventhHeight, x*seventhHeight,(y+1)*seventhHeight + seventhHeight, x*seventhHeight);
            }

            if(current.isEastWall()) {
                g.drawLine((y+1)*seventhHeight + seventhHeight, x*seventhHeight, (y+1)*seventhHeight + seventhHeight, x*seventhHeight + seventhHeight);
            }

            if(current.isSouthWall()) {
                g.drawLine((y+1)*seventhHeight, x*seventhHeight + seventhHeight, (y+1)*seventhHeight + seventhHeight, x*seventhHeight +seventhHeight);
            }

        }
    }
}

Вот что теперь происходит: final maze printing picture

0 голосов
/ 11 октября 2018

В вашем коде рисования вам нужно умножить каждую координату x и y на 'седьмую высоту', иначе вы не рисуете с правильными координатами.

...