public BrickBreaker() {
        panel = new BrickBreakerPanel();
        //build the frame and attach everything to it.
        frame = new GameFrame(
                "Brickbreaker by Jeremy",
                GAMEHEIGHT,
                GAMEWIDTH,
                new BrickBreakerMenu(
                        GAMEWIDTH + BrickBreakerPanel.PANELWIDTH,
                        BrickBreakerMenu.MENUHEIGHT,
                        this),
                panel,
                this);
        gameActive = false;
        gameTimer = new Timer();
        // This section creates all of the default game objects which includes
        // bricks and a paddle.
        // Use absolute positioning for the game objects
        this.setLayout(null);

        //make a paddle
        paddle = new Paddle();
        add(paddle);
        paddle.repaint();
        //make the bricks
        bricks = new LinkedList<Brick>();
        for (int row = 0; row < BRICKROWS; row++) {
            for (int col = 0; col < BRICKCOLS; col++) {
                bricks.add(new Brick(col * Brick.BRICKWIDTH,
                        row * Brick.BRICKHEIGHT + BRICKHEADSPACE,
                        Color.RED));
            }
        }
        for (Brick x:bricks) {
            add(x);
            x.repaint();
        }
        balls = new LinkedList<Ball>();
        // Set up the mouse listener to place the game ball. The on-click sets
        // the ball's location and starts the game
        this.addMouseListener(
                new MouseListener() {
                    public void mouseClicked(final MouseEvent arg0) { return; }
                    public void mouseEntered(final MouseEvent arg0) { return; }
                    public void mouseExited(final MouseEvent arg0) { return; }
                    public void mousePressed(final MouseEvent arg0) {
                        if (arg0.getButton() != MouseEvent.BUTTON1) {
                            return; //only care about button 1
                        }
                        // create the new ball at the click location.
                        Ball newBall =
                                new Ball(arg0.getX() - Ball.DEFAULTRADIUS,
                                        arg0.getY() - Ball.DEFAULTRADIUS,
                                        Ball.DEFAULTRADIUS);
                        balls.add(newBall);
                        add(newBall);
                        newBall.repaint();
                        startGame();
                    }
                    public void mouseReleased(final MouseEvent arg0) { return; }
                }
        );
    }