-
-
Save jiangtao7/35b0ffeeb0b4ec3ca80fc50f72af7ff0 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 | |
# 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)) | |
print("http://bitemelater.in\n") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment