import tkinter as tk
from tkinter import font as tkfont
import random

# --- 1. 唐诗数据 (典藏版，共32首) ---
TANG_POEMS_DATA = [
    # 原始诗歌
    {"title": "静夜思", "author": "李白", "content": ["床前明月光", "疑是地上霜", "举头望明月", "低头思故乡"]},
    {"title": "登鹳雀楼", "author": "王之涣", "content": ["白日依山尽", "黄河入海流", "欲穷千里目", "更上一层楼"]},
    {"title": "春晓", "author": "孟浩然", "content": ["春眠不觉晓", "处处闻啼鸟", "夜来风雨声", "花落知多少"]},
    {"title": "悯农", "author": "李绅", "content": ["锄禾日当午", "汗滴禾下土", "谁知盘中餐", "粒粒皆辛苦"]},
    {"title": "咏鹅", "author": "骆宾王", "content": ["鹅鹅鹅", "曲项向天歌", "白毛浮绿水", "红掌拨清波"]},
    {"title": "相思", "author": "王维", "content": ["红豆生南国", "春来发几枝", "愿君多采撷", "此物最相思"]},
    {"title": "鹿柴", "author": "王维", "content": ["空山不见人", "但闻人语响", "返景入深林", "复照青苔上"]},
    
    # 第二批新增
    {"title": "绝句", "author": "杜甫", "content": ["两个黄鹂鸣翠柳", "一行白鹭上青天", "窗含西岭千秋雪", "门泊东吴万里船"]},
    {"title": "赠汪伦", "author": "李白", "content": ["李白乘舟将欲行", "忽闻岸上踏歌声", "桃花潭水深千尺", "不及汪伦送我情"]},
    {"title": "清明", "author": "杜牧", "content": ["清明时节雨纷纷", "路上行人欲断魂", "借问酒家何处有", "牧童遥指杏花村"]},
    {"title": "江雪", "author": "柳宗元", "content": ["千山鸟飞绝", "万径人踪灭", "孤舟蓑笠翁", "独钓寒江雪"]},
    {"title": "回乡偶书", "author": "贺知章", "content": ["少小离家老大回", "乡音无改鬓毛衰", "儿童相见不相识", "笑问客从何处来"]},
    
    # 第三批新增
    {"title": "九月九日忆山东兄弟", "author": "王维", "content": ["独在异乡为异客", "每逢佳节倍思亲", "遥知兄弟登高处", "遍插茱萸少一人"]},
    {"title": "早发白帝城", "author": "李白", "content": ["朝辞白帝彩云间", "千里江陵一日还", "两岸猿声啼不住", "轻舟已过万重山"]},
    {"title": "山行", "author": "杜牧", "content": ["远上寒山石径斜", "白云生处有人家", "停车坐爱枫林晚", "霜叶红于二月花"]},
    {"title": "赋得古原草送别", "author": "白居易", "content": ["离离原上草", "一岁一枯荣", "野火烧不尽", "春风吹又生"]},
    {"title": "风", "author": "李峤", "content": ["解落三秋叶", "能开二月花", "过江千尺浪", "入竹万竿斜"]},
    {"title": "出塞", "author": "王昌龄", "content": ["秦时明月汉时关", "万里长征人未还", "但使龙城飞将在", "不教胡马度阴山"]},
    {"title": "芙蓉楼送辛渐", "author": "王昌龄", "content": ["寒雨连江夜入吴", "平明送客楚山孤", "洛阳亲友如相问", "一片冰心在玉壶"]},
    {"title": "宿建德江", "author": "孟浩然", "content": ["移舟泊烟渚", "日暮客愁新", "野旷天低树", "江清月近人"]},
    {"title": "寻隐者不遇", "author": "贾岛", "content": ["松下问童子", "言师採药去", "只在此山中", "云深不知处"]},
    {"title": "乌衣巷", "author": "刘禹锡", "content": ["朱雀桥边野草花", "乌衣巷口夕阳斜", "旧时王谢堂前燕", "飞入寻常百姓家"]},

    # --- 本次新增的10首诗歌 (典藏版) ---
    {"title": "春望", "author": "杜甫", "content": ["国破山河在", "城春草木深", "感时花溅泪", "恨别鸟惊心"]},
    {"title": "望庐山瀑布", "author": "李白", "content": ["日照香炉生紫烟", "遥看瀑布挂前川", "飞流直下三千尺", "疑是银河落九天"]},
    {"title": "黄鹤楼送孟浩然之广陵", "author": "李白", "content": ["故人西辞黄鹤楼", "烟花三月下扬州", "孤帆远影碧空尽", "唯见长江天际流"]},
    {"title": "凉州词", "author": "王之涣", "content": ["黄河远上白云间", "一片孤城万仞山", "羌笛何须怨杨柳", "春风不度玉门关"]},
    {"title": "送元二使安西", "author": "王维", "content": ["渭城朝雨浥轻尘", "客舍青青柳色新", "劝君更尽一杯酒", "西出阳关无故人"]},
    {"title": "泊秦淮", "author": "杜牧", "content": ["烟笼寒水月笼沙", "夜泊秦淮近酒家", "商女不知亡国恨", "隔江犹唱后庭花"]},
    {"title": "登乐游原", "author": "李商隐", "content": ["向晚意不适", "驱车登古原", "夕阳无限好", "只是近黄昏"]},
    {"title": "枫桥夜泊", "author": "张继", "content": ["月落乌啼霜满天", "江枫渔火对愁眠", "姑苏城外寒山寺", "夜半钟声到客船"]},
    {"title": "题都城南庄", "author": "崔护", "content": ["去年今日此门中", "人面桃花相映红", "人面不知何处去", "桃花依旧笑春风"]},
    {"title": "春夜喜雨", "author": "杜甫", "content": ["好雨知时节", "当春乃发生", "随风潜入夜", "润物细无声"]},
]

# --- 2. 核心游戏逻辑函数 (无需改动) ---
def hide_character_in_line(line):
    """从一行诗句中随机隐藏一个字，返回 (修改后的诗句, 被隐藏的字)"""
    punctuation = '，。？！、：；“”‘’（）【】—…'
    hideable_indices = [i for i, char in enumerate(line) if char not in punctuation and char.strip()]
    if not hideable_indices:
        return line, None
    hidden_idx = random.choice(hideable_indices)
    hidden_char = line[hidden_idx]
    modified_line = list(line)
    modified_line[hidden_idx] = "____"
    return "".join(modified_line), hidden_char

# --- 3. GUI 应用类 (无需改动) ---
class PoetryGameApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗填字游戏")
        self.root.geometry("550x480")
        self.root.resizable(False, False)
        self.root.configure(bg="#F5F5F5")

        self.title_font = tkfont.Font(family="楷体", size=20, weight="bold")
        self.poem_font = tkfont.Font(family="宋体", size=16)
        self.ui_font = tkfont.Font(family="黑体", size=12)

        self.score = 0
        self.rounds = 0
        self.hidden_char = None
        self.original_line = None

        self._create_widgets()
        self.next_round()

    def _create_widgets(self):
        main_frame = tk.Frame(self.root, padx=20, pady=20, bg="#F5F5F5")
        main_frame.pack(expand=True, fill=tk.BOTH)

        self.score_label = tk.Label(main_frame, text="得分: 0 / 0", font=self.ui_font, bg="#F5F5F5")
        self.score_label.pack(pady=(0, 10))

        self.title_label = tk.Label(main_frame, text="", font=self.title_font, bg="#F5F5F5")
        self.title_label.pack(pady=(5, 15))

        self.poem_label = tk.Label(main_frame, text="", font=self.poem_font, justify=tk.LEFT, height=5, bg="#FFFFFF", relief="solid", borderwidth=1, padx=10, pady=10)
        self.poem_label.pack(pady=10, fill=tk.X)

        input_frame = tk.Frame(main_frame, bg="#F5F5F5")
        input_frame.pack(pady=15)

        tk.Label(input_frame, text="请填入缺失的字:", font=self.ui_font, bg="#F5F5F5").pack(side=tk.LEFT, padx=(0, 10))
        self.answer_entry = tk.Entry(input_frame, font=self.poem_font, width=4, justify=tk.CENTER, relief="solid")
        self.answer_entry.pack(side=tk.LEFT)
        self.answer_entry.bind("<Return>", lambda event: self.check_answer())

        button_frame = tk.Frame(main_frame, bg="#F5F5F5")
        button_frame.pack(pady=10)

        self.submit_button = tk.Button(button_frame, text="提 交", font=self.ui_font, command=self.check_answer, width=10, bg="#4CAF50", fg="white", relief="raised")
        self.submit_button.pack(side=tk.LEFT, padx=10)

        self.next_button = tk.Button(button_frame, text="下一题", font=self.ui_font, command=self.next_round, width=10, bg="#2196F3", fg="white", relief="raised")
        self.next_button.pack(side=tk.LEFT, padx=10)

        self.feedback_label = tk.Label(main_frame, text="欢迎来到游戏！", font=self.ui_font, bg="#F5F5F5", height=2)
        self.feedback_label.pack(pady=(10, 0))

    def next_round(self):
        self.answer_entry.delete(0, tk.END)
        self.answer_entry.config(state=tk.NORMAL)
        self.submit_button.config(state=tk.NORMAL)
        self.next_button.config(state=tk.DISABLED)
        self.feedback_label.config(text="")
        self.answer_entry.focus_set()

        poem = random.choice(TANG_POEMS_DATA)
        content = poem["content"]
        
        line_to_hide_idx = random.randrange(len(content))
        self.original_line = content[line_to_hide_idx]

        modified_line, self.hidden_char = hide_character_in_line(self.original_line)
        while self.hidden_char is None:
            line_to_hide_idx = random.randrange(len(content))
            self.original_line = content[line_to_hide_idx]
            modified_line, self.hidden_char = hide_character_in_line(self.original_line)

        self.title_label.config(text=f"《{poem['title']}》 - {poem['author']}")
        
        display_content = content[:]
        display_content[line_to_hide_idx] = modified_line
        self.poem_label.config(text="\n".join(display_content))

    def check_answer(self):
        guess = self.answer_entry.get().strip()
        if not guess:
            self.feedback_label.config(text="请输入一个字！", fg="orange")
            return

        self.rounds += 1
        is_correct = (guess == self.hidden_char)

        if is_correct:
            self.score += 1
            self.feedback_label.config(text=f"🎉 恭喜你，答对了！就是“{self.hidden_char}”字。", fg="green")
        else:
            self.feedback_label.config(text=f"😥 答错了。正确答案是“{self.hidden_char}”。\n原句: {self.original_line}", fg="red")

        self.score_label.config(text=f"得分: {self.score} / {self.rounds}")

        self.answer_entry.config(state=tk.DISABLED)
        self.submit_button.config(state=tk.DISABLED)
        self.next_button.config(state=tk.NORMAL)
        self.next_button.focus_set()

# --- 4. 启动游戏 (无需改动) ---
if __name__ == "__main__":
    root = tk.Tk()
    app = PoetryGameApp(root)
    root.mainloop()