Creating Snake Game in Python - Python for Data Analytics

Python Programs | Python Tricks | Solution for problems | Data Cleaning | Data Science

Creating Snake Game in Python

Snake game is one of the oldest and most played game. It's been with us from our childhood still we love to play it.


In this post we create a snake game using simplest python coding.

# SNAKES GAME  
 # Use ARROW KEYS to play, SPACE BAR for pausing/resuming and Esc Key for exiting  
 import curses  
 from curses import KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN  
 from random import randint  
 curses.initscr()  
 win = curses.newwin(20, 60, 0, 0)  
 win.keypad(1)  
 curses.noecho()  
 curses.curs_set(0)  
 win.border(0)  
 win.nodelay(1)  
 key = KEY_RIGHT                          # Initializing values  
 score = 0  
 snake = [[4,10], [4,9], [4,8]]                   # Initial snake co-ordinates  
 food = [10,20]                           # First food co-ordinates  
 win.addch(food[0], food[1], '*')                  # Prints the food  
 while key != 27:                          # While Esc key is not pressed  
   win.border(0)  
   win.addstr(0, 2, 'Score : ' + str(score) + ' ')        # Printing 'Score' and  
   win.addstr(0, 27, ' SNAKE ')                  # 'SNAKE' strings  
   win.timeout(150 - (len(snake)/5 + len(snake)/10)%120)     # Increases the speed of Snake as its length increases  
   prevKey = key                         # Previous key pressed  
   event = win.getch()  
   key = key if event == -1 else event   
   if key == ord(' '):                      # If SPACE BAR is pressed, wait for another  
     key = -1                          # one (Pause/Resume)  
     while key != ord(' '):  
       key = win.getch()  
     key = prevKey  
     continue  
   if key not in [KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, 27]:   # If an invalid key is pressed  
     key = prevKey  
   # Calculates the new coordinates of the head of the snake. NOTE: len(snake) increases.  
   # This is taken care of later at [1].  
   snake.insert(0, [snake[0][0] + (key == KEY_DOWN and 1) + (key == KEY_UP and -1), snake[0][1] + (key == KEY_LEFT and -1) + (key == KEY_RIGHT and 1)])  
   # If snake crosses the boundaries, make it enter from the other side  
   if snake[0][0] == 0: snake[0][0] = 18  
   if snake[0][1] == 0: snake[0][1] = 58  
   if snake[0][0] == 19: snake[0][0] = 1  
   if snake[0][1] == 59: snake[0][1] = 1  
   # Exit if snake crosses the boundaries (Uncomment to enable)  
   #if snake[0][0] == 0 or snake[0][0] == 19 or snake[0][1] == 0 or snake[0][1] == 59: break  
   # If snake runs over itself  
   if snake[0] in snake[1:]: break  
   if snake[0] == food:                      # When snake eats the food  
     food = []  
     score += 1  
     while food == []:  
       food = [randint(1, 18), randint(1, 58)]         # Calculating next food's coordinates  
       if food in snake: food = []  
     win.addch(food[0], food[1], '*')  
   else:    
     last = snake.pop()                     # [1] If it does not eat the food, length decreases  
     win.addch(last[0], last[1], ' ')  
   win.addch(snake[0][0], snake[0][1], '#')  
 curses.endwin()  
 print("\nScore - " + str(score))  

Please leave a comment if you like the post and share with your friends
code source:github/sanchitgangwar

3 comments: