Brick Breaker / Breakout
Introduction
I enjoyed recreating Brick Breaker from a set of games called PC Arcade on an IBM PC 8086 that I played as a kid. I implemented my own version as part of learning PyGame. (I also built a pure HTML implementation.)
Downloads
Source
Download: brickbreaker.py
Instructions to run the code are at the top of the file, in comments.
Code is distributed under the MIT License.
Behavior
Move the paddle with left/right (or < and >). You can make fine paddle movements by holding the shift key. 'p' or Space (un)pauses the game. 'q' or Escape quits the game.
Different areas of the paddle cause the ball to bounce differently. Most of the paddle bounces as expected: symmetrically. But if the ball bounces on the close corner, it will bounce back to where it came from. If it bounces on the far corner, it will accelerate. A fast-moving ball can be slowed down again by bouncing it on the center of the paddle.
Defeating a level gains you a ball, but the game speeds up by 10%. There are a total of 21 levels. In the last 3 levels, the bricks are invisible.
Usage
You can play the game by (double-)clicking on it. If you are command line inclined, however, you can play around with the following options.
usage: brickbreaker [-h] [--nballs NBALLS] [--lives LIVES] [--level LEVEL] [--rows ROWS] [--bricks BRICKS] [--paddle-width PADDLE_WIDTH] [--speed SPEED] [--move MOVE] [--infinite] [--auto] optional arguments: -h, --help show this help message and exit --nballs NBALLS # of balls --lives LIVES # of lives --level LEVEL level to start at --rows ROWS number of rows --bricks BRICKS number of bricks in a row --paddle-width PADDLE_WIDTH width of a paddle in pixels --speed SPEED ball speed --move MOVE paddle move speed --infinite infinite lives --auto self play in-game keys: left and right : move paddle left and right < and > : move paddle left and right shift + <move> : move paddle a little bit space or p : (un)pause game esc or q : quit game
Acknowledgements
Many thanks to Maarten Hulshoff for the fond memories and for testing.