import tkinter as tk
from tkinter import messagebox

# ------------------------------ 题库数据 ------------------------------
RIDDLES = [
    {"question": "什么东西越洗越脏？", "answer": "水"},
    {"question": "什么东西破裂后，即使是沉默也能被听见？", "answer": "沉默"},
    {"question": "有一个人一年只上一天班，却从来不会被解雇，他是谁？", "answer": "圣诞老人"},
    {"question": "什么东西晚上才会生出尾巴？", "answer": "流星"},
    {"question": "什么东西不能吃，却能让你吃饱？", "answer": "亏（吃亏）"},
    {"question": "什么东西买的时候是黑色的，用的时候是红色的，扔掉的时候是灰色的？", "answer": "炭"},
    {"question": "什么东西越热越爱出来？", "answer": "汗"},
    {"question": "什么东西你越用它，它就越小？", "answer": "橡皮擦"},
    {"question": "什么东西不能摸，却能摸到？", "answer": "边缘（摸着边缘）"},
    {"question": "什么东西明明是自己的，但别人用得却比自己多？", "answer": "名字"},
    {"question": "什么东西能够被劈开，却不会受到损伤？", "answer": "头发"},
    {"question": "什么东西能够一次性把我们全部都打倒？", "answer": "瞌睡"},
    {"question": "什么东西越分越少，分到最后什么都没有了？", "answer": "分数"},
    {"question": "什么东西能载得动千斤重，却载不动一粒沙子？", "answer": "眼睛（眼睫毛）"},
    {"question": "什么东西只有你越努力，它才会越轻松？", "answer": "考试（越努力复习，考试越轻松）"},
    {"question": "什么东西你不想得到，却总是得到？", "answer": "年龄"},
]

class RiddleGame:
    def __init__(self, root):
        self.root = root
        self.root.title("🤔 脑筋急转弯 · 益智小游戏 🤔")
        self.root.geometry("560x500")
        self.root.resizable(False, False)
        self.root.configure(bg='#fdf6e3')

        # 游戏状态
        self.current_index = 0          # 当前第几题（0开始）
        self.score = 0                  # 得分（每答对一题+10）
        self.total = len(RIDDLES)

        # ---------- 界面组件 ----------
        # 标题
        title_label = tk.Label(
            root, text="🧠 脑筋急转弯挑战赛 🧠",
            font=('微软雅黑', 18, 'bold'),
            bg='#fdf6e3', fg='#b85c00'
        )
        title_label.pack(pady=15)

        # 得分与进度栏
        info_frame = tk.Frame(root, bg='#fdf6e3')
        info_frame.pack(fill=tk.X, padx=20, pady=5)

        self.score_label = tk.Label(
            info_frame, text=f"🏆 得分：{self.score}",
            font=('微软雅黑', 11), bg='#fdf6e3', fg='#2d6a4f'
        )
        self.score_label.pack(side=tk.LEFT)

        self.progress_label = tk.Label(
            info_frame, text=f"📌 进度：第 {self.current_index+1} / {self.total} 题",
            font=('微软雅黑', 11), bg='#fdf6e3', fg='#1e6091'
        )
        self.progress_label.pack(side=tk.RIGHT)

        # 题目区域 (带背景框)
        question_frame = tk.Frame(root, bg='#fff3cd', bd=2, relief=tk.GROOVE)
        question_frame.pack(pady=15, padx=20, fill=tk.X)

        self.question_label = tk.Label(
            question_frame, text="", font=('楷体', 14),
            bg='#fff3cd', fg='#7f4f24', wraplength=500, justify=tk.CENTER
        )
        self.question_label.pack(pady=20, padx=20)

        # 输入答案区域
        input_frame = tk.Frame(root, bg='#fdf6e3')
        input_frame.pack(pady=10)

        tk.Label(
            input_frame, text="✍️ 你的答案：", font=('微软雅黑', 11),
            bg='#fdf6e3', fg='#4b4b4b'
        ).pack(side=tk.LEFT, padx=5)

        self.answer_entry = tk.Entry(
            input_frame, font=('微软雅黑', 11), width=25,
            relief=tk.SUNKEN, bd=2
        )
        self.answer_entry.pack(side=tk.LEFT, padx=5)
        self.answer_entry.bind("<Return>", lambda e: self.check_answer())  # 回车提交

        # 按钮区域
        btn_frame = tk.Frame(root, bg='#fdf6e3')
        btn_frame.pack(pady=15)

        self.check_btn = tk.Button(
            btn_frame, text="🔍 提交答案", font=('微软雅黑', 11, 'bold'),
            bg='#e9c46a', fg='#3b3b3b', padx=15, pady=5,
            command=self.check_answer, relief=tk.RAISED
        )
        self.check_btn.pack(side=tk.LEFT, padx=10)

        self.next_btn = tk.Button(
            btn_frame, text="➡️ 下一题", font=('微软雅黑', 11, 'bold'),
            bg='#52b788', fg='white', padx=15, pady=5,
            command=self.next_question, state=tk.DISABLED, relief=tk.RAISED
        )
        self.next_btn.pack(side=tk.LEFT, padx=10)

        self.restart_btn = tk.Button(
            btn_frame, text="🔄 重新开始", font=('微软雅黑', 10),
            bg='#e76f51', fg='white', padx=10, pady=5,
            command=self.restart_game, relief=tk.RAISED
        )
        self.restart_btn.pack(side=tk.LEFT, padx=10)

        # 结果反馈区域
        self.result_label = tk.Label(
            root, text="💡 输入答案后点击「提交答案」开始挑战吧！",
            font=('微软雅黑', 10), bg='#fdf6e3', fg='#b5835a',
            wraplength=500, justify=tk.CENTER
        )
        self.result_label.pack(pady=10, fill=tk.X, padx=20)

        # 显示第一题
        self.load_question()

    # ---------- 功能函数 ----------
    def load_question(self):
        """加载当前索引对应的题目，并清空输入框、恢复界面状态"""
        q_text = RIDDLES[self.current_index]["question"]
        self.question_label.config(text=f"❓ {q_text} ❓")
        self.answer_entry.delete(0, tk.END)
        self.answer_entry.config(state=tk.NORMAL)
        self.check_btn.config(state=tk.NORMAL)
        self.next_btn.config(state=tk.DISABLED)
        self.result_label.config(text="🤔 思考一下，输入你的答案～", fg='#b5835a')
        self.answer_entry.focus_set()

        # 更新进度标签
        self.progress_label.config(text=f"📌 进度：第 {self.current_index+1} / {self.total} 题")

    def check_answer(self):
        """检查当前答案是否正确，更新分数和反馈"""
        if self.check_btn['state'] == tk.DISABLED:
            return  # 防止重复提交

        user_input = self.answer_entry.get().strip()
        correct_ans = RIDDLES[self.current_index]["answer"]

        if not user_input:
            self.result_label.config(text="⚠️ 答案不能为空，再试试吧！", fg='#d62828')
            return

        # 忽略大小写和前后空格，中文答案直接比较
        if user_input.lower() == correct_ans.lower():
            # 答对，且本题未加分过（防止第二次提交重复加分）
            # 通过检查 check_btn 是否可用确保只加分一次
            self.score += 10
            self.update_score()
            self.result_label.config(text=f"✅ 完全正确！ +10分  正确答案：「{correct_ans}」", fg='#2d6a4f')
        else:
            self.result_label.config(text=f"❌ 可惜不对… 正确答案是：「{correct_ans}」", fg='#d62828')

        # 禁用提交按钮，启用下一题按钮
        self.check_btn.config(state=tk.DISABLED)
        self.answer_entry.config(state=tk.DISABLED)
        self.next_btn.config(state=tk.NORMAL)

    def next_question(self):
        """加载下一题，或者完成所有题目后显示结束画面"""
        if self.current_index + 1 < self.total:
            self.current_index += 1
            self.load_question()
        else:
            # 所有题目已完成，显示最终得分并询问是否重新开始
            percentage = (self.score / (self.total * 10)) * 100
            msg = f"🎉 恭喜你完成了所有题目！ 🎉\n\n最终得分：{self.score} / {self.total*10}\n正确率：{percentage:.1f}%\n\n是否重新开始挑战？"
            if messagebox.askyesno("游戏结束", msg):
                self.restart_game()
            else:
                self.root.quit()

    def update_score(self):
        """刷新得分标签"""
        self.score_label.config(text=f"🏆 得分：{self.score}")

    def restart_game(self):
        """重置所有状态，从第一题开始"""
        self.current_index = 0
        self.score = 0
        self.update_score()
        # 重新加载第一题
        self.load_question()
        # 确保进度标签更新
        self.progress_label.config(text=f"📌 进度：第 1 / {self.total} 题")
        self.result_label.config(text="✨ 游戏已重置，加油哦！ ✨", fg='#b5835a')

# ------------------------------ 主程序 ------------------------------
if __name__ == "__main__":
    root = tk.Tk()
    game = RiddleGame(root)
    root.mainloop()