-
-
Save AlexanderBrevig/834702ec2fe50ef879f9ba46d1c389ea to your computer and use it in GitHub Desktop.
Snakes Game using Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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