Java Reference
In-Depth Information
The method checks to see if the two shapes intersect. The
RectangularShape
class has
an
intersects
method that takes as input an object of type
Rectangle2D
and checks if the
two shapes intersect. The
getBounds
method returns the bounds of a
RectangularShape
as an object of type
Rectangle2D
.
The updated code for the
BreakoutPanel
class is shown next.
public
BreakoutPanel ()
{
...
public
BreakoutPanel ()
{
...
timer =
new
javax . swing .Timer(10 ,
new
TimeListener () ) ;
...
class
TimeListener
implements
ActionListener
{
public void
actionPerformed(ActionEvent e)
{
Ball newBall = ball . getVirtualBall () ;
if
(newBall . intersects (paddle))
{
ba l l . goUp ( ) ;
if
(newBall . getX() + newBall . getWidth() / 2
<
paddle .getX() +
paddle . getWidth() / 2)
{
ball . goLeft () ;
}
else
{
ball . goRight () ;
}
}
else if
(ball.getY()
>
paddle .getY()
−
paddle . getHeight () )
{
System. exit(0) ;
}
ball .move() ;
repaint () ;
}
}
}
Note that the
TimeListener
class is now an inner class instead of a local anonymous
class. The reason is that the class is becoming large and we decided to give it a name.
Creating a large local anonymous class can put extra burden on someone who tries to
understand how the program works. The
actionPerformed
method creates a virtual ball
and checks to see if the virtual ball intersects the paddle. If it does, it first changes the
ball direction to up. Since the ball has hit the panel, it should not continue going down.
Next, the program checks to see if the ball intersects the left or right part of the paddle.
The expression
newBall.getX() + newBall.getWidth()/2
gives the
X
value of the middle
of the ball, while the expression
paddle.getX() + paddle.getWidth() / 2
returns the
X
coordinate of the middle of the paddle. If the virtual ball is predominantly in the left part
of the paddle, then the ball goes next to the left. Conversely, if the virtual ball touches the
right part of the paddle, then the ball bounces to the right. We have also added a simple
code that checks if the ball is below the paddle. For now, this code simply exits the program.
If we run and compile the program, we will see that the ball now bounces off the paddle.
If we are unable to catch the ball, then the game ends. In order to prevent the game from
ending, we will need to keep track of the number of lives.