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

# 成语库（首尾字方便接龙，可自行添加）
IDIOMS = {
    "一心一意", "意气风发", "发扬光大", "大海捞针", "针锋相对",
    "对牛弹琴", "琴棋书画", "画龙点睛", "睛目不凡", "凡夫俗子",
    "子虚乌有", "有目共睹", "睹物思人", "人山人海", "海阔天空",
    "空前绝后", "后来居上", "上下一心", "心花怒放", "放虎归山",
    "山清水秀", "秀外慧中", "中庸之道", "道听途说", "说三道四",
    "四面楚歌", "歌舞升平", "平心静气", "气壮山河", "河鱼之疾",
    "疾风劲草", "草长莺飞", "飞黄腾达", "达官贵人", "人定胜天",
    "天经地义", "义无反顾", "顾盼生辉", "辉煌夺目", "目不暇接",
    "接二连三", "三五成群", "群龙无首", "首屈一指", "指鹿为马",
    "马到成功", "功成名就", "就事论事", "事在人为", "为富不仁",
    "仁至义尽", "尽善尽美", "美中不足", "足智多谋", "谋事在人",
    "人山人海", "海枯石烂", "烂熟于心", "心直口快", "快人快语",
    "语重心长", "长驱直入", "入木三分", "分秒必争", "争先恐后",
    "后来居上", "上善若水", "水到渠成", "成双成对", "对答如流",
    "流芳百世", "世外桃源", "源远流长", "长生不老", "老当益壮",
    "壮志凌云", "云开见日", "日新月异", "异想天开", "开门见山",
    "山穷水尽", "尽忠报国", "国色天香", "香消玉殒", "殒身不恤",
    "恤老怜贫", "贫病交加", "加官进爵", "爵位显赫", "赫然而怒",
    "怒发冲冠", "冠冕堂皇", "皇天后土", "土崩瓦解", "解甲归田",
    "田夫野老", "老马识途", "途穷日暮", "暮鼓晨钟", "钟鸣鼎食"
}

class IdiomGame:
    def __init__(self, root):
        self.root = root
        self.root.title("🎉 成语接龙小游戏")
        self.root.geometry("550x450")  # 窗口大小
        self.root.resizable(False, False)

        # 游戏变量
        self.last_idiom = ""  # 上一个成语
        self.score = 0       # 分数

        # 创建界面
        self.setup_ui()

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

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

        # 游戏记录区域
        self.text_area = tk.Text(self.root, height=12, width=50, font=("微软雅黑", 12))
        self.text_area.pack(pady=10)
        self.text_area.insert(tk.END, "👉 游戏规则：\n")
        self.text_area.insert(tk.END, "1. 电脑先出第一个成语\n")
        self.text_area.insert(tk.END, "2. 你用最后一个字接龙\n")
        self.text_area.insert(tk.END, "3. 必须是四字成语，不能重复\n\n")
        self.text_area.config(state=tk.DISABLED)  # 禁止编辑

        # 输入框
        input_frame = ttk.Frame(self.root)
        input_frame.pack(pady=5)
        ttk.Label(input_frame, text="你的成语：", font=("微软雅黑", 12)).grid(row=0, column=0)
        self.input_entry = ttk.Entry(input_frame, font=("微软雅黑", 12), width=20)
        self.input_entry.grid(row=0, column=1, padx=5)
        self.input_entry.focus()

        # 按钮
        btn_frame = ttk.Frame(self.root)
        btn_frame.pack(pady=10)
        ttk.Button(btn_frame, text="提交", command=self.check_idiom, width=10).grid(row=0, column=0, padx=10)
        ttk.Button(btn_frame, text="重新开始", command=self.restart_game, width=10).grid(row=0, column=1, padx=10)

        # 绑定回车提交
        self.root.bind("<Return>", lambda event: self.check_idiom())

        # 开始游戏
        self.restart_game()

    def add_log(self, text):
        """添加游戏日志"""
        self.text_area.config(state=tk.NORMAL)
        self.text_area.insert(tk.END, text + "\n")
        self.text_area.see(tk.END)  # 滚动到最后
        self.text_area.config(state=tk.DISABLED)

    def computer_play(self):
        """电脑随机出成语"""
        if not self.last_idiom:
            # 第一次：随机开局
            idiom = random.choice(list(IDIOMS))
        else:
            # 接龙：找以最后一个字开头的成语
            last_char = self.last_idiom[-1]
            can_use = [i for i in IDIOMS if i.startswith(last_char)]
            if not can_use:
                messagebox.showinfo("胜利", "🥳 电脑接不上来了！你赢了！")
                return
            idiom = random.choice(can_use)

        self.last_idiom = idiom
        self.add_log(f"🤖 电脑：{idiom}")

    def check_idiom(self):
        """检查玩家输入"""
        user_idiom = self.input_entry.get().strip()
        self.input_entry.delete(0, tk.END)

        # 校验
        if len(user_idiom) != 4:
            messagebox.showwarning("错误", "❌ 必须是四字成语！")
            return
        if user_idiom not in IDIOMS:
            messagebox.showwarning("错误", "❌ 这不是合法成语！")
            return
        if not self.last_idiom:
            messagebox.showwarning("错误", "❌ 请等待电脑先出成语！")
            return
        if user_idiom[0] != self.last_idiom[-1]:
            messagebox.showerror("失败", f"❌ 接错啦！要以【{self.last_idiom[-1]}】开头！")
            return

        # 接龙成功
        self.add_log(f"🧑 你：{user_idiom}")
        self.score += 10
        self.score_label.config(text=f"当前分数：{self.score}")
        self.last_idiom = user_idiom

        # 电脑回合
        self.root.after(800, self.computer_play)

    def restart_game(self):
        """重新开始游戏"""
        self.last_idiom = ""
        self.score = 0
        self.score_label.config(text=f"当前分数：{self.score}")
        self.text_area.config(state=tk.NORMAL)
        self.text_area.delete(1.0, tk.END)
        self.text_area.insert(tk.END, "👉 游戏规则：\n")
        self.text_area.insert(tk.END, "1. 电脑先出第一个成语\n")
        self.text_area.insert(tk.END, "2. 你用最后一个字接龙\n")
        self.text_area.insert(tk.END, "3. 必须是四字成语，不能重复\n\n")
        self.text_area.config(state=tk.DISABLED)
        self.computer_play()

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