Breakout : Project Plan and Starting Code
It's not the plan that is important, it's the planning. — Dr. Gramme Edwards
This part is intended to get you thinking about a program without worrying about exactly how it will be implemented.
Specification
Edit the Markdown file, called PLAN.md
, included in your repository in the doc
folder to create a plan of what you intend to build in the next week before writing any code, including:
- at least two Breakout variants you think are interesting and what was interesting about each (you are welcome to look beyond the examples given below and you not committed to doing these variations)
- at least two different abilities for the paddle you want to create, such as:
- making the ball bounce differently depending on where it hits (i.e., the middle third cause the ball to bounce normally, the left and right thirds cause the ball to bounce back in the direction it came)
- "catching" the ball when it hits the paddle and releasing it at a later time when a key is pressed
- warping from one side of the screen to the other when it reaches the edge
- at least three different kinds of blocks you want to create, such as
- taking multiple hits before being destroyed
- dropping a power-up when destroyed
- exploding when destroyed, causing surrounding blocks to be destroyed (or damaged) as well
- at least three different kinds of power ups you want to create, such as:
- making the paddle longer
- giving the player extra bouncing balls to use to clear bricks
- giving the paddle lasers that can be fired to destroy bricks
- or BAD outcomes, like speeding up the ball
- at least four different cheat keys you want to include, such as:
- giving the player extra lives
- dropping a power-up immediately
- clearing the current level
- change the direction of the ball as if it bounced off something
- a general description of the three different levels you intend to build, including
- "pictures" of the different block configurations so it is easy to compare the expected pattern of the bricks in both the text file and running program
- what variations of the basic Breakout gameplay each would have, beyond simply getting "harder" in some parametric way (like a faster ball, smaller paddle, or more blocks)
- at least four different classes you think might be useful to create in this project and at least one method each would have
For each of these points, you can include more than the minimum number asked for because the goal of this plan is partly to get you thinking about what is possible. However, try to keep the ideas within the realm of feasibility, things you think you might actually be able to implement in the next week without stressing yourself out too much. In this sense, this plan's other purpose is to give you a chance to try to estimate what you think you can accomplish in about a week (and roughly 1000 lines of code).
The basic version of this game continues to have appeal because it easily supports complex variants, such as:
- Super Breakout: power ups such as multi-ball triggers and laser shots from the paddle
- Jet Ball: variety of bricks that move in interesting patterns, advertised as "the most challenging brick-breaker in the app store"
- Brick Breaker Escape: includes coins and inventive power-up options and level changes
- Vortex: originally for the iPod, puts the bricks in the middle of the screen with the paddle moving around the outside (like a scroll wheel :)
- Pinball Breakout: this is just one of the many attempts to combine Pinball and Breakout style games
- Bricks n Balls: adds mechanics of aim, tap, and shoot from Bubble Shooter games to create a puzzle game feel
- Centipong: the moving centipede is the bricks and when they are hit it generates more balls
- Brick Breaker Hero: few, but interesting, blocks but incorporates boss enemies as the primary goal
- Devilish: a scrolling version of the game, where clearing the bricks just opens up the passage allowing you to the fly through
- Fairy Treasure: amazingly beautiful, fantasy version of the game with many different kinds of balls, power ups, blocks, and other kinds of obstacles
- Here is a (long) video of the original Arkanoid game play and here is an entire YouTube channel devoted to it!
Study these for their ideas, not their appearance or level of sophistication.
This plan is not intended to be completely binding, but if you plan to make all your levels have something in common and then you never implement that or change what it is completely, then it is not clear you thought about the project in enough detail to make critical choices. Basically, you should put enough thought into this part (perhaps by spending some time working through a tutorial first) to show you did not simply dash off something just to meet a deadline. If you can change everything later, then there is no point to the plan. Any changes to this Plan should be addressed in your DESIGN document and Analysis Journal at the end of the project (note, adding descriptive comments while you write the code for it can be helpful for remembering your thought process and other details about the change so you can explain it later).
Starting to Code
The goal of this part is simply to make sure your development environment is setup correctly and you are able to make progress on the project.
- Show a ball bouncing around within the window
- Allow the player to move a paddle (not necessarily staying within the window)
- Display a block somewhere within the window (not necessarily read from a file)
- The ball should interact with the paddle and the block in different ways (not necessarily bouncing)
Resources