Eric Roberts, eroberts@cs.stanford.edu, Stanford University
Summary | This assignment plays the classic video arcade game of Breakout, in which the player bounces a ball against rows of bricks at the top of the screen to dislodge them one at a time. The name of the game arises from the fact that the ball will eventually break through the line of bricks and bounce off the top wall, clearing a large number of bricks before the ball returns to the paddle. |
Topics | Basic coding: using the acm.graphics
package, nested for loops to position the rows of bricks,
simple animation of a ball based on applying dx and dy displacements
at uniform time steps, if tests to check for bounces and collisions.
Interestingly, this assignment requires no arrays or compound data structures.
|
Audience | Early CS1. At Stanford, Breakout was the second Java assignment. |
Difficulty | Surprisingly straightforward, even though the assignment requires a more code than the average assignment at the beginning of CS1. Teaching assistants at Stanford reported that the students just nailed this assignment. It was also used successfully at Grand Valley State University and Alfred State College. |
Strengths | The real strength of this assignment is that students
are able to create an enjoyable and eminently playable game in the first few weeks of
the term, which serves to increase their excitement about the material.
It also provides students with an opportunity to practice placing graphical objects
on the screen, which prepares them for other assignments involving the
acm.graphics package.
|
Weaknesses | This project seems to have worked very well at the
three very different institutions at which it was tried (a research university,
a large public university, and a two-year community college). The only weakness
I can think of is that the animation can be jerky when the program is running
in a browser on a slow machine. This problem does not seem to arise when it is
run as an application.
|
Dependencies | Requires the use of the acm.graphics
package developed by the Java Task Force.
|
Variants | Students were encouraged to extend the assignment in
a variety of ways, including the following:
|
This assignment plays the classic arcade game of Breakout.
In Breakout, the initial configuration of the world appears as shown on the right.
The colored rectangles in the top part of the screen are bricks, and the slightly
larger rectangle at the bottom is the paddle. The paddle is in a fixed
position in the vertical dimension, but moves back and forth across the screen
along with the mouse until it reaches the edge of its space.
A complete game consists of three turns.
On each turn, a ball is launched from the center of the window toward the
bottom of the screen at a random angle.
The ball bounces off the paddle and the walls of the world, in accordance
with the physical principle generally expressed as the angle of incidence
equals the angle of reflection (which turns out to be very easy to implement).
Thus, after two bouncesone off the paddle and one off the right wallthe
ball might have the trajectory shown in the second diagram.
(Note that the dotted line is there only to show the balls path and wont
actually appear on the screen.)
As you can see from the second diagram, the ball is about to collide with one of the bricks on the bottom row. When that happens, the ball bounces just as it does on any other collision, but the brick disappears. The third diagram shows what the game looks like after that collision and after the player has moved the paddle to put it in line with the oncoming ball.
The play on a turn continues in this way until one of two conditions occurs:
After all the bricks in a particular column have been cleared, a path will open to the top wall. When this delightful situation occurs, the ball will often bounce back and forth several times between the top wall and the upper line of bricks without the user ever having to worry about hitting the ball with the paddle. This condition is a reward for breaking out and was the inspiration for the name of the game. The diagram on the right shows the situation shortly after the first ball has broken through the wall. That ball will go on to clear several more bricks before it comes back down the open channel.