import pygame
import sys

# ==========【自定义迷宫区域，在这里改地图】==========
# 规则：1=墙壁(黑)  0=通路(白)
# 自行增减行列、修改数字就能换迷宫
MY_MAZE = [
    [1,1,1,1,1,1,1,1,1,1,1],
    [1,0,0,0,1,0,0,0,0,0,1],
    [1,0,1,0,1,0,1,1,1,0,1],
    [1,0,1,0,0,0,0,0,1,0,1],
    [1,0,1,1,1,1,1,0,1,0,1],
    [1,0,0,0,0,0,1,0,0,0,1],
    [1,1,1,1,1,0,1,1,1,0,1],
    [1,0,0,0,1,0,0,0,1,0,1],
    [1,0,1,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1,1],
]
# 起点坐标(通路位置)、终点坐标(通路位置)【自行修改】
START_X, START_Y = 1, 1
END_X, END_Y = 9, 8
# ==============================================

pygame.init()
CELL = 45  # 格子大小，可调
MAP_H = len(MY_MAZE)
MAP_W = len(MY_MAZE[0])
W, H = MAP_W * CELL, MAP_H * CELL
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("自定义迷宫小游戏")

# 颜色
BLACK = (20,20,20)
WHITE = (255,255,255)
RED = (230,30,30)
GREEN = (20,200,50)
GRAY = (60,60,60)

# 玩家坐标
px, py = START_X, START_Y
clock = pygame.time.Clock()

def draw_maze():
    screen.fill(GRAY)
    # 绘制墙和路
    for y in range(MAP_H):
        for x in range(MAP_W):
            rect = pygame.Rect(x*CELL, y*CELL, CELL-2, CELL-2)
            if MY_MAZE[y][x] == 1:
                pygame.draw.rect(screen, BLACK, rect)
            else:
                pygame.draw.rect(screen, WHITE, rect)
    # 终点
    end_rect = pygame.Rect(END_X*CELL, END_Y*CELL, CELL-2, CELL-2)
    pygame.draw.rect(screen, GREEN, end_rect)
    # 玩家圆球
    cx = px * CELL + CELL//2
    cy = py * CELL + CELL//2
    pygame.draw.circle(screen, RED, (cx, cy), CELL//2 - 5)

def reset_game():
    """重置回起点，通关后调用"""
    global px, py
    px, py = START_X, START_Y

run = True
win_flag = False
while run:
    draw_maze()

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

        # 按键移动
        if event.type == pygame.KEYDOWN:
            nx, ny = px, py
            if event.key == pygame.K_UP:
                ny -= 1
            elif event.key == pygame.K_DOWN:
                ny += 1
            elif event.key == pygame.K_LEFT:
                nx -= 1
            elif event.key == pygame.K_RIGHT:
                nx += 1
            # 判定不是墙才能走
            if MY_MAZE[ny][nx] == 0:
                px, py = nx, ny

            # 到达终点
            if px == END_X and py == END_Y and not win_flag:
                win_flag = True
                pygame.display.set_caption("恭喜通关！按任意方向键重新开始")
            # 通关后按键重置游戏
            if win_flag:
                reset_game()
                win_flag = False
                pygame.display.set_caption("自定义迷宫小游戏")

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

pygame.quit()
sys.exit()