Broken Snake Code
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from random import randint
window = 0
width,height = 500,500
field_width, field_height = 50,50
snake = [(20,20)]
snake_dir = (1,0)
interval = 200
food = []
def refresh2d_custom(width,height, internal_width, internal_height):
glViewport(0,0,width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, internal_width, 0.0, internal_height, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
def draw_rect(x,y,width,height):
glBegin(GL_QUADS)
glVertex2f(x,y)
glVertex2f(x+width, y)
glVertex2f(x+width, y + height)
glVertex2f(x, y + height)
glEnd()
def draw():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
refresh2d_custom(width, height, field_width, field_height)
draw_food()
draw_snake()
glutSwapBuffers()
def draw_snake():
glColor3f(1.0,1.0,1.0)
for x,y in snake:
draw_rect(x,y, 1,1)
def draw_food():
glColor3f(0.5,0.5, 1.0)
for x,y in food:
draw_rect(x,y,1,1)
def update(value):
snake.insert(0, vec_add[0,0], snake_dir)
snake.pop()
r = randint(0,20)
if r == 0:
x,y = randint(0, field_width), randint(0,field_height)
food.append((x,y))
(hx, hy) = snake[0]
for x,y in food:
if hx == x and hy == y:
snake.append((x,y))
food.remove((x,y))
for x,y in snake:
if hx == x and hy == y:
snake = [(20,20)]
if hx > 50 or hx < 0:
snake = [(20,20)]
if hy > 50 or hy < 0:
snake = [(20,20)]
glutTimerFunc(interval, update, 0)
def vec_add((x1,y1),(x2, y2)):
return(x1 + x2, y1 + y2)
def keyboard(*args):
global snake_dir
if args[0] == 'w':
snake_dir = (0,1)
if args[0] == 's':
snake_dir = (0,-1)
if args[0] == 'a':
snake_dir = (-1,0)
if args[0] == 'd':
snake_dir = (1,0)
glutInit()
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
glutInitWindowSize(width,height)
glutInitWindowPosition(0,0)
window = glutCreateWindow(b"snake.py")
glutDisplayFunc(draw)
glutIdleFunc(draw)
glutTimerFunc(interval, update, 0)
glutKeyboardFunc(keyboard)
glutMainLoop()