import pygame
import random

# Инициализация Pygame
pygame.init()

# Параметры экрана
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
PLAYER =(0, 255, 0)

# Параметры игрока и преследующего объекта
player_size = 20
enemy_size = 20
player_speed = 5
enemy_speed = 3

# Генерация лабиринта
def generate_maze(width, height):
    maze = [[random.choice([0, 1]) for _ in range(width)] for _ in range(height)]
    maze[0][0] = 0
    maze[height - 1][width - 1] = 0
    return maze

# Отрисовка лабиринта
def draw_maze(screen, maze):
    for y, row in enumerate(maze):
        for x, block in enumerate(row):
            rect = pygame.Rect(x * player_size, y * player_size, player_size, player_size)
            if block == 1:
                pygame.draw.rect(screen, BLACK, rect)
            else:
                pygame.draw.rect(screen, WHITE, rect)
                pygame.draw.rect(screen, BLACK, rect, 1)

# Проверка столкновений
def is_collision(player_pos, enemy_pos, maze):
    p_x, p_y = int(player_pos[0] // player_size), int(player_pos[1] // player_size)
    e_x, e_y = int(enemy_pos[0] // player_size), int(enemy_pos[1] // player_size)
    if maze[p_y][p_x] or maze[e_y][e_x]:
        return True
    return False

# Игровой цикл
game_over = False
clock = pygame.time.Clock()

maze = generate_maze(SCREEN_WIDTH // player_size, SCREEN_HEIGHT // player_size)
player_pos = [player_size * 2, player_size * 2]  # Начальная позиция игрока
enemy_pos = [player_size * 18, player_size * 18]  # Начальная позиция преследующего

while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True

    keys = pygame.key.get_pressed()

    # Управление игроком
    if keys[pygame.K_LEFT] and not is_collision([player_pos[0] - player_speed, player_pos[1]], enemy_pos, maze):
        player_pos[0] -= player_speed
    if keys[pygame.K_RIGHT] and not is_collision([player_pos[0] + player_speed, player_pos[1]], enemy_pos, maze):
        player_pos[0] += player_speed
    if keys[pygame.K_UP] and not is_collision([player_pos[0], player_pos[1] - player_speed], enemy_pos, maze):
        player_pos[1] -= player_speed
    if keys[pygame.K_DOWN] and not is_collision([player_pos[0], player_pos[1] + player_speed], enemy_pos, maze):
        player_pos[1] += player_speed

    # Перемещение преследующего объекта
    x_diff = player_pos[0] - enemy_pos[0]
    y_diff = player_pos[1] - enemy_pos[1]
    distance = (x_diff ** 2 + y_diff ** 2) ** 0.5

    if distance != 0:
        x_diff /= distance
        y_diff /= distance

    enemy_pos[0] += x_diff * enemy_speed
    enemy_pos[1] += y_diff * enemy_speed

    # Проверка столкновений
    def is_collision(player_pos, enemy_pos, maze):
        p_x, p_y = int(player_pos[0] // player_size), int(player_pos[1] // player_size)
        e_x, e_y = int(enemy_pos[0] // player_size), int(enemy_pos[1] // player_size)
        if maze[p_y][p_x] or maze[e_y][e_x]:
            return True
        return False


    screen.fill(WHITE)
    draw_maze(screen, maze)

    pygame.draw.rect(screen, PLAYER, (player_pos[0], player_pos[1], player_size, player_size))
    pygame.draw.rect(screen, RED, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))

    pygame.display.update()
    clock.tick(30)

pygame.quit()