@Override
    public boolean[][] generateMaze() {
        List<Point> list = new ArrayList<Point>();
        int last; 
        
        this.maze[1][1] = false;
        last = this.addNeighbours(new Point(1,1), list);
        while(!list.isEmpty()){
            
            int curi = this.rnd.nextInt() % last;
            curi = list.size() - ((curi < 0 ? -curi : curi) +1);
            Point cur = this.getTargetBlock(list.get(curi));
            if(cur != null){
                this.maze[cur.x][cur.y] = false;
                this.maze[list.get(curi).x][list.get(curi).y] = false;
                last = this.addNeighbours(cur, list);
                if(last == 0)
                    last ++;
            }
            list.remove(curi);
        }
        
        return this.maze;
    }