Skip to content

codehelping.com

No. 1 For Project and Interview

  • Home
  • Projects
  • Blog
  • Contact Us

Build A Snake Game in Python with Pygame | Source Code

Posted on February 9, 2025August 5, 2025 By Omkar Pathak No Comments on Build A Snake Game in Python with Pygame | Source Code
Project, Python Project

Let’s learn how to make a simple Snake game in Python with Pygame. When the snake eats food, it will grow longer. But be careful, if it hits the wall or itself, the game will stop.

Build A Snake Game in Python with Pygame | CodeHelping

Pygame helps us show things on the screen and control how the game works. It’s a fun and easy way to start learning game coding, even if you’re just starting out!

Let’s see how to Set Up Pygame :

Before starting the snake game in Python using Pygame, you must install Pygame in your system. Type the command below in your terminal.

pip install pygame

If this does not work then try this one–

"py -m pip install -U pygame --user"

Snake Game in Python with Pygame Source Code

import pygame
import time
import random

# Initialize pygame
pygame.init()

# Game window dimensions
WIDTH, HEIGHT = 600, 400

# Colors
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (213, 50, 80)
BLACK = (0, 0, 0)

# Snake block size
BLOCK_SIZE = 10

# Set up display
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")

# Clock for controlling game speed
clock = pygame.time.Clock()
SNAKE_SPEED = 15

# Font
font = pygame.font.SysFont("bahnschrift", 25)

def draw_snake(snake_body):
    for block in snake_body:
        pygame.draw.rect(screen, GREEN, [block[0], block[1], BLOCK_SIZE, BLOCK_SIZE])

def display_message(msg, color, x, y):
    text = font.render(msg, True, color)
    screen.blit(text, [x, y])

def game_loop():
    game_over = False
    game_close = False
    
    x, y = WIDTH // 2, HEIGHT // 2
    x_change, y_change = 0, 0
    
    snake_body = []
    snake_length = 1
    
    food_x = random.randrange(0, WIDTH - BLOCK_SIZE, BLOCK_SIZE)
    food_y = random.randrange(0, HEIGHT - BLOCK_SIZE, BLOCK_SIZE)
    
    while not game_over:
        while game_close:
            screen.fill(BLACK)
            display_message("Game Over! Press Q-Quit or C-Play Again", RED, WIDTH // 6, HEIGHT // 3)
            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:
                        game_loop()
        
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x_change = -BLOCK_SIZE
                    y_change = 0
                elif event.key == pygame.K_RIGHT:
                    x_change = BLOCK_SIZE
                    y_change = 0
                elif event.key == pygame.K_UP:
                    y_change = -BLOCK_SIZE
                    x_change = 0
                elif event.key == pygame.K_DOWN:
                    y_change = BLOCK_SIZE
                    x_change = 0
        
        # Check boundaries
        if x >= WIDTH or x < 0 or y >= HEIGHT or y < 0:
            game_close = True
        
        x += x_change
        y += y_change
        
        screen.fill(BLACK)
        pygame.draw.rect(screen, RED, [food_x, food_y, BLOCK_SIZE, BLOCK_SIZE])
        
        snake_body.append([x, y])
        if len(snake_body) > snake_length:
            del snake_body[0]
        
        # Check collision with itself
        for block in snake_body[:-1]:
            if block == [x, y]:
                game_close = True
        
        draw_snake(snake_body)
        pygame.display.update()
        
        # Eating food
        if x == food_x and y == food_y:
            food_x = random.randrange(0, WIDTH - BLOCK_SIZE, BLOCK_SIZE)
            food_y = random.randrange(0, HEIGHT - BLOCK_SIZE, BLOCK_SIZE)
            snake_length += 1
        
        clock.tick(SNAKE_SPEED)
    
    pygame.quit()
    quit()

game_loop()
Complete Guide to Build a Classic Snake Game in Python with Pygame | 2025

Top Logics You Must Know there in Code:

1. Snake Moves with Arrow Keys

The snake starts in the middle of the screen and moves when you press arrow keys. Press left, it goes left. Press down, it goes down. Each keypress changes the snake’s direction.

2. Snake Eats Food to Grow

A red square (food) shows up in random places. If the snake touches it, it eats it. When that happens, the snake becomes longer by 1 block, and a new food appears.

3. Game Over on Crash

The game ends if:
The snake hits the wall (goes out of screen), the snake hits itself (bites its own body)

When that happens, a “Game Over” message shows, and you can press Q to quit or C to play again.

4. Snake is a List of Blocks

The snake is made from many little squares (blocks). These blocks are stored in a list. The list grows every time the snake eats food, and the screen updates to show the new length.

5. Game Runs in a Loop

The whole game runs inside a while loop. This loop keeps checking:

  • Did you press a key?
  • Did the snake eat food?
  • Did it hit something?

The screen updates over and over using clock.tick(), which controls how fast the snake moves.

Conclusion:

And that’s it! You’ve just built a fun Snake game in Python with Pygame. Now you can try adding your features, like new levels or different speeds. Keep practicing, and you’ll get better at making games in no time!

Thanks for visiting codehelping.com. For more Python projects, visit here.

Post navigation

❮ Previous Post: Top Best Laptops for Coding and Programming in 2025
Next Post: Create a Fun Rock Paper Scissors Game in Python with Tkinter | 2025 Tutorial ❯

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

  • About Us
  • Contact Us
  • Privacy Policy
  • Disclaimer

Copyright © 2025 codehelping.com.

Theme: Oceanly by ScriptsTown

Social Chat is free, download and try it now here!