#!/usr/bin/env python import sys, pygame, random 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 new_apple(self): self.apple=(random.randint(0,grid_width),random.randint(0,grid_height)) while self.apple in self.snake: self.apple=(random.randint(0,grid_width),random.randint(0,grid_height)) 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()