import pygame
import random

width = 600
height = 600
fps = 60

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("zmeya")
clock = pygame.time.Clock()

snakeblock = 10
snakespeed = 15
color = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))
class player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        super().__init__()
        self.image = pygame.Surface((snakeblock, snakeblock))
        self.image.fill((0, 0, 0))
        self.rect = self.image.get_rect()
        self.rect.x = width/2
        self.rect.y = height/2
        self.dx = 0
        self.dy = 0
        self.body = []
        self.length = 1
        self.score = 0
    def update(self):
        self.rect.x += self.dx
        self.rect.y += self.dy
        self.body.append([self.rect.x, self.rect.y])
        if len(self.body) > self.length:
            del self.body[0]
        for segment in self.body[:-1]:
            if segment[0] == self.rect.x and segment[1] == self.rect.y:
                return False
        return True
    def drawbody(self):
        for segment in self.body[:-1]:
            pygame.draw.rect(screen, (0, 0, 0), segment[0], segment[1], snakeblock, snakeblock)
        return True
    def grow(self):
        self.length += 1
        self.score += 1

class Food(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((snakeblock, snakeblock))
        self.image.fill((random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255)))
        self.rect = self.image.get_rect()
        self.respawn()
    def respawn(self):
        self.rect.x = random.randrange(0, 600-snakeblock, snakeblock)
        self.rect.y = random.randrange(0, 600-snakeblock, snakeblock)


allsprites = pygame.sprite.Group()
player = player()
allsprites.add(player)

foods = []

for apple in range(5):
    apple = Food()
    foods.append(apple)

running = True
while running:
    clock.tick(fps)

    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 player.dx == 0:
                player.dx = -snakeblock
                player.dy = 0
            elif event.key == pygame.K_RIGHT and player.dx == 0:
                player.dx = snakeblock
                player.dy = 0
            elif event.key == pygame.K_UP and player.dy == 0:
                player.dy = snakeblock
                player.dx = 0
            elif event.key == pygame.K_DOWN and player.dy == 0:
                player.dy = -snakeblock
                player.dx = 0

        if player.update():
            running = False

        if player.rect.x < 0 or player.rect.x > width or player.rect.y < 0 or player.rect.y > height:
            running = False

        if pygame.sprite.spritecollide(player, foods, True):
            player.grow()
            new_food = Food()
            allsprites.add(new_food)
            foods.append(new_food)

        allsprites.update()

    screen.fill((255, 255, 255))
    allsprites.draw(screen)
    pygame.display.flip()

pygame.quit()