import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 1000, 700
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("唐诗三百首 - 2D电子书")

clock = pygame.time.Clock()
font = pygame.font.SysFont("simhei", 28)
big_font = pygame.font.SysFont("simhei", 60)

# 页面数据
poems = [

        "静夜思\n李白\n\n床前明月光\n疑是地上霜\n举头望明月\n低头思故乡",

        "春晓\n孟浩然\n\n春眠不觉晓\n处处闻啼鸟\n夜来风雨声\n花落知多少",

        "登鹳雀楼\n王之涣\n\n白日依山尽\n黄河入海流\n欲穷千里目\n更上一层楼",

        "相思\n王维\n\n红豆生南国\n春来发几枝\n愿君多采撷\n此物最相思",

        "黄鹤楼送孟浩然之广陵\n李白\n\n故人西辞黄鹤楼\n烟花三月下扬州\n孤帆远影碧空尽\n唯见长江天际流",

        "望庐山瀑布\n李白\n\n日照香炉生紫烟\n遥看瀑布挂前川\n飞流直下三千尺\n疑是银河落九天",

        "早发白帝城\n李白\n\n朝辞白帝彩云间\n千里江陵一日还\n两岸猿声啼不住\n轻舟已过万重山",

        "送元二使安西\n王维\n\n渭城朝雨浥轻尘\n客舍青青柳色新\n劝君更尽一杯酒\n西出阳关无故人",

        "九月九日忆山东兄弟\n王维\n\n独在异乡为异客\n每逢佳节倍思亲\n遥知兄弟登高处\n遍插茱萸少一人",

        "凉州词\n王之涣\n\n黄河远上白云间\n一片孤城万仞山\n羌笛何须怨杨柳\n春风不度玉门关",

        "江雪\n柳宗元\n\n千山鸟飞绝\n万径人踪灭\n孤舟蓑笠翁\n独钓寒江雪",

        "枫桥夜泊\n张继\n\n月落乌啼霜满天\n江枫渔火对愁眠\n姑苏城外寒山寺\n夜半钟声到客船",

        "登幽州台歌\n陈子昂\n\n前不见古人\n后不见来者\n念天地之悠悠\n独怆然而涕下",

        "夜雨寄北\n李商隐\n\n君问归期未有期\n巴山夜雨涨秋池\n何当共剪西窗烛\n却话巴山夜雨时",

        "春望\n杜甫\n\n国破山河在\n城春草木深\n感时花溅泪\n恨别鸟惊心\n烽火连三月\n家书抵万金\n白头搔更短\n浑欲不胜簪"

    ]


current_page = 0
flipping = False
flip_progress = 0
direction = 1
in_cover = True


# ✅ 渐变阴影函数
def draw_shadow(x, width):
    for i in range(width):
        alpha = 120 * (1 - i / width)
        shadow = pygame.Surface((1, 460), pygame.SRCALPHA)
        shadow.fill((0, 0, 0, alpha))
        screen.blit(shadow, (x + i, 120))


# ✅ 绘制封面
def draw_cover():
    screen.fill((80, 40, 20))

    pygame.draw.rect(screen, (120, 60, 30), (200, 100, 600, 500))
    pygame.draw.rect(screen, (180, 120, 60), (220, 120, 560, 460))

    title = big_font.render("唐诗三百首", True, (255, 240, 200))
    screen.blit(title, (WIDTH // 2 - title.get_width() // 2, 300))

    tip = font.render("点击进入阅读", True, (255, 230, 180))
    screen.blit(tip, (WIDTH // 2 - tip.get_width() // 2, 400))


# ✅ 绘制书本
def draw_book(offset=0):
    screen.fill((200, 180, 150))

    # 书底
    pygame.draw.rect(screen, (120, 70, 30), (150, 100, 700, 500))

    # 左页
    pygame.draw.rect(screen, (245, 235, 210), (180, 120, 320, 460))

    # 右页
    right_x = 500 + offset
    pygame.draw.rect(screen, (245, 235, 210), (right_x, 120, 320, 460))

    # 弯曲高光
    highlight = pygame.Surface((30, 460), pygame.SRCALPHA)
    highlight.fill((255, 255, 255, 40))
    screen.blit(highlight, (right_x, 120))

    # 翻页阴影
    if flipping:
        if direction == -1:
            draw_shadow(right_x + 300, 40)
        else:
            draw_shadow(right_x, 40)


# ✅ 绘制文字
def draw_text(text):
    lines = text.split("\n")
    for i, line in enumerate(lines):
        label = font.render(line, True, (60, 40, 20))
        screen.blit(label, (520, 150 + i * 35))


# ✅ 主循环
running = True
while running:
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # 鼠标点击
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse_x, mouse_y = event.pos

            if in_cover:
                in_cover = False
            else:
                if not flipping:
                    if mouse_x > WIDTH // 2 and current_page < len(poems) - 1:
                        flipping = True
                        direction = -1
                    elif mouse_x < WIDTH // 2 and current_page > 0:
                        flipping = True
                        direction = 1

    offset = 0

    # 翻页动画
    if flipping:
        flip_progress += 20
        offset = flip_progress * direction

        if flip_progress >= 320:
            flipping = False
            flip_progress = 0
            current_page -= direction

    # ✅ 绘制界面
    if in_cover:
        draw_cover()
    else:
        draw_book(offset)
        draw_text(poems[current_page])

    pygame.display.update()

pygame.quit()
sys.exit()
