snakeq/snake/snake.py
2022-10-31 22:09:01 +01:00

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()