Welcome to our Python Tutorial on building a Snake Game! In this short guide, we’ll walk you through the steps to create a classic Snake Game using Python and Pygame. Follow along as we explore the world of game development with Python and learn how to code this fun and interactive game from scratch. Let’s dive in and embark on this exciting programming adventure together!
Importing necessary modules:
import pygame
import random
We import the pygame
library, which is used to create games and multimedia applications in Python. We also import the random
module to generate random positions for the food.
Initializing Pygame and setting up the screen:
pygame.init()
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('Snake Game')
We initialize the Pygame modules and set up the game window with a width of 800 pixels and a height of 600 pixels. We also set the caption of the window to “Snake Game.”
Defining colors and snake properties:
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
snake_block = 20
snake_speed = 15
We define some colors using RGB values. snake_block
represents the size of each block of the snake and the food, and snake_speed
controls the speed of the snake.
Defining the our_snake function:
our_snake(snake_block, snake_list):
for x, y in snake_list:
pygame.draw.rect(screen, green, [x, y, snake_block, snake_block])
This function is used to draw the snake on the screen. It takes snake_block
(size of the block) and snake_list
(a list of (x, y) positions of the snake segments) as arguments. It uses pygame.draw.rect
to draw rectangles with green color on the screen for each segment of the snake.
Defining the game_loop function:
def game_loop():
# ... (Rest of the code inside the game_loop function)
This function is the main game loop where the game logic is implemented.
Handling game states and user input:
game_over = False
game_close = False
# ...
while not game_over:
while game_close:
# ... (Handling game over and restart conditions)
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:
# ... (Handling different arrow key inputs)
We use game_over
and game_close
variables to manage different game states. When game_close
is True, it means the player has lost, and we display the appropriate message and handle restart or quitting. The main game loop listens for events, and if the player presses the arrow keys, we change the direction of the snake accordingly.
Moving the snake and handling collisions:
if snake_x >= screen_width or snake_x < 0 or snake_y >= screen_height or snake_y < 0:
game_close = True
snake_x += snake_change_x
snake_y += snake_change_y
# ...
snake_head = [snake_x, snake_y]
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
for segment in snake_list[:-1]:
if segment == snake_head:
game_close = True
Here, we check for collisions with the boundaries of the screen and with the snake’s own body. If the snake hits the boundaries or collides with itself, game_close
becomes True, and the game over message is displayed.
Drawing the snake and food on the screen:
screen.fill(white)
pygame.draw.rect(screen, red, [food_x, food_y, snake_block, snake_block])
our_snake(snake_block, snake_list)
pygame.display.update()
We first fill the screen with white color and then draw the red food rectangle using pygame.draw.rect
. After that, we draw the snake on the screen using the our_snake
function, which iterates through the snake segments and draws green rectangles for each segment. Finally, we call pygame.display.update()
to update the display with the latest changes.
Handling food consumption and increasing the snake length:
if snake_x == food_x and snake_y == food_y:
food_x, food_y = round(random.randrange(0, screen_width - snake_block) / 20) * 20, round(random.randrange(0, screen_height - snake_block) / 20) * 20
snake_length += 1
If the snake’s head position matches the food position, it means the snake has consumed the food. We generate new random positions for the food and increase the length of the snake.
Controlling the game speed with clock.tick(snake_speed):
clock = pygame.time.Clock()
# ...
clock.tick(snake_speed)
We create a Clock
object to control the game’s frame rate, and we call clock.tick(snake_speed)
inside the game loop to set the speed of the snake.
Quitting the game:
pygame.quit()
quit()
When the game loop ends (the player quits or loses), we call pygame.quit()
to uninitialize the Pygame modules and quit()
to exit the Python program.
The full source code for this project is available on Github.