import tkinter as tk
from tkinter import messagebox
import random

# 成语词库（可自行扩充）
IDIOMS = [
    "一帆风顺", "两全其美", "三心二意", "四面八方", "五光十色",
    "六六大顺", "七上八下", "八面玲珑", "九牛一毛", "十全十美",
    "春暖花开", "暗度陈仓", "表里如一", "乘风破浪", "大公无私",
    "得心应手", "风花雪月", "高山流水", "海阔天空", "金玉满堂",
    "乐极生悲", "马到成功", "年年有余", "鹏程万里", "气宇轩昂",
    "人山人海", "世外桃源", "天高地厚", "万事如意", "喜出望外",
    "心想事成", "星光灿烂", "一叶知秋", "智勇双全", "自强不息"
]

class IdiomGame:
    def __init__(self, root):
        self.root = root
        self.root.title("成语接龙小游戏")
        self.root.geometry("500x350")
        self.root.resizable(False, False)

        # 游戏变量
        self.current_idiom = ""   # 当前接龙成语
        self.score = 0            # 分数
        self.game_start = False   # 游戏状态

        # 界面组件
        self.create_widgets()
        # 初始化游戏
        self.reset_game()

    def create_widgets(self):
        # 标题
        title_label = tk.Label(self.root, text="成语接龙", font=("微软雅黑", 20, "bold"))
        title_label.pack(pady=10)

        # 显示当前成语
        self.current_label = tk.Label(self.root, text="等待开始游戏", font=("微软雅黑", 16), fg="blue")
        self.current_label.pack(pady=5)

        # 提示文字
        self.tip_label = tk.Label(self.root, text="请输入下一个成语（最后一个字接下一个第一个字）", font=("微软雅黑", 10))
        self.tip_label.pack(pady=5)

        # 输入框
        self.entry = tk.Entry(self.root, font=("微软雅黑", 14), width=25)
        self.entry.pack(pady=10)
        self.entry.bind("<Return>", self.check_idiom)  # 回车提交

        # 分数显示
        self.score_label = tk.Label(self.root, text=f"当前分数：{self.score}", font=("微软雅黑", 12))
        self.score_label.pack(pady=5)

        # 按钮区域
        frame = tk.Frame(self.root)
        frame.pack(pady=15)

        tk.Button(frame, text="提交答案", command=self.check_idiom, font=("微软雅黑", 11), width=8).grid(row=0, column=0, padx=10)
        tk.Button(frame, text="重新开始", command=self.reset_game, font=("微软雅黑", 11), width=8).grid(row=0, column=1, padx=10)
        tk.Button(frame, text="结束游戏", command=self.root.quit, font=("微软雅黑", 11), width=8).grid(row=0, column=2, padx=10)

    def reset_game(self):
        """重置/开始游戏"""
        self.score = 0
        self.game_start = True
        # 随机选取开局成语
        self.current_idiom = random.choice(IDIOMS)
        self.current_label.config(text=f"当前成语：{self.current_idiom}")
        self.score_label.config(text=f"当前分数：{self.score}")
        self.entry.delete(0, tk.END)
        self.entry.focus()

    def check_idiom(self, event=None):
        """校验输入的成语"""
        if not self.game_start:
            messagebox.showwarning("提示", "请先点击【重新开始】开启游戏！")
            return

        user_input = self.entry.get().strip()
        if not user_input:
            messagebox.showwarning("提示", "请输入成语！")
            return

        # 规则1：必须是词库内成语
        if user_input not in IDIOMS:
            messagebox.showerror("错误", "该成语不存在，请重新输入！")
            self.entry.delete(0, tk.END)
            return

        # 规则2：接龙匹配：上一个最后一字 == 当前第一个字
        last_char = self.current_idiom[-1]
        first_char = user_input[0]
        if last_char != first_char:
            messagebox.showerror("接龙失败", f"需要以【{last_char}】开头哦！")
            self.entry.delete(0, tk.END)
            return

        # 接龙成功
        self.score += 1
        self.current_idiom = user_input
        self.current_label.config(text=f"当前成语：{self.current_idiom}")
        self.score_label.config(text=f"当前分数：{self.score}")
        self.entry.delete(0, tk.END)

if __name__ == "__main__":
    main_root = tk.Tk()
    game = IdiomGame(main_root)
    main_root.mainloop()