import tkinter as tk
from tkinter import ttk, messagebox
import random

# 成语库
idiom_list = [
    "一帆风顺", "二话不说", "三心二意", "四面八方", "五光十色",
    "六神无主", "七上八下", "八面玲珑", "九牛一毛", "十全十美",
    "百花齐放", "千方百计", "万紫千红", "春暖花开", "山清水秀",
    "秀外慧中", "中流砥柱", "柱石之坚", "坚贞不屈", "屈指可数",
    "数典忘祖", "祖功宗德", "德高望重", "重情重义", "义薄云天",
    "天经地义", "义不容辞", "辞旧迎新", "欣欣向荣", "荣归故里",
    "里应外合", "合二为一", "一鸣惊人", "人山人海", "海阔天空",
    "空穴来风", "风调雨顺", "顺理成章", "章台杨柳", "柳暗花明",
    "明察秋毫", "毫发无损", "损人利己", "己所不欲", "欲罢不能",
    "能言善辩", "辩才无碍", "碍手碍脚", "脚踏实地", "地大物博"
]

class IdiomGame:
    def __init__(self, root):
        self.root = root
        self.root.title("成语接龙")
        self.root.geometry("500x400")

        self.start_idiom = ""
        self.last_char = ""
        self.history = []

        # 界面组件
        frame = ttk.Frame(root, padding=20)
        frame.pack(fill=tk.BOTH, expand=True)

        ttk.Label(frame, text="成语接龙游戏", font=("SimHei", 20)).pack(pady=10)

        self.info_label = ttk.Label(frame, text="点击【开始游戏】", font=("SimHei",14))
        self.info_label.pack(pady=5)

        self.history_text = tk.Text(frame, height=8, width=40)
        self.history_text.pack(pady=10)

        ttk.Label(frame, text="请输入成语：").pack()
        self.input_var = tk.StringVar()
        self.entry = ttk.Entry(frame, textvariable=self.input_var, width=30, font=("SimHei",12))
        self.entry.pack(pady=5)

        btn_frame = ttk.Frame(frame)
        btn_frame.pack(pady=10)
        ttk.Button(btn_frame, text="开始游戏", command=self.start_game).grid(row=0,column=0,padx=5)
        ttk.Button(btn_frame, text="提交", command=self.submit).grid(row=0,column=1,padx=5)
        ttk.Button(btn_frame, text="重新开始", command=self.reset).grid(row=0,column=2,padx=5)

    def start_game(self):
        self.reset()
        self.start_idiom = random.choice(idiom_list)
        self.last_char = self.start_idiom[-1]
        self.history.append(f"电脑：{self.start_idiom}")
        self.update_history()
        self.info_label.config(text=f"请接以【{self.last_char}】开头的成语！")

    def update_history(self):
        self.history_text.delete(1.0, tk.END)
        for line in self.history:
            self.history_text.insert(tk.END, line + "\n")
        self.history_text.see(tk.END)

    def submit(self):
        user_idiom = self.input_var.get().strip()
        if not user_idiom:
            messagebox.showwarning("提示", "请输入成语！")
            return
        # 判断是否符合接龙
        if user_idiom[0] != self.last_char:
            messagebox.showerror("错误", f"必须以【{self.last_char}】开头！")
            return
        if user_idiom not in idiom_list:
            messagebox.showinfo("提示", "这个成语不在词库中，或者输入错误！")
            return
        if user_idiom in self.history:
            messagebox.showinfo("提示", "这个成语已经用过啦！")
            return

        # 用户成功接上
        self.history.append(f"你：{user_idiom}")
        new_last = user_idiom[-1]
        # 电脑找成语
        candidates = [w for w in idiom_list if w[0]==new_last and w not in self.history]
        if not candidates:
            self.history.append("电脑：接不上啦，你赢了🎉")
            self.update_history()
            self.info_label.config(text="恭喜你获胜！点重新开始再来一局")
            return
        computer_word = random.choice(candidates)
        self.history.append(f"电脑：{computer_word}")
        self.last_char = computer_word[-1]
        self.update_history()
        self.info_label.config(text=f"请接以【{self.last_char}】开头的成语！")
        self.input_var.set("")

    def reset(self):
        self.history.clear()
        self.start_idiom = ""
        self.last_char = ""
        self.history_text.delete(1.0, tk.END)
        self.info_label.config(text="点击【开始游戏】")
        self.input_var.set("")

if __name__ == "__main__":
    root = tk.Tk()
    app = IdiomGame(root)
    root.mainloop()
