import random
import tkinter as tk
from tkinter import messagebox

# 成语库
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.last_char = ""

        # 界面组件
        tk.Label(root, text="成语接龙游戏", font=("微软雅黑", 20, "bold")).pack(pady=15)

        self.lbl_tip = tk.Label(root, text="游戏即将开始", font=("微软雅黑", 12))
        self.lbl_tip.pack(pady=5)

        self.lbl_computer = tk.Label(root, text="", font=("微软雅黑", 16, "bold"), fg="#0066cc")
        self.lbl_computer.pack(pady=10)

        tk.Label(root, text="请输入你接的成语：", font=("微软雅黑", 11)).pack()
        self.entry = tk.Entry(root, font=("微软雅黑", 14), width=20)
        self.entry.pack(pady=8)
        self.entry.bind("<Return>", self.play)  # 回车提交

        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=15)

        tk.Button(frame_btn, text="提交", command=self.play, font=("微软雅黑", 11),
                  width=8, bg="#4CAF50", fg="white").grid(row=0, column=0, padx=10)
        tk.Button(frame_btn, text="重新开始", command=self.restart, font=("微软雅黑", 11),
                  width=8, bg="#2196F3", fg="white").grid(row=0, column=1, padx=10)
        tk.Button(frame_btn, text="退出", command=root.quit, font=("微软雅黑", 11),
                  width=8, bg="#f44336", fg="white").grid(row=0, column=2, padx=10)

        # 开局
        self.restart()

    def get_match_idiom(self, char):
        """根据首字查找成语"""
        res = [i for i in idioms if i[0] == char]
        return random.choice(res) if res else None

    def restart(self):
        """重新开始游戏"""
        self.current_idiom = random.choice(idioms)
        self.last_char = self.current_idiom[-1]
        self.lbl_tip.config(text=f"请以【{self.last_char}】开头接成语")
        self.lbl_computer.config(text=f"电脑：{self.current_idiom}")
        self.entry.delete(0, tk.END)
        self.entry.focus()

    def play(self, event=None):
        """玩家提交成语"""
        user_idiom = self.entry.get().strip()
        self.entry.delete(0, tk.END)

        # 校验是否四字
        if len(user_idiom) != 4:
            messagebox.showwarning("提示", "请输入**四字成语**！")
            return

        # 校验开头字
        if user_idiom[0] != self.last_char:
            messagebox.showwarning("提示", f"必须以【{self.last_char}】开头！")
            return

        # 电脑接词
        next_char = user_idiom[-1]
        computer_idiom = self.get_match_idiom(next_char)

        if not computer_idiom:
            messagebox.showinfo("结果", "电脑接不上啦，你获胜！")
            self.restart()
            return

        # 更新状态
        self.current_idiom = computer_idiom
        self.last_char = next_char
        self.lbl_computer.config(text=f"电脑：{computer_idiom}")
        self.lbl_tip.config(text=f"请以【{self.last_char}】开头接成语")

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