Vidhi Patel
Published

Play Your Favourite '90s Game with Odinub

Do you miss your 90's favourite game? Let's try to make that one with Odinub.

IntermediateProtip528
Play Your Favourite '90s Game with Odinub

Things used in this project

Hardware components

Odinub
Odinub
×1

Story

Read more

Code

snake.py

Python
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 the values
score = 0

snake = [[4,10], [4,9], [4,8]]     # Starting coordinates of snake
food = [10,20]                     # First food co-ordinates

win.addch(food[0], food[1],curses.ACS_DIAMOND)        # Prints the food

while key != 27:                        
	win.border(0)
	win.addstr(0, 2, 'Score : ' + str(score) + ' ') # Printing Score 
	win.addstr(0, 27, ' SNAKE ')               
	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 SPACEBAR 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(Uncomment to enable)
	#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 
	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],curses.ACS_DIAMOND)
	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))

Credits

Vidhi Patel
4 projects • 2 followers

Comments