import pygame

# 初始化pygame
pygame.init()

# 配置
TILE_SIZE = 40       # 每个格子像素大小
MAP_WIDTH = 12       # 地图列数
MAP_HEIGHT = 9       # 地图行数
SCREEN_W = TILE_SIZE * MAP_WIDTH
SCREEN_H = TILE_SIZE * MAP_HEIGHT

# 颜色定义
COLOR_GROUND = (80,180,80)   # 地面绿色
COLOR_WALL = (60,60,60)      # 墙壁灰色
COLOR_PLAYER = (220,50,50)   # 玩家红色
COLOR_GRID = (30,30,30)      # 网格线

# 二维地图数组：1=墙，0=地面
game_map = [
    [1,1,1,1,1,1,1,1,1,1,1,1],
    [1,0,0,0,1,0,0,0,0,0,0,1],
    [1,0,1,0,1,0,1,1,1,1,0,1],
    [1,0,1,0,0,0,0,0,0,1,0,1],
    [1,0,1,1,1,1,1,1,0,1,0,1],
    [1,0,0,0,0,0,0,0,0,0,0,1],
    [1,1,1,1,0,1,1,1,1,1,0,1],
    [1,0,0,0,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1,1,1],
]

# 玩家初始位置（格子坐标）
player_grid_x = 1
player_grid_y = 1
player_speed = 1

screen = pygame.display.set_mode((SCREEN_W, SCREEN_H))
pygame.display.set_caption("Pygame二维地图")
clock = pygame.time.Clock()

# 绘制地图
def draw_map():
    for row_idx, row in enumerate(game_map):
        for col_idx, tile in enumerate(row):
            x = col_idx * TILE_SIZE
            y = row_idx * TILE_SIZE
            rect = pygame.Rect(x, y, TILE_SIZE, TILE_SIZE)
            if tile == 1:
                pygame.draw.rect(screen, COLOR_WALL, rect)
            else:
                pygame.draw.rect(screen, COLOR_GROUND, rect)
            # 网格边框
            pygame.draw.rect(screen, COLOR_GRID, rect, 1)

# 判断是否可以行走（碰撞检测）
def can_move(gx, gy):
    # 边界检查
    if 0 <= gy < MAP_HEIGHT and 0 <= gx < MAP_WIDTH:
        return game_map[gy][gx] == 0
    return False

running = True
while running:
    screen.fill((0,0,0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 按键移动
    keys = pygame.key.get_pressed()
    if keys[pygame.K_UP]:
        if can_move(player_grid_x, player_grid_y - 1):
            player_grid_y -= player_speed
    if keys[pygame.K_DOWN]:
        if can_move(player_grid_x, player_grid_y + 1):
            player_grid_y += player_speed
    if keys[pygame.K_LEFT]:
        if can_move(player_grid_x - 1, player_grid_y):
            player_grid_x -= player_speed
    if keys[pygame.K_RIGHT]:
        if can_move(player_grid_x + 1, player_grid_y):
            player_grid_x += player_speed

    # 渲染地图
    draw_map()
    # 绘制玩家
    px = player_grid_x * TILE_SIZE
    py = player_grid_y * TILE_SIZE
    player_rect = pygame.Rect(px+4, py+4, TILE_SIZE-8, TILE_SIZE-8)
    pygame.draw.rect(screen, COLOR_PLAYER, player_rect)

    pygame.display.flip()
    clock.tick(10)

pygame.quit()
