This is my version of the popular snake game.
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()