Snake Game Using Python

 Well, hello mates this themidom. Today we will know how we can create Snake Game using Python. And it is quite easy. And here's, the deal, you read and I provide you source code.

First, you need to install one python module -> Pygame

just run, "pip install pygame" in your terminal, it will be installed automatically.

Now, we will import some Python modules -

 import pygame  
 import sys  
 import time  
 import random  
Now, we will add some defaults, and we will initialise some pygame values - 


 # change difficulty by the given below  
 # Easy   -> 10  
 # Medium  -> 25  
 # Hard   -> 40  
 # Harder  -> 60  
 # Impossible-> 120  
 difficulty = 10  
 # Window size  
 frame_size_x = 720  
 frame_size_y = 480  
 # Checks for errors encountered  
 check_errors = pygame.init()  
 # pygame.init() example output -> (6, 0)  
 # second number in tuple gives number of errors  
 if check_errors[1] > 0:  
   print(f'[!] Had {check_errors[1]} errors when initialising game, exiting...')  
   sys.exit(-1)  
 else:  
   print('[+] Game successfully initialised')  
 # Initialise game window  
 pygame.display.set_caption('Snake Eater')  
 game_window = pygame.display.set_mode((frame_size_x, frame_size_y))  
 # Colors (R, G, B)  
 black = pygame.Color(0, 0, 0)  
 white = pygame.Color(255, 255, 255)  
 red = pygame.Color(255, 0, 0)  
 green = pygame.Color(0, 255, 0)  
 blue = pygame.Color(0, 0, 255)  
 # FPS (frames per second) controller  
 fps_controller = pygame.time.Clock()  
 # Game variables  
 snake_pos = [100, 50]  
 snake_body = [[100, 50], [100-10, 50], [100-(2*10), 50]]  
 food_pos = [random.randrange(1, (frame_size_x//10)) * 10, random.randrange(1, (frame_size_y//10)) * 10]  
 food_spawn = True  
 direction = 'RIGHT'  
 change_to = direction  
 score = 0  
Now, we will add some logic - 

 # Game Over  
 def game_over():  
   my_font = pygame.font.SysFont('times new roman', 90)  
   game_over_surface = my_font.render('YOU DIED', True, red)  
   game_over_rect = game_over_surface.get_rect()  
   game_over_rect.midtop = (frame_size_x/2, frame_size_y/4)  
   game_window.fill(black)  
   game_window.blit(game_over_surface, game_over_rect)  
   show_score(0, red, 'times', 20)  
   pygame.display.flip()  
   time.sleep(3)  
   pygame.quit()  
   sys.exit()  
 # Score  
 def show_score(choice, color, font, size):  
   score_font = pygame.font.SysFont(font, size)  
   score_surface = score_font.render('Score : ' + str(score), True, color)  
   score_rect = score_surface.get_rect()  
   if choice == 1:  
     score_rect.midtop = (frame_size_x/10, 15)  
   else:  
     score_rect.midtop = (frame_size_x/2, frame_size_y/1.25)  
   game_window.blit(score_surface, score_rect)  
   # pygame.display.flip()  
 # Main logic  
 while True:  
   for event in pygame.event.get():  
     if event.type == pygame.QUIT:  
       pygame.quit()  
       sys.exit()  
     # Whenever a key is pressed down  
     elif event.type == pygame.KEYDOWN:  
       # W -> Up; S -> Down; A -> Left; D -> Right  
       if event.key == pygame.K_UP or event.key == ord('w'):  
         change_to = 'UP'  
       if event.key == pygame.K_DOWN or event.key == ord('s'):  
         change_to = 'DOWN'  
       if event.key == pygame.K_LEFT or event.key == ord('a'):  
         change_to = 'LEFT'  
       if event.key == pygame.K_RIGHT or event.key == ord('d'):  
         change_to = 'RIGHT'  
       # Esc -> Create event to quit the game  
       if event.key == pygame.K_ESCAPE:  
         pygame.event.post(pygame.event.Event(pygame.QUIT))  
   # Making sure the snake cannot move in the opposite direction instantaneously  
   if change_to == 'UP' and direction != 'DOWN':  
     direction = 'UP'  
   if change_to == 'DOWN' and direction != 'UP':  
     direction = 'DOWN'  
   if change_to == 'LEFT' and direction != 'RIGHT':  
     direction = 'LEFT'  
   if change_to == 'RIGHT' and direction != 'LEFT':  
     direction = 'RIGHT'  
   # Moving the snake  
   if direction == 'UP':  
     snake_pos[1] -= 10  
   if direction == 'DOWN':  
     snake_pos[1] += 10  
   if direction == 'LEFT':  
     snake_pos[0] -= 10  
   if direction == 'RIGHT':  
     snake_pos[0] += 10  
   # Snake body growing mechanism  
   snake_body.insert(0, list(snake_pos))  
   if snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]:  
     score += 1  
     food_spawn = False  
   else:  
     snake_body.pop()  
   # Spawning food on the screen  
   if not food_spawn:  
     food_pos = [random.randrange(1, (frame_size_x//10)) * 10, random.randrange(1, (frame_size_y//10)) * 10]  
   food_spawn = True  
   # GFX  
   game_window.fill(black)  
   for pos in snake_body:  
     # Snake body  
     # .draw.rect(play_surface, color, xy-coordinate)  
     # xy-coordinate -> .Rect(x, y, size_x, size_y)  
     pygame.draw.rect(game_window, blue, pygame.Rect(pos[0], pos[1], 10, 10))  
   # Snake food  
   pygame.draw.rect(game_window, white, pygame.Rect(food_pos[0], food_pos[1], 10, 10))  
   # Game Over conditions  
   # Getting out of bounds  
   if snake_pos[0] < 0 or snake_pos[0] > frame_size_x-10:  
     game_over()  
   if snake_pos[1] < 0 or snake_pos[1] > frame_size_y-10:  
     game_over()  
   # Touching the snake body  
   for block in snake_body[1:]:  
     if snake_pos[0] == block[0] and snake_pos[1] == block[1]:  
       game_over()  
   show_score(1, white, 'consolas', 20)  
   # Refresh game screen  
   pygame.display.update()  
   # Refresh rate  
   fps_controller.tick(difficulty)  
And we are done - 

Here's the full code - 

 import pygame  
 import sys  
 import time  
 import random  
 # Difficulty settings  
 # Easy   -> 10  
 # Medium  -> 25  
 # Hard   -> 40  
 # Harder  -> 60  
 # Impossible-> 120  
 difficulty = 10  
 # Window size  
 frame_size_x = 720  
 frame_size_y = 480  
 # Checks for errors encountered  
 check_errors = pygame.init()  
 # pygame.init() example output -> (6, 0)  
 # second number in tuple gives number of errors  
 if check_errors[1] > 0:  
   print(f'[!] Had {check_errors[1]} errors when initialising game, exiting...')  
   sys.exit(-1)  
 else:  
   print('[+] Game successfully initialised')  
 # Initialise game window  
 pygame.display.set_caption('Snake Eater')  
 game_window = pygame.display.set_mode((frame_size_x, frame_size_y))  
 # Colors (R, G, B)  
 black = pygame.Color(0, 0, 0)  
 white = pygame.Color(255, 255, 255)  
 red = pygame.Color(255, 0, 0)  
 green = pygame.Color(0, 255, 0)  
 blue = pygame.Color(0, 0, 255)  
 # FPS (frames per second) controller  
 fps_controller = pygame.time.Clock()  
 # Game variables  
 snake_pos = [100, 50]  
 snake_body = [[100, 50], [100-10, 50], [100-(2*10), 50]]  
 food_pos = [random.randrange(1, (frame_size_x//10)) * 10, random.randrange(1, (frame_size_y//10)) * 10]  
 food_spawn = True  
 direction = 'RIGHT'  
 change_to = direction  
 score = 0  
 # Game Over  
 def game_over():  
   my_font = pygame.font.SysFont('times new roman', 90)  
   game_over_surface = my_font.render('YOU DIED', True, red)  
   game_over_rect = game_over_surface.get_rect()  
   game_over_rect.midtop = (frame_size_x/2, frame_size_y/4)  
   game_window.fill(black)  
   game_window.blit(game_over_surface, game_over_rect)  
   show_score(0, red, 'times', 20)  
   pygame.display.flip()  
   time.sleep(3)  
   pygame.quit()  
   sys.exit()  
 # Score  
 def show_score(choice, color, font, size):  
   score_font = pygame.font.SysFont(font, size)  
   score_surface = score_font.render('Score : ' + str(score), True, color)  
   score_rect = score_surface.get_rect()  
   if choice == 1:  
     score_rect.midtop = (frame_size_x/10, 15)  
   else:  
     score_rect.midtop = (frame_size_x/2, frame_size_y/1.25)  
   game_window.blit(score_surface, score_rect)  
   # pygame.display.flip()  
 # Main logic  
 while True:  
   for event in pygame.event.get():  
     if event.type == pygame.QUIT:  
       pygame.quit()  
       sys.exit()  
     # Whenever a key is pressed down  
     elif event.type == pygame.KEYDOWN:  
       # W -> Up; S -> Down; A -> Left; D -> Right  
       if event.key == pygame.K_UP or event.key == ord('w'):  
         change_to = 'UP'  
       if event.key == pygame.K_DOWN or event.key == ord('s'):  
         change_to = 'DOWN'  
       if event.key == pygame.K_LEFT or event.key == ord('a'):  
         change_to = 'LEFT'  
       if event.key == pygame.K_RIGHT or event.key == ord('d'):  
         change_to = 'RIGHT'  
       # Esc -> Create event to quit the game  
       if event.key == pygame.K_ESCAPE:  
         pygame.event.post(pygame.event.Event(pygame.QUIT))  
   # Making sure the snake cannot move in the opposite direction instantaneously  
   if change_to == 'UP' and direction != 'DOWN':  
     direction = 'UP'  
   if change_to == 'DOWN' and direction != 'UP':  
     direction = 'DOWN'  
   if change_to == 'LEFT' and direction != 'RIGHT':  
     direction = 'LEFT'  
   if change_to == 'RIGHT' and direction != 'LEFT':  
     direction = 'RIGHT'  
   # Moving the snake  
   if direction == 'UP':  
     snake_pos[1] -= 10  
   if direction == 'DOWN':  
     snake_pos[1] += 10  
   if direction == 'LEFT':  
     snake_pos[0] -= 10  
   if direction == 'RIGHT':  
     snake_pos[0] += 10  
   # Snake body growing mechanism  
   snake_body.insert(0, list(snake_pos))  
   if snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]:  
     score += 1  
     food_spawn = False  
   else:  
     snake_body.pop()  
   # Spawning food on the screen  
   if not food_spawn:  
     food_pos = [random.randrange(1, (frame_size_x//10)) * 10, random.randrange(1, (frame_size_y//10)) * 10]  
   food_spawn = True  
   # GFX  
   game_window.fill(black)  
   for pos in snake_body:  
     # Snake body  
     # .draw.rect(play_surface, color, xy-coordinate)  
     # xy-coordinate -> .Rect(x, y, size_x, size_y)  
     pygame.draw.rect(game_window, blue, pygame.Rect(pos[0], pos[1], 10, 10))  
   # Snake food  
   pygame.draw.rect(game_window, white, pygame.Rect(food_pos[0], food_pos[1], 10, 10))  
   # Game Over conditions  
   # Getting out of bounds  
   if snake_pos[0] < 0 or snake_pos[0] > frame_size_x-10:  
     game_over()  
   if snake_pos[1] < 0 or snake_pos[1] > frame_size_y-10:  
     game_over()  
   # Touching the snake body  
   for block in snake_body[1:]:  
     if snake_pos[0] == block[0] and snake_pos[1] == block[1]:  
       game_over()  
   show_score(1, white, 'consolas', 20)  
   # Refresh game screen  
   pygame.display.update()  
   # Refresh rate  
   fps_controller.tick(difficulty)  
And, now save it by the name of snake.py
And run it - You will get output like this - 

Now, you enjoy your game, Thanks for reading the post, see ya in the next post.
                                            --Themidom

1 Comments

If you have have any doubt please let me know

  1. Emperor Casino Online | Play £10, Get 30 Free Spins
    Emperor Casino is an online casino featuring a 포커 고수 wide range of games and a 우리 카지노 wide m7 카지노 variety apr casino of games. Find out more 제왕 카지노 먹튀 here.

    ReplyDelete
Previous Post Next Post

Ads

Ads