This tutorial provides a step-by-step guide to coding the game, from installing Pygame to implementing game logic, drawing the snake, handling user input, and detecting collisions. Perfect for beginners, this project helps you enhance your Python programming skills with hands-on experience in 2D game development.
First, you need to install pygame if you haven’t already:
pip install pygame
Here is the complete code for a basic Snake game:
import pygame
import time
import random
pygame.init()
# Screen dimensions
width = 800
height = 600
# Colors
black = (0, 0, 0)
white = (255, 255, 255)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
# Game settings
snake_block = 10
snake_speed = 15
clock = pygame.time.Clock()
# Font settings
font_style = pygame.font.SysFont("bahnschrift", 25)
score_font = pygame.font.SysFont("comicsansms", 35)
# Function to display the player's score
def display_score(score):
value = score_font.render("Your Score: " + str(score), True, black)
screen.blit(value, [0, 0])
# Function to draw the snake
def draw_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(screen, green, [x[0], x[1], snake_block, snake_block])
# Function to display messages on the screen
def display_message(msg, color):
mesg = font_style.render(msg, True, color)
screen.blit(mesg, [width / 6, height / 3])
# Main game loop
def game_loop():
game_over = False
game_close = False
x1 = width / 2
y1 = height / 2
x1_change = 0
y1_change = 0
snake_list = []
length_of_snake = 1
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
while not game_over:
while game_close == True:
screen.fill(blue)
display_message("You Lost! Press Q-Quit or C-Play Again", red)
display_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:
game_loop()
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 >= width or x1 < 0 or y1 >= height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(blue)
pygame.draw.rect(screen, red, [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
draw_snake(snake_block, snake_list)
display_score(length_of_snake - 1)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
length_of_snake += 1
clock.tick(snake_speed)
pygame.quit()
quit()
# Initialize game screen
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Snake Game')
# Start game
game_loop()
pygame.init() initializes all the modules required for Pygame.display_score(score): Renders the score on the screen.draw_snake(snake_block, snake_list): Draws the snake on the screen.display_message(msg, color): Displays messages on the screen.game_loop()):