import pygame

# 初始化pygame
pygame.init()

# 地图设置
TILE_SIZE = 40    # 每个格子像素大小
MAP_WIDTH = 20    # 横向格子数
MAP_HEIGHT = 12   # 纵向格子数

# 窗口尺寸
SCREEN_WIDTH = TILE_SIZE * MAP_WIDTH
SCREEN_HEIGHT = TILE_SIZE * MAP_HEIGHT
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("二维地图界面")

# 颜色定义
COLOR_GROUND = (220, 220, 220)    # 地面
COLOR_WALL = (60, 60, 60)         # 墙壁
COLOR_PLAYER = (30, 140, 220)     # 玩家
COLOR_GRID = (100, 100, 100)      # 网格线

# 地图数据：0=空地 1=墙壁
game_map = [
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
    [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
    [1,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1],
    [1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],
    [1,0,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
    [1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1],
    [1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
    [1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
    [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
]

# 玩家初始坐标（格子坐标）
player_x, player_y = 2, 2
speed = 1

clock = pygame.time.Clock()
FPS = 60

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

    # 事件监听
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 按键移动
    keys = pygame.key.get_pressed()
    new_x, new_y = player_x, player_y
    if keys[pygame.K_UP]:
        new_y -= speed
    if keys[pygame.K_DOWN]:
        new_y += speed
    if keys[pygame.K_LEFT]:
        new_x -= speed
    if keys[pygame.K_RIGHT]:
        new_x += speed

    # 碰撞检测：不能走进墙壁
    if game_map[new_y][new_x] == 0:
        player_x, player_y = new_x, new_y

    # 绘制地图
    for y in range(MAP_HEIGHT):
        for x in range(MAP_WIDTH):
            rect = pygame.Rect(x*TILE_SIZE, y*TILE_SIZE, TILE_SIZE-1, TILE_SIZE-1)
            if game_map[y][x] == 1:
                pygame.draw.rect(screen, COLOR_WALL, rect)
            else:
                pygame.draw.rect(screen, COLOR_GROUND, rect)

    # 绘制玩家
    player_rect = pygame.Rect(
        player_x * TILE_SIZE,
        player_y * TILE_SIZE,
        TILE_SIZE,
        TILE_SIZE
    )
    pygame.draw.rect(screen, COLOR_PLAYER, player_rect)

    pygame.display.flip()

pygame.quit()