import random
import pygame

width = 1280
height = 850
fps = 60

white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
skyblue = (135, 206, 235)

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("змек")
clock = pygame.time.Clock()


class Snak(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((snake_block,snake_block))
        self.image.fill(skyblue)
        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.lenght = 1
        self.score = 0
    def update(self):
        self.rect.y += self.by
        self.rect.x += self.bx

        self.body.append([self.rect.y, self.rect.x])
        if len(self.body) > self.lenght:
            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 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(green)
        self.rect = self.image.get_rect()
        self.respawn()

    def respawn(self):
        self.rect.x = random.randrange(0, 480-snake_block, snake_block)
        self.rect.y = random.randrange(0, 600-snake_block,snake_block)




snake_block = 10
snake_speed = 15

all_sprites = pygame.sprite.Group()
foods = pygame.sprite.Group()
player = Snak()
apple = Food()
all_sprites.add(player,apple)
foods.add(apple)


running = True
while running:
    clock.tick(fps)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        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 > width or player.rect.y < 0 or player.rect.y > height):
            running = False

        if pygame.sprite.spritecollaide(player, foods, True):
            player.grow()
            new_food = Food()
            all_sprites.add(new_food)
            foods.add(new_food)

    all_sprites.update()

    screen.fill(white)
    all_sprites.draw(screen)
    pygame.display.flip()

pygame.quit()





