CompSci 6
Fall 2008
Program Design and Analysis

Arkanoid

Breakout is a popular extension to the game of Pong that was described at the time of its invention as "the ultimate in Pong". Breakout was designed by Steve Jobs, current CEO of Apple Computer. But it was Job's friend Steve Wozniak who did most of the work on Breakout, not Jobs. However, when Jobs received a $5,000 bonus for the work, he told Wozniak it was only $700 and gave Wozniak his "half" --- $350. Years later this truth would come out and it would add to the already increasing friction between the two which eventually lead to Steve Wozniak quitting Apple.

However, people eventually got bored of simple Breakout and wanted something more --- thus was born Arkanoid! Arkanoid maintains the basic premise of Breakout, to destroy all of the blocks on the board by bouncing a ball off of them, but adds anything else from popular video games in the form of power-ups. Some blocks drop power-ups when they are destroyed which, when caught by the players paddle, affect the game in various ways: making the paddle longer, speeding up the ball, giving the player extra bouncing balls to use to break the blocks, giving the player lasers with which to destroy the blocks, giving the player a way to escape the level, or almost anything else you can think of. Blocks can also have other different properties, such as the number of hits needed to destroy them, their worth, or again, almost anything else you can think of.

Specification

In Breakout a ball bounces around the screen and destroys blocks as it bounces into them. The ball can bounce off of the top and sides of the screen; however, if the ball moves off the bottom of the screen, the player loses a life and the ball is reset to the center of the screen. The player controls a paddle at the bottom of the screen to block the ball from moving off the bottom. If the player misses blocking the ball three times, the game should end and display a message that the player is the loser. If all the blocks are cleared from the screen, the level should end and a new one loaded (with a different configuration of blocks). If the player clears a number of levels, the game ends with a message that declares the player as a winner.

You will be given a basic version of the game in which a ball starts in the middle of the screen and bounces around, never stopping. If it hits the paddle, it bounces off and if it hits the block, the block disappears. You must make it into a complete game with at least three different brick types, three different power-up types, and three different levels (each of which has a different starting configuration of the blocks). Each configuration of blocks you use must either be determined algorithmically using one or more loops or read from a file.

You should also include indicators that show how many lives the player has remaining and how many blocks have been cleared (i.e., a score).

Note, you will have to spend some time choosing fixed values for the size of the paddle, speed of the ball, and size of the blocks in order to ensure the game is fun to play. Include some discussion of why you chose the values you did in your code's comments. To make each level more challenging, you might make each block worth more points, each pattern of blocks more convuluted, or the ball move faster each time. In this case, it may no longer be possible to win the game (or there may be a fixed number of levels). To implement levels successfully, you will need to be very careful about defining variables to control different values in your game (e.g., ball's velocity or score for each block).

Extra Credit

Once you have the basic game working, you can add a variety of features to make your game more fun to play (listed below roughly in order of difficulty):

For other variations of Breakout, consider these examples: Worms Breakout, Vortex, Circus Atari, or Ballistik.

Note, to expect a grade in the A range, you should implement at least two of the extra credit options listed above. Please include, in your README, a description of the extra credit features you attempted so that there is less chance we miss them when we are grading your assignment.

Submitting Your Work

When you are satisfied you have completed the problems above, you should electronically submit your project through Eclipse. A submission is not considered complete unless it includes all the Java code for the project (both what you have written and the code provided when you downloaded the project) and a README file as described here.