import tkinter as tk
from tkinter import messagebox
import random

class IdiomGame:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 成语接龙挑战")
        self.root.geometry("500x450")
        self.root.configure(bg="#f5f5f5")

        # 模拟词库（实际应用中可以加载外部txt或json文件）
        self.idioms = ["一心一意", "意气风发", "发愤图强", "强词夺理", "理屈词穷", 
                       "穷途末路", "路不拾遗", "遗臭万年", "年富力强", "强人所难",
                       "难能可贵", "贵在坚持", "持之以恒", "恒古未有", "有始有终"]
        
        self.history = []  # 记录已使用的成语
        self.last_char = "" # 记录上一个成语的末尾字

        self.setup_ui()

    def setup_ui(self):
        # 标题
        tk.Label(self.root, text="成语接龙游戏", font=("微软雅黑", 20, "bold"), 
                 bg="#f5f5f5", fg="#333").pack(pady=10)

        # 提示区域
        self.info_label = tk.Label(self.root, text="请输入一个成语开始游戏", 
                                   font=("微软雅黑", 12), bg="#f5f5f5", fg="#666")
        self.info_label.pack(pady=5)

        # 显示接龙历史的文本框
        self.display_area = tk.Text(self.root, height=10, width=50, font=("微软雅黑", 10),
                                    state='disabled', bg="white", padx=10, pady=10)
        self.display_area.pack(pady=10)

        # 输入框
        self.entry = tk.Entry(self.root, font=("微软雅黑", 14), width=30)
        self.entry.pack(pady=5)
        self.entry.bind('<Return>', lambda event: self.check_idiom()) # 绑定回车键

        # 按钮区
        btn_frame = tk.Frame(self.root, bg="#f5f5f5")
        btn_frame.pack(pady=10)

        tk.Button(btn_frame, text="提交成语", command=self.check_idiom, 
                  bg="#4CAF50", fg="white", font=("微软雅黑", 10), width=10).pack(side="left", padx=5)
        
        tk.Button(btn_frame, text="重新开始", command=self.reset_game, 
                  bg="#f44336", fg="white", font=("微软雅黑", 10), width=10).pack(side="left", padx=5)

        # 底部状态栏
        self.status_var = tk.StringVar(value="当前连击: 0")
        tk.Label(self.root, textvariable=self.status_var, font=("微软雅黑", 10), 
                 bg="#f5f5f5", fg="#0078D7").pack(side="bottom", pady=10)

    def check_idiom(self):
        user_input = self.entry.get().strip()
        self.entry.delete(0, tk.END)

        # 1. 基本校验
        if len(user_input) != 4:
            messagebox.showwarning("提示", "请输入四字成语！")
            return

        if user_input in self.history:
            messagebox.showwarning("提示", "这个成语已经用过啦！")
            return

        # 2. 接龙规则校验
        if self.last_char and user_input[0] != self.last_char:
            messagebox.showerror("错误", f"接龙失败！必须以 '{self.last_char}' 开头")
            return

        # 3. 成功接龙
        self.history.append(user_input)
        self.last_char = user_input[-1]
        self.update_display(f"你: {user_input}")
        
        # 4. 更新状态
        self.status_var.set(f"当前连击: {len(self.history)}")
        self.info_label.config(text=f"下一个请以 '{self.last_char}' 开头", fg="green")

        # 5. 模拟电脑自动接一个（可选）
        self.root.after(500, self.computer_turn)

    def computer_turn(self):
        # 在词库中寻找匹配的成语
        possible_answers = [i for i in self.idioms if i[0] == self.last_char and i not in self.history]
        
        if possible_answers:
            comp_choice = random.choice(possible_answers)
            self.history.append(comp_choice)
            self.last_char = comp_choice[-1]
            self.update_display(f"电脑: {comp_choice}")
            self.status_var.set(f"当前连击: {len(self.history)}")
            self.info_label.config(text=f"下一个请以 '{self.last_char}' 开头", fg="blue")
        else:
            self.info_label.config(text="电脑接不上来，你赢了！输入任意成语开始新回合", fg="#FF8C00")
            self.last_char = ""

    def update_display(self, text):
        self.display_area.config(state='normal')
        self.display_area.insert(tk.END, text + "  →  ")
        self.display_area.see(tk.END)
        self.display_area.config(state='disabled')

    def reset_game(self):
        self.history = []
        self.last_char = ""
        self.display_area.config(state='normal')
        self.display_area.delete(1.0, tk.END)
        self.display_area.config(state='disabled')
        self.info_label.config(text="请输入一个成语开始游戏", fg="#666")
        self.status_var.set("当前连击: 0")

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