Creating a basic Snake game in Python involves using the Pygame library, which simplifies game development by providing functions for graphics, sounds, and handling user inputs. Below is a step-by-step guide to create a simple Snake game:
1. Install Pygame
If you haven’t already installed Pygame, you can do so using pip:
pip install pygame
2. Code for the Snake Game
Here is a complete example of a Snake game in Python using Pygame:
import pygame import time import random pygame.init() white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (213, 50, 80) green = (0, 255, 0) blue = (50, 153, 213) dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Snake Game') clock = pygame.time.Clock() snake_block = 10 initial_speed = 10 font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35) opening_font = pygame.font.SysFont("comicsansms", 50) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block]) def message(msg, color, y_displace=0, font=font_style): mesg = font.render(msg, True, color) dis.blit(mesg, [dis_width / 2 - mesg.get_width() / 2, dis_height / 2 - mesg.get_height() / 2 + y_displace]) def opening_animation(): dis.fill(blue) message("content.id", white, font=opening_font) pygame.display.update() time.sleep(2) # Display the opening animation for 2 seconds def gameLoop(): opening_animation() 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 snake_speed = initial_speed while not game_over: while game_close == True: dis.fill(blue) message("You Lost! Press Q-Quit or C-Play Again", red) 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(blue) pygame.draw.rect(dis, green, [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) 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 snake_speed += 1 # Increase speed when snake eats food clock.tick(snake_speed) pygame.quit() quit() gameLoop()
3. Explanation:
-
- Initialization: The game starts by initializing the Pygame library and setting up the display.
- Colors and Dimensions: Colors are defined in RGB format. The game display dimensions are also set.
- Game Loop: The main game loop handles events, updates the snake’s position, checks for collisions, and redraws the screen.
- Snake Movement: The snake’s movement is controlled by changing the position coordinates based on user input (arrow keys).
- Food and Growth: Randomly place the food on the screen. If the snake eats the food, its length increases.
- Game Over: The game ends if the snake collides with the screen boundaries or itself.
Run the above code to start the game. Use the arrow keys to move the snake, and try to eat the green food without hitting the walls or the snake’s own body. Press ‘C’ to play again or ‘Q’ to quit when you lose.