Breakout
Objectives
- Read and understand all of the Breakout source code from Lecture 2.
- Add a powerup to the game that spawns two extra
Balls. - Grow and shrink the Paddle when the player gains enough points or loses a life.
- Add a locked
Brickthat will only open when the player collects a second new powerup, a key, which should only spawn when such aBrickexists and randomly as per theBallpowerup.
Demo
by Edward Kang
Getting Started
Download the distro code for your game from cdn.cs50.net/games/2018/x/projects/2/breakout.zip and unzip breakout.zip, which should yield a directory called breakout.
Then, in a terminal window (located in /Applications/Utilities on Mac or by typing cmd in the Windows task bar), move to the directory where you extracted breakout (recall that the cd command can change your current directory), and run
cd breakout
Break(out) a Leg!
Welcome to your third assignment! By now, we’ve gotten our feet wet with states, randomization, and much more; this time, we’ll be diving in a little bit more and adding some new features entirely!
Specification
- Add a
Powerupclass to the game that spawns a powerup (images located at the bottom of the sprite sheet in the distribution code). ThisPowerupshould spawn randomly, be it on a timer or when the Ball hits aBlockenough times, and gradually descend toward the player. Once collided with thePaddle, two moreBalls should spawn and behave identically to the original, including all collision and scoring points for the player. Once the player wins and proceeds to theVictoryStatefor their current level, theBalls should reset so that there is only one active again. - Grow and shrink the
Paddlesuch that it’s no longer just one fixed size forever. In particular, thePaddleshould shrink if the player loses a heart (but no smaller of course than the smallest paddle size) and should grow if the player exceeds a certain amount of score (but no larger than the largestPaddle). This may not make the game completely balanced once thePaddleis sufficiently large, but it will be a great way to get comfortable interacting withQuads and all of the tables we have allocated for them inmain.lua! - Add a locked
Brick(located in the sprite sheet) to the level spawning, as well as a key powerup (also in the sprite sheet). The lockedBrickshould not be breakable by the ball normally, unless they of course have the keyPowerup! The keyPowerupshould spawn randomly just like theBallPowerupand descend toward the bottom of the screen just the same, where thePaddlehas the chance to collide with it and pick it up. You’ll need to take a closer look at theLevelMakerclass to see how we could implement the lockedBrickinto the level generation. Not every level needs to have lockedBricks; just include them occasionally! Perhaps make them worth a lot more points as well in order to compel their design. Note that this feature will require changes to several parts of the code, including even splitting up the sprite sheet intoBricks!
Errata
ParticleSystem:setAreaSpreadhas been renamed toParticleSystem:setEmissionAreain LÖVE 11.0.love.filesystem.existshas been renamed tolove.filesystem.getInfoin LÖVE 11.0.love.audio.newSourcenow must take a second argument ('static'or'stream'), whereas previously it was optional.
CS50 Games exists only in archive form, as of 1 July 2024. While you cannot submit this project for credit any longer, it is a great exercise to test your understanding of the course material.