import tkinter as tk
from tkinter import messagebox
import random

# 成语库（首尾可衔接成语）
idiom_list = [
    "一帆风顺", "顺理成章", "章台杨柳", "柳暗花明", "明察秋毫",
    "毫发无伤", "伤筋动骨", "骨瘦如柴", "柴米油盐", "盐梅之寄",
    "寄人篱下", "下里巴人", "人定胜天", "天罗地网", "网开一面",
    "面如土色", "色胆包天", "天经地义", "义薄云天", "天高云淡",
    "淡泊名利", "利欲熏心", "心花怒放", "放虎归山", "山穷水尽",
    "尽善尽美", "美中不足", "足智多谋", "谋事在人", "人山人海",
    "海阔天空", "空穴来风", "风调雨顺", "顺藤摸瓜", "瓜熟蒂落"
]

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

        # 游戏变量
        self.current_idiom = ""  # 当前最后一个成语
        self.score = 0           # 得分
        self.start_char = ""     # 需要接的首字

        # 界面组件
        tk.Label(root, text="成语接龙", font=("黑体", 20, "bold"), fg="#2c3e50").pack(pady=10)

        self.info_label = tk.Label(root, text="点击开始游戏", font=("宋体", 14))
        self.info_label.pack(pady=5)

        self.last_idiom_label = tk.Label(root, text="", font=("微软雅黑", 16, "bold"), fg="#e74c3c")
        self.last_idiom_label.pack(pady=8)

        tk.Label(root, text="请输入接龙成语：", font=("宋体", 12)).pack()
        self.input_entry = tk.Entry(root, font=("宋体", 14), width=25)
        self.input_entry.pack(pady=5)
        self.input_entry.bind("<Return>", self.submit_idiom)  # 回车提交

        # 按钮区域
        btn_frame = tk.Frame(root)
        btn_frame.pack(pady=10)
        tk.Button(btn_frame, text="开始游戏", command=self.start_game, width=10, bg="#3498db", fg="white").grid(row=0, column=0, padx=5)
        tk.Button(btn_frame, text="提交答案", command=self.submit_idiom, width=10, bg="#27ae60", fg="white").grid(row=0, column=1, padx=5)
        tk.Button(btn_frame, text="提示成语", command=self.hint_idiom, width=10, bg="#f39c12", fg="white").grid(row=0, column=2, padx=5)
        tk.Button(btn_frame, text="重置游戏", command=self.reset_game, width=10, bg="#e74c3c", fg="white").grid(row=0, column=3, padx=5)

        self.score_label = tk.Label(root, text=f"当前得分：{self.score}", font=("宋体", 13), fg="#8e44ad")
        self.score_label.pack(pady=5)

    def start_game(self):
        """开局随机选第一个成语"""
        self.current_idiom = random.choice(idiom_list)
        self.start_char = self.current_idiom[-1]
        self.info_label.config(text=f"请以【{self.start_char}】开头接成语")
        self.last_idiom_label.config(text=f"上一个成语：{self.current_idiom}")
        self.input_entry.delete(0, tk.END)
        self.input_entry.focus()

    def submit_idiom(self, event=None):
        """提交输入判断是否接龙成功"""
        user_input = self.input_entry.get().strip()
        if not self.current_idiom:
            messagebox.showwarning("提示", "请先点击开始游戏！")
            return
        if not user_input:
            messagebox.showwarning("提示", "请输入成语！")
            return
        # 判断：输入成语首字等于上一个尾字，且在成语库内
        if user_input[0] == self.start_char and user_input in idiom_list:
            self.score += 10
            self.current_idiom = user_input
            self.start_char = self.current_idiom[-1]
            self.info_label.config(text=f"接龙成功！请以【{self.start_char}】开头继续接")
            self.last_idiom_label.config(text=f"上一个成语：{self.current_idiom}")
            self.score_label.config(text=f"当前得分：{self.score}")
            self.input_entry.delete(0, tk.END)
        else:
            messagebox.showerror("错误", f"接龙失败！必须以「{self.start_char}」开头且为有效成语")

    def hint_idiom(self):
        """匹配首字的提示成语"""
        match_idioms = [word for word in idiom_list if word[0] == self.start_char]
        if match_idioms:
            tip = random.choice(match_idioms)
            messagebox.showinfo("提示", f"推荐成语：{tip}")
        else:
            messagebox.showinfo("提示", "暂无匹配提示，换个思路吧")

    def reset_game(self):
        """重置游戏分数和状态"""
        self.score = 0
        self.current_idiom = ""
        self.start_char = ""
        self.info_label.config(text="点击开始游戏重新开局")
        self.last_idiom_label.config(text="")
        self.score_label.config(text=f"当前得分：{self.score}")
        self.input_entry.delete(0, tk.END)

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