Learn how to code a Snake game in Python with Pygame. This tutorial includes the complete source code and step-by-step instructions for creating your own game.
Table of Contents
- Setting Up Your Environment
- Game Design Overview
- Creating the Game Window
- Full Python Code for Snake Game
- Conclusion
The Snake Game is a classic arcade game that has been enjoyed by countless players since its inception. The game involves controlling a snake to eat food items that appear randomly on the screen. Each time the snake eats, it grows longer, and the game becomes more challenging. This article will guide you through creating a Snake Game in Python, a great project for both beginners and experienced programmers.
Setting Up Your Environment
Installing Python
First things first, you need Python installed on your machine. You can download the latest version of Python from python.org. Follow the instructions for your operating system to complete the installation.
Required Libraries
For this project, we'll be using the Pygame library, which makes it easy to create games in Python. You can install Pygame using pip:
pip install pygame
Game Design Overview
Game Objectives
The main objective of the Snake Game is to navigate the snake to eat as many food items as possible without colliding with the walls or itself.
Basic Game Components
The game consists of three primary components:
- Snake: The player controls the snake.
- Food: Randomly appears on the screen for the snake to eat.
- Game Window: The screen where the game is displayed.
Creating the Game Window
Defining Colors and Display Dimensions
We’ll define some colors and set up the display dimensions. This will help us customize the look of our game.
# Define colors white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (255, 0, 0) green = (0, 255, 0) blue = (50, 153, 213) # Customizable colors background_color = black snake_color = green food_color = red # Display dimensions dis_width = 800 dis_height = 600
Initializing the Game
Next, we initialize the game and set up the display, clock, and fonts.
import pygame import random pygame.init() # Set up display dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Snake Game by CodewithFaraz') clock = pygame.time.Clock() snake_block = 10 snake_speed = 15 # Fonts font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35)
Drawing the Snake
We need a function to draw the snake on the screen. The snake will be represented by a list of coordinates.
def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, snake_color, [x[0], x[1], snake_block, snake_block])
Displaying Messages
Let's add functions to display messages and scores on the screen.
def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, [dis_width / 6, dis_height / 3]) def Your_score(score): value = score_font.render("Your Score: " + str(score), True, white) dis.blit(value, [0, 0])
Game Loop Structure
The game loop is where all the action happens. It keeps the game running, handles user input, updates game elements, and checks for collisions.
def gameLoop(): game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 snake_List = [] Length_of_snake = 1 foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 while not game_over: while game_close == True: dis.fill(background_color) message("You Lost! Press Q-Quit or C-Play Again", red) Your_score(Length_of_snake - 1) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop()
Handling User Inputs
We need to handle key presses to control the snake’s direction.
for event in pygame. event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0
Updating Game Elements
Update the snake's position, check for collisions, and grow the snake when it eats food.
if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0: game_close = True x1 += x1_change y1 += y1_change dis.fill(background_color) pygame.draw.rect(dis, food_color, [foodx, foody, snake_block, snake_block]) snake_Head = [] snake_Head.append(x1) snake_Head.append(y1) snake_List.append(snake_Head) if len(snake_List) > Length_of_snake: del snake_List[0] for x in snake_List[:-1]: if x == snake_Head: game_close = True our_snake(snake_block, snake_List) Your_score(Length_of_snake - 1) pygame.display.update() if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 Length_of_snake += 1 clock.tick(snake_speed) pygame.quit() quit() gameLoop()
Full Python Code for Snake Game
import pygame import random pygame.init() # Define colors white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (255, 0, 0) green = (0, 255, 0) blue = (50, 153, 213) # Customizable colors background_color = black snake_color = green food_color = red # Display dimensions dis_width = 800 dis_height = 600 # Set up display dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Snake Game by CodewithFaraz') clock = pygame.time.Clock() snake_block = 10 snake_speed = 15 # Fonts font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, snake_color, [x[0], x[1], snake_block, snake_block]) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, [dis_width / 6, dis_height / 3]) def Your_score(score): value = score_font.render("Your Score: " + str(score), True, white) dis.blit(value, [0, 0]) def gameLoop(): game_over = False game_close = False x1 = dis_width / 2 y1 = dis_height / 2 x1_change = 0 y1_change = 0 snake_List = [] Length_of_snake = 1 foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 while not game_over: while game_close == True: dis.fill(background_color) message("You Lost! Press Q-Quit or C-Play Again", red) Your_score(Length_of_snake - 1) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop() for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0: game_close = True x1 += x1_change y1 += y1_change dis.fill(background_color) pygame.draw.rect(dis, food_color, [foodx, foody, snake_block, snake_block]) snake_Head = [] snake_Head.append(x1) snake_Head.append(y1) snake_List.append(snake_Head) if len(snake_List) > Length_of_snake: del snake_List[0] for x in snake_List[:-1]: if x == snake_Head: game_close = True our_snake(snake_block, snake_List) Your_score(Length_of_snake - 1) pygame.display.update() if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 Length_of_snake += 1 clock.tick(snake_speed) pygame.quit() quit() gameLoop()
Conclusion
Building a Snake Game in Python is a fun and educational project. It covers various fundamental programming concepts such as loops, conditionals, and functions, as well as game development principles. By following this guide, you should now have a functional Snake Game that you can further enhance and customize.
That’s a wrap!
I hope you enjoyed this article
Did you like it? Let me know in the comments below 🔥 and you can support me by buying me a coffee.
And don’t forget to sign up to our email newsletter so you can get useful content like this sent right to your inbox!
Thanks!
Faraz 😊