import pygame
import random


WIDHT = 1280 #ШИРИНА ИГРОВОГО ОКНА
HEIGHT = 720 #ВЫСОТА
FPS = 60 #КАДРЫ В СЕКУНДУ

WHITE = (255,255,255) #БЕЛЫЙ
BLACK = (0,0,0) #ЧЕРНЫЙ
RED = (255,0,0) #КРАСНЫЙ
GREEN = (0,255,0)#ЗЕЛЕНЫЙ
BLUE = (0,0,255)#СИНИЙ
TURQUOISE = (64, 224, 208)#БИРЮЗОВЫЙ
LIME = (0, 255, 0)#ЛАЙМОВЫЙ

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_caption("Змейка")
clock = pygame.time.Clock()

snake_block = 10
snake_speed = 15


class Snake(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((snake_block, snake_block))
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
        self.rect.x = WIDHT/2
        self.rect.y = HEIGHT/2
        self.dx = 0
        self.dy = 0
        self.body = [] #список
        self.lenght = 1
        self.score = 0

    def update(self):
        self.rect.y += self.dy
        self.rect.x += self.dx

        self.body.append([self.rect.x,self.rect.y])
        if len(self.boby)>self.lenght:
            del self.body[0]

        for segment in self[:-1]:
            if segment[0] == self.rect.x and segment[1] == self.rect.y:
                return False
        return True

    def draw_body(self, surface):
        for segment in self.body[:-1]:
            pygame.draw.rect(surface,BLACK,segment[0], segment[1],snake_block,snake_block)

    def grow(self):
        self.lenght += 1
        self.score += 1


class Food (pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((snake_block, snake_block))
        self.image.fill(LIME)
        self.rect = self.image.get_rect()
        self.respawn()


    def respawn(self):
        self.rect.x = random.randrange(0, 1280-snake_block, snake_block )
        self.rect.y = random.randrange(0, 720-snake_block, snake_block )





all_sprites = pygame.sprite.Group()
sixseven = Player()
all_sprites.add(sixseven)


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 = -snake_block
                player.dy = 0
            elif event.key == pygame.K_RIGHT and player.dx == 0:
                player.dx = snake_block
                player.dy = 0
            elif event.key == pygame.K_UP and player.dy == 0:
                player.dy = -snake_block
                player.dx = 0
            elif event.key == pygame.K_DOWN and player.dy == 0:
                player.dy = snake_block
                player.dx = 0


    if player.update():
        running = False


    if (player.rect.x < 0 or player.rect.x > 1280 or
            player.rect.y < 0 or player.rect.y >= 720):
        running = False



    if pygame.sprite.spritecollide(player, food, True):
        player.grow()
        new_food = Food()
        all_sprites.add(new_food)
        foods.add(new_food)

    screen.fill(WHITE)


    all_sprites.draw(screen)
    player.draw_body(screen)

    pygame.display.flip()
    clock.tick(snake_speed)

    all_sprites.update()

pygame.quit()


