Back

Simple Snake game

Sript description

This is my version of the popular snake game.

Result

Example

Source Code

import pygame
import random

pygame.init()

WIDTH, HEIGHT = 800, 800
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Function Graph")

gridsize = 47
squaresize = 46
cellnum = int(WIDTH/gridsize)
green = 0, 255, 0
red = 255, 0, 0
direction = "up"
poslist = [] # list of lists x,y
poslist.append([int(WIDTH/gridsize/2), int(HEIGHT/gridsize/2)])

applePos = [random.randint(0,cellnum-1), random.randint(0,cellnum-1)]

def drawSquareAtGrid(x,y, size, gridsize):
    pygame.draw.rect(WIN, green, pygame.Rect(x*gridsize+(gridsize - size)/2, y*gridsize+(gridsize- size)/2, size, size))

def drawAppleAtGrid(x,y, size, gridsize):
    pygame.draw.circle(WIN, red, (x*gridsize+(gridsize - size)/2+size/2, y*gridsize+(gridsize- size)/2+size/2), size/2)



drawSquareAtGrid(poslist[0][0], poslist[0][1], squaresize, gridsize)



running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT and direction != "right":
                direction = "left"
            if event.key == pygame.K_RIGHT and direction!= "left":
                direction = "right"
            if event.key == pygame.K_UP and direction!= "down":
                direction = "up"
            if event.key == pygame.K_DOWN and direction!= "up":
                direction = "down"

    if direction== "up":
        poslist.insert(0, [poslist[0][0], poslist[0][1]-1])
        if applePos in poslist:
            while applePos in poslist:
                applePos = [random.randint(1, cellnum - 1), random.randint(1, cellnum - 1)]
        else:
            del poslist[-1]
    elif direction== "down":
        poslist.insert(0, [poslist[0][0], poslist[0][1]+1])
        if applePos in poslist:
            while applePos in poslist:
                applePos = [random.randint(1, cellnum-1), random.randint(1, cellnum-1)]
        else:
            del poslist[-1]
    elif direction == "right":
        poslist.insert(0, [poslist[0][0]+1, poslist[0][1]])
        if applePos in poslist:
            while applePos in poslist:
                applePos = [random.randint(1, cellnum-1), random.randint(1, cellnum-1)]
        else:
            del poslist[-1]
    elif direction == "left":
        poslist.insert(0, [poslist[0][0]-1, poslist[0][1]])
        if applePos in poslist:
            while applePos in poslist:
                applePos = [random.randint(1, cellnum - 1), random.randint(1, cellnum - 1)]
        else:
            del poslist[-1]

# check if list has duplicates
    dups = {tuple(x) for x in poslist if poslist.count(x) > 1}
    if len(dups) !=0:
        pygame.quit()
#if out of bounds
    for i in poslist:
        print(i)
        if i[0] == -1 or i[0] == cellnum or i[1] == -1 or i[1] == cellnum:
            pygame.quit()

    WIN.fill((0, 0, 0))
    for i in range(0, len(poslist)):
        drawSquareAtGrid(poslist[i][0], poslist[i][1], squaresize, gridsize)
        drawAppleAtGrid(applePos[0], applePos[1], squaresize, gridsize)

    pygame.display.update()
    pygame.time.delay(140)

pygame.quit()