Creating your own game might seem difficult, but with Python and a library called pygame, it’s easier than you think. In this guide, we’ll show you how to build a classic Snake game in Python step by step.

Whether you’re just starting with Python or looking for a fun project to enhance your skills, this is the perfect beginner-friendly guide. By the end, you’ll have a playable game and a solid understanding of how game logic works!

So let’s get started…

What is Pygame?

Before we start, let’s understand what pygame is. Pygame is a free Python library that makes it easy to build games and multimedia applications. It handles things like graphics, sounds, and user input (such as the keyboard).

With that foundation in mind, let’s now dive into creating our snake game project using this step-by-step guid

Step 1: Installing Pygame

To get started, you need to install the pygame library. If you don’t have it installed yet, run the following command:

pip install pygame

This will install the library that we needed to create the game.

Step 2: Writing the Code

Now that you have pygame installed, let’s write the code. Below is the complete Python code for your Snake game. You can copy and paste it into a Python file (snake_game.py).

Source Code

import pygame
import time
import random

# Initialize pygame
pygame.init()

# Colors
white = (255, 255, 255)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)

# Screen size
dis_width = 800
dis_height = 600

# Create the game window
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption('Snake Game')

# Clock to control the speed of the snake
clock = pygame.time.Clock()

# Snake settings
snake_block = 10
snake_speed = 15

font_style = pygame.font.SysFont("bahnschrift", 25)

# Function to display the score
def Your_score(score):
    value = font_style.render("Your Score: " + str(score), True, white)
    dis.blit(value, [0, 0])

# Function to draw the snake
def our_snake(snake_block, snake_list):
    for x in snake_list:
        pygame.draw.rect(dis, green, [x[0], x[1], snake_block, snake_block])

# Game loop function
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:
            dis.fill(black)
            message = font_style.render("Game Over! Press Q-Quit or C-Play Again", True, red)
            dis.blit(message, [dis_width / 6, dis_height / 3])
            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(black)

        pygame.draw.rect(dis, blue, [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()

# Start the game
gameLoop()

Output

What the Code Does:

  1. Initializing Pygame: We begin by initializing pygame and defining the colors, screen size, and other settings.
  2. Snake and Food: The snake is drawn using small rectangles. The food is a single rectangle that appears randomly on the screen.
  3. Movement: The snake moves when you press the arrow keys. Each time it eats food, the snake grows longer.
  4. Game Over: If the snake hits the wall or itself, the game is over. You can press “Q” to quit or “C” to play again.
  5. Displaying the Score: The score is displayed in the top left corner, showing how many pieces of food the snake has eaten.

Conclusion

Building a simple Snake game in Python is a great project to help you understand game development basics. With just a few lines of code, you’ve learned how to:

  • Control a moving object with keyboard input
  • Implement collision detection
  • Update the game screen in real-time

I hope you enjoyed this guide! Feel free to modify the code, experiment with colors, or add new features to your game.

👉 For more Python projects click here

Author

Hi, I'm Yagyavendra Tiwari, a computer engineer with a strong passion for programming. I'm excited to share my programming knowledge with everyone here and help educate others in this field.

Write A Comment