Snakes Pygame

Project
Implement parts of a Snakes clone using the Pygame graphical game development library.

Goals

 * learn about using graphics and sounds to create interactive games using the Pygame library
 * practice reading and understanding someone else's code

1. Install the project dependencies
Install Pygame. On Linux, you can use your package manager to install the  package. On Windows and OSX, you can download the appropriate binary from http://www.pygame.org/download.shtml.

2. Download and un-archive the Snakes project skeleton code

 * http://web.mit.edu/jesstess/www/IntermediatePythonWorkshop/Snakes.zip

Un-archiving will produce a  folder containing several Python files.

3. Test your setup
Run the  script in your   directory. A window with a Snakes game should pop up, including square bits of food, the snake you can control, and the enemy snake. Try using the Up and Down keys to move your snake.

1. Familiarize yourself with codebase

 * What is in ? What parts of the game is pygame responsible for?
 * What is in ? What actions can a snake take?
 * What is in ? What determines where food shows up on the screen?

Run the game again. When the good snake runs into the bad snake, you die. Where is the code that checks for collisions between snakes? When a snake eats a piece of food, its tail grows. Where is the code that grows the snake?

2. Give snakes the ability to move in all directions
So far, the snake can only move up or down. Fix this by completing the "Handle the remaining movement keys" TODO in the  method of the   class. Test your changes by re-running the game and moving your snake left and right.

3. Give the game a better background
The game has a pretty boring solid color background. Spice it up by adding a background image. We've provided a sample background image called  in the Snakes directory, but create and add your own if you want!

Use pygame.image.load to load the background. You'll need to re-display the background on every tick of the game, just like we currently do with the solid color using.

Test your changes by re-running the game and observing that your custom background is used.

4. Set a key repeat speed
So far, you have to press an arrow key for each movement of the snake. Wouldn't it be convenient to be able to just hold down an arrow key to keep moving our snake?

Fix this by completing the "Set the key repeat speed" TODO in the  function in. See http://www.pygame.org/docs/ref/key.html#pygame.key.set_repeat for details on the Pygame function that controls this behavior.

Test your changes by re-running the game and holding down the arrow key while moving your snake around.

5. Make the food look more interesting
Snake food is just a solid-colored square. Spice it up by using an image instead. We've provided a sample food image called  in the Snakes directory, but create and add your own if you want!

Currently, in the  class   is filled with a random color. Use pygame.image.load to load and use the food image instead.

Test your changes by re-running the game and observing that your custom food image is used.

6. Handle quit and restart key presses
I want to keep playing! So far, there's no way to quit (besides closing the window) or restart the game.

Fix this by completing the "3 key presses" TODO in the  function in.

Test your changes by re-running the game, running into the bad snake to end the game, and making sure you can restart.

1. Play a sound when you eat food
We've included  as a sample sound, but find and add your own if you want!

Test your changes by re-running the game with the sound on and observing that a noise is played when the snake eats pieces of food.

2. Give yourself multiple lives
Typically in games you have multiple lives available. Give your snake 3 lives to start with, lose a life each time you run into yourself or the bad snake, and display how many lives remain in the upper left corner.

You may find it convenient to create a new file with a new class called  that keeps track of this game state and the work of updating the display.

Congratulations!
You've read, modified, and improved a game using Pygame that uses images and sound and game concepts like an event loop and managing keypresses. Keep practicing!