import pygame
import random
import sys

# ========= 参数 =========
CELL = 30
COLS, ROWS = 21, 15
WIDTH, HEIGHT = COLS * CELL, ROWS * CELL

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
WALL = (50, 50, 200)
PLAYER = (0, 200, 0)
EXIT = (200, 0, 0)

# ========= 生成迷宫 =========
maze = [[1 for _ in range(COLS)] for _ in range(ROWS)]

def dfs(cx, cy):
    maze[cy][cx] = 0
    dirs = [(2,0), (-2,0), (0,2), (0,-2)]
    random.shuffle(dirs)
    for dx, dy in dirs:
        nx, ny = cx + dx, cy + dy
        if 0 <= nx < COLS and 0 <= ny < ROWS and maze[ny][nx] == 1:
            maze[cy + dy // 2][cx + dx // 2] = 0
            dfs(nx, ny)

dfs(1, 1)
maze[1][0] = 0       # 入口
maze[ROWS-2][COLS-1] = 0  # 出口

player = [1, 0]     # [x, y]
exit_pos = [COLS-1, ROWS-2]

# ========= Pygame =========
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("迷宫游戏（已修复）")
clock = pygame.time.Clock()

running = True
while running:
    clock.tick(30)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            x, y = player

            if event.key == pygame.K_UP and y > 0 and maze[y-1][x] == 0:
                player[1] -= 1
            elif event.key == pygame.K_DOWN and y < ROWS-1 and maze[y+1][x] == 0:
                player[1] += 1
            elif event.key == pygame.K_LEFT and x > 0 and maze[y][x-1] == 0:
                player[0] -= 1
            elif event.key == pygame.K_RIGHT and x < COLS-1 and maze[y][x+1] == 0:
                player[0] += 1

    screen.fill(BLACK)

    # 画墙
    for y in range(ROWS):
        for x in range(COLS):
            if maze[y][x] == 1:
                pygame.draw.rect(screen, WALL, (x*CELL, y*CELL, CELL, CELL))

    # 画终点
    pygame.draw.rect(screen, EXIT, (exit_pos[0]*CELL, exit_pos[1]*CELL, CELL, CELL))

    # 画玩家
    pygame.draw.circle(
        screen, PLAYER,
        (player[0]*CELL + CELL//2, player[1]*CELL + CELL//2),
        CELL//2 - 2
    )

    pygame.display.flip()

pygame.quit()
sys.exit()