import pygame
import sys

# 初始化
pygame.init()
WIDTH, HEIGHT = 900, 500
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("pygame 课程表")

font = pygame.font.SysFont("simhei", 22)
clock = pygame.time.Clock()

# 颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (220, 220, 220)
COLORS = {
    "数学": (255, 180, 180),
    "英语": (180, 255, 180),
    "编程": (180, 200, 255),
    "物理": (255, 220, 180),
    "体育": (220, 180, 255)
}

# 课程数据（周次 → 星期 → 节次）
schedule = {
    1: {  # 第1周
        "周一": ["数学", "英语", "编程", "物理", "体育"],
        "周二": ["英语", "数学", "物理", "", "编程"],
        "周三": ["编程", "物理", "数学", "英语", ""],
        "周四": ["物理", "编程", "英语", "数学", ""],
        "周五": ["体育", "数学", "英语", "编程", "物理"]
    },
    2: {  # 第2周
        "周一": ["英语", "数学", "物理", "编程", ""],
        "周二": ["编程", "英语", "数学", "", "体育"],
        "周三": ["数学", "物理", "编程", "英语", ""],
        "周四": ["英语", "物理", "编程", "数学", ""],
        "周五": ["体育", "英语", "数学", "物理", "编程"]
    }
}

weeks = list(schedule.keys())
current_week_index = 0

DAYS = ["周一", "周二", "周三", "周四", "周五"]
PERIODS = 5

CELL_W, CELL_H = 140, 70
START_X, START_Y = 120, 80

# 绘制单元格
def draw_cell(x, y, text, color):
    pygame.draw.rect(screen, color, (x, y, CELL_W, CELL_H))
    pygame.draw.rect(screen, BLACK, (x, y, CELL_W, CELL_H), 2)
    txt = font.render(text, True, BLACK)
    screen.blit(txt, (x + 10, y + 25))

# 主循环
running = True
while running:
    screen.fill(WHITE)

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

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                current_week_index = (current_week_index - 1) % len(weeks)
            elif event.key == pygame.K_RIGHT:
                current_week_index = (current_week_index + 1) % len(weeks)

    week = weeks[current_week_index]
    data = schedule[week]

    # 标题
    title = font.render(f"第 {week} 周课程表", True, BLACK)
    screen.blit(title, (350, 30))

    # 表头（星期）
    for i, day in enumerate(DAYS):
        draw_cell(START_X + i * CELL_W, START_Y - CELL_H, day, GRAY)

    # 节次
    for p in range(PERIODS):
        period_text = f"第{p+1}节"
        pygame.draw.rect(screen, GRAY, (START_X - 80, START_Y + p * CELL_H, 80, CELL_H))
        pygame.draw.rect(screen, BLACK, (START_X - 80, START_Y + p * CELL_H, 80, CELL_H), 2)
        txt = font.render(period_text, True, BLACK)
        screen.blit(txt, (START_X - 65, START_Y + p * CELL_H + 25))

    # 课程内容
    for i, day in enumerate(DAYS):
        for j, course in enumerate(data[day]):
            color = COLORS.get(course, WHITE) if course else GRAY
            draw_cell(
                START_X + i * CELL_W,
                START_Y + j * CELL_H,
                course if course else "无课",
                color
            )

    # 操作提示
    tip = font.render("← → 切换周次", True, BLACK)
    screen.blit(tip, (350, 450))

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

pygame.quit()
sys.exit()