Skip to content

Instantly share code, notes, and snippets.

@AlexanderBrevig
Forked from sanchitgangwar/snake.py
Last active November 2, 2017 11:49
Show Gist options
  • Save AlexanderBrevig/834702ec2fe50ef879f9ba46d1c389ea to your computer and use it in GitHub Desktop.
Save AlexanderBrevig/834702ec2fe50ef879f9ba46d1c389ea to your computer and use it in GitHub Desktop.
Snakes Game using Python
# SNAKES GAME FOR WINDOWS
# Be sure to download http://gnuwin32.sourceforge.net/downlinks/pdcurses-bin-zip.php
# I add the pdcurses.dll to the project folder and off you go!
# Use ARROW KEYS to play, SPACE BAR for pausing/resuming and Esc Key for exiting
import unicurses
from unicurses import *
from random import randint
stdscr = initscr()
win = newwin(20, 60, 0, 0)
keypad(stdscr, True)
noecho()
curs_set(0)
border(0)
#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
mvaddstr(food[0], food[1], '*') # Prints the food
while key != 27: # While Esc key is not pressed
border(0)
mvaddstr(0, 2, 'Score : ' + str(score) + ' ') # Printing 'Score' and
mvaddstr(0, 27, ' SNAKE ') # 'SNAKE' strings
timeout(150 - int((len(snake)/5 + len(snake)/10)%120)) # Increases the speed of Snake as its length increases
prevKey = key # Previous key pressed
event = 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 = 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 = []
mvaddstr(food[0], food[1], '*')
else:
last = snake.pop() # [1] If it does not eat the food, length decreases
mvaddstr(last[0], last[1], ' ')
mvaddstr(snake[0][0], snake[0][1], '#')
unicurses.endwin()
print("\nScore - " + str(score))
print("http://bitwave.no\n")
print("http://bitemelater.in\n")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment