"""
Урок 4: кирпичи!
Новое: список кирпичей (как список в Змейке), ломаем кирпич при попадании, счёт.
"""
import pygame, sys

WIDTH, HEIGHT = 600, 400
BG = (30, 30, 46)
WHITE = (234, 234, 234)
GREEN = (22, 196, 127)
BALL_COLOR = (255, 209, 102)
BRICK_COLORS = [(255, 107, 107), (255, 165, 89), (255, 209, 102),
                (106, 205, 140), (108, 178, 255)]

pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Арканоид")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 36)

PADDLE_W, PADDLE_H = 90, 14
paddle_x = WIDTH // 2 - PADDLE_W // 2
paddle_y = HEIGHT - 30

BALL_R = 8
bx, by = WIDTH / 2, HEIGHT / 2
dx, dy = 4.0, 4.0
score = 0

# Делаем стену кирпичей — список прямоугольников
COLS, ROWS = 10, 5
BRICK_W = WIDTH // COLS
BRICK_H = 24
GAP = 3
TOP = 40
bricks = []
for row in range(ROWS):
    for col in range(COLS):
        x = col * BRICK_W + GAP
        y = TOP + row * BRICK_H + GAP
        bricks.append(pygame.Rect(x, y, BRICK_W - GAP * 2, BRICK_H - GAP * 2))

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        paddle_x -= 8
    if keys[pygame.K_RIGHT]:
        paddle_x += 8
    paddle_x = max(0, min(paddle_x, WIDTH - PADDLE_W))
    paddle = pygame.Rect(paddle_x, paddle_y, PADDLE_W, PADDLE_H)

    bx += dx
    by += dy
    if bx < BALL_R or bx > WIDTH - BALL_R:
        dx = -dx
    if by < BALL_R:
        dy = -dy

    ball_rect = pygame.Rect(bx - BALL_R, by - BALL_R, BALL_R * 2, BALL_R * 2)

    if ball_rect.colliderect(paddle) and dy > 0:
        dy = -dy
        hit = (bx - (paddle_x + PADDLE_W / 2)) / (PADDLE_W / 2)
        dx = 5 * hit

    # Проверяем каждый кирпич: попали — убираем и отскакиваем
    for brick in bricks:
        if ball_rect.colliderect(brick):
            bricks.remove(brick)
            dy = -dy
            score += 1
            break        # один кирпич за кадр

    if by > HEIGHT:
        bx, by = WIDTH / 2, HEIGHT / 2
        dx, dy = 4.0, 4.0

    screen.fill(BG)
    for brick in bricks:
        row = (brick.y - TOP) // BRICK_H
        pygame.draw.rect(screen, BRICK_COLORS[row % len(BRICK_COLORS)], brick)
    pygame.draw.rect(screen, GREEN, (paddle_x, paddle_y, PADDLE_W, PADDLE_H), border_radius=6)
    pygame.draw.circle(screen, BALL_COLOR, (int(bx), int(by)), BALL_R)
    hud = font.render(f"Очки: {score}", True, WHITE)
    screen.blit(hud, (12, 8))
    pygame.display.flip()
    clock.tick(60)
