70 lines
No EOL
2.3 KiB
Python
Executable file
70 lines
No EOL
2.3 KiB
Python
Executable file
#!/usr/bin/env python
|
|
import sys, pygame
|
|
|
|
|
|
class Snake:
|
|
|
|
def __init__(self, length=10,grid_width=50,grid_height=50, grid_pts=15,fps=10):
|
|
self.grid_width=grid_width
|
|
self.grid_height=grid_height
|
|
self.grid_pts=grid_pts
|
|
self.fps=fps
|
|
self.snake=[(0,0)]*length
|
|
self.direction=3 # Like clock (12=up, 3=right, 6=bottom, 9=left)
|
|
pygame.init()
|
|
self.screen=pygame.display.set_mode((grid_width*grid_pts,grid_height*grid_pts))
|
|
|
|
def draw_pts(self,x,y,color=(255,255,255)):
|
|
rect=pygame.Rect(self.grid_pts*x, self.grid_pts*y, self.grid_pts, self.grid_pts)
|
|
pygame.draw.rect(self.screen,color,rect, 0)
|
|
|
|
def move(self):
|
|
# Update tail
|
|
if len(self.snake)>1:
|
|
tmp=self.snake[0]
|
|
for i in range(1,len(self.snake)):
|
|
newtmp=self.snake[i]
|
|
self.snake[i]=tmp
|
|
tmp=newtmp
|
|
# Update head
|
|
h=self.snake[0] # Head
|
|
if self.direction==3:
|
|
self.snake[0]=(h[0]+1,h[1])
|
|
elif self.direction==9:
|
|
self.snake[0]=(h[0]-1,h[1])
|
|
elif self.direction==12:
|
|
self.snake[0]=(h[0],h[1]-1)
|
|
else:
|
|
self.snake[0]=(h[0],h[1]+1)
|
|
|
|
def draw_snake(self):
|
|
for elt in self.snake:
|
|
self.draw_pts(elt[0],elt[1])
|
|
|
|
def run(self):
|
|
clock = pygame.time.Clock()
|
|
self.direction=6
|
|
while True:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
pygame.quit()
|
|
sys.exit()
|
|
elif event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_LEFT and self.direction != 3:
|
|
self.direction=9
|
|
if event.key == pygame.K_RIGHT and self.direction != 9:
|
|
self.direction=3
|
|
if event.key == pygame.K_UP and self.direction != 6:
|
|
self.direction=12
|
|
if event.key == pygame.K_DOWN and self.direction != 12:
|
|
self.direction=6
|
|
|
|
self.screen.fill((0,0,0))
|
|
self.draw_snake()
|
|
self.move()
|
|
pygame.display.flip()
|
|
clock.tick(self.fps)
|
|
|
|
|
|
game=Snake()
|
|
game.run() |