Рисование лабиринта с использованием Java GUI - прямоугольники печатаются один над другим - PullRequest
0 голосов
/ 23 января 2012

Учитывая следующий код:

private void drawMaze(PaintEvent e)
{
        Graph maze = new Graph();
        maze.generateMaze(25);

        int i = 0;
        int level = 25;

    e.gc.setAntialias(SWT.ON);
    e.gc.setBackground(new Color(e.display, 150, 150, 150));
    e.gc.setLineWidth(12);

    while (i < level)
    {
        Connector connector = maze.getEdgeConnectorByIndex(i);
        if (connector instanceof Door)
            {
               Room room1 = ((Door)connector).getFirstRoom();
               Room room2 = ((Door)connector).getSecondRoom();
               int x = room1.getXcoordinate()+10;
               int y = room1.getYcoordinate()+10;

               System.out.println(x);
               System.out.println(y);

               e.gc.fillRectangle(x,y,100,79);
               e.gc.setBackground(e.display.getSystemColor(SWT.COLOR_BLUE));
               e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_GREEN));  
               e.gc.drawLine(x,y, 280+100,20); 

            }
        i++;
    }

}

класс BasicShapes

public class BasicShapes {



    private Shell shell;

    public BasicShapes(Display display) {

        shell = new Shell(display);

        shell.addPaintListener(new ExmaplePaingListener());

        shell.setText("Basic shapes");
        shell.setSize(1000, 700);
        shell.setLocation(50, 50);
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    private class ExmaplePaingListener implements PaintListener {

        public void paintControl(PaintEvent e) {

            // drawRectangles(e);
            drawMaze(e);
            e.gc.dispose();
        }
    }



...

}

Мне нужно нарисовать лабиринт с разделителями в виде Дверь / Стена между каждыми двумя ячейками.В методе drawMaze () я сначала создаю граф G = (V, E) с вершинами и ребрами (vertices = комнаты, ребра = Door / Wall), а затем я хочу его использовать.

В цикле while я запускаю цикл по количеству ребер и каждый раз получаю координаты двух комнат (в плоскости x, y) и хочу напечатать 1-ую комнату ссоединитель (стена / дверь) с другой комнатой, но каждый раз, когда первая комната печатается на другой (и на остальных краях также).

Как это исправить?

С уважением, Рон

...