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

class IdiomGame:
    def __init__(self, root):
        self.root = root
        self.root.title("成语接龙 v4.0")
        self.root.geometry("750x620")
        self.root.resizable(False, False)
        
        # ========== 纯四字成语词库 ==========
        # 每个尾字都对应至少一个可接的成语
        self.idiom_graph = {
            "一": ["一心一意", "一马当先", "一鸣惊人", "一帆风顺", "一见如故", "一诺千金"],
            "意": ["意气风发", "意味深长", "意想不到"],
            "发": ["发奋图强", "发扬光大", "发人深省"],
            "大": ["大材小用", "大智若愚", "大显身手", "大同小异", "大功告成", "大快人心"],
            "用": ["用心良苦"],
            "苦": ["苦尽甘来", "苦心孤诣"],
            "来": ["来龙去脉", "来日方长"],
            "脉": ["脉脉含情"],
            "情": ["情深似海", "情投意合", "情同手足"],
            "海": ["海阔天空", "海枯石烂", "海市蜃楼"],
            "空": ["空前绝后", "空穴来风"],
            "后": ["后来居上", "后继有人", "后生可畏"],
            "上": ["上行下效", "上善若水"],
            "效": ["效犬马力"],
            "力": ["力不从心", "力所能及", "力挽狂澜"],
            "心": ["心想事成", "心花怒放", "心旷神怡", "心血来潮", "心猿意马"],
            "成": ["成竹在胸", "成千上万", "成人之美"],
            "胸": ["胸有成竹"],
            "竹": ["竹报平安"],
            "安": ["安居乐业", "安然无恙", "安之若素"],
            "业": ["业精于勤"],
            "勤": ["勤能补拙"],
            "拙": ["拙口笨舌"],
            "舌": ["舌战群儒", "舌灿莲花"],
            "儒": ["儒雅随和"],
            "和": ["和风细雨", "和颜悦色", "和气生财", "和衷共济"],
            "雨": ["雨过天晴", "雨后春笋", "雨露均沾"],
            "晴": ["晴空万里"],
            "里": ["里应外合"],
            "合": ["合情合理", "合二为一"],
            "理": ["理直气壮", "理所当然"],
            "壮": ["壮志凌云", "壮志未酬"],
            "云": ["云开雾散", "云淡风轻", "云蒸霞蔚"],
            "散": ["散兵游勇"],
            "勇": ["勇往直前", "勇冠三军"],
            "前": ["前程似锦", "前功尽弃", "前仆后继", "前车之鉴"],
            "锦": ["锦绣山河", "锦上添花"],
            "河": ["河东狮吼", "河清海晏"],
            "吼": ["吼天喊地"],
            "地": ["地大物博", "地久天长", "地动山摇", "地老天荒"],
            "博": ["博古通今", "博学多才", "博大精深"],
            "今": ["今非昔比", "今朝有酒"],
            "比": ["比翼双飞", "比比皆是"],
            "飞": ["飞黄腾达", "飞蛾扑火", "飞沙走石"],
            "达": ["达官贵人"],
            "人": ["人山人海", "人才济济", "人杰地灵", "人心所向", "人声鼎沸"],
            "才": ["才高八斗", "才疏学浅"],
            "斗": ["斗志昂扬", "斗转星移"],
            "扬": ["扬眉吐气", "扬长避短", "扬扬得意"],
            "气": ["气象万千", "气吞山河", "气势磅礴", "气宇轩昂"],
            "千": ["千钧一发", "千载难逢", "千方百计", "千篇一律"],
            "万": ["万象更新", "万众一心", "万紫千红", "万无一失"],
            "新": ["新陈代谢", "新仇旧恨", "新来乍到"],
            "代": ["代代相传"],
            "传": ["传宗接代", "传为佳话"],
            "恨": ["恨铁不成钢"],
            "钢": ["钢筋铁骨"],
            "骨": ["骨肉相连", "骨瘦如柴"],
            "连": ["连绵不断", "连篇累牍"],
            "断": ["断章取义", "断壁残垣"],
            "义": ["义不容辞", "义无反顾", "义薄云天", "义正词严"],
            "辞": ["辞旧迎新", "辞不达意"],
            "顾": ["顾全大局", "顾此失彼"],
            "局": ["局促不安"],
            "彼": ["彼竭我盈"],
            "盈": ["盈盈一水"],
            "水": ["水到渠成", "水滴石穿", "水落石出", "水涨船高", "水深火热"],
            "成": ["成千上万"],
            "穿": ["穿针引线", "穿云裂石"],
            "石": ["石破天惊", "石沉大海"],
            "惊": ["惊天动地", "惊弓之鸟", "惊心动魄"],
            "动": ["动人心弦", "动辄得咎"],
            "弦": ["弦外之音"],
            "音": ["音信全无", "音容笑貌"],
            "全": ["全力以赴", "全心全意", "全军覆没", "全神贯注"],
            "赴": ["赴汤蹈火"],
            "火": ["火上浇油", "火冒三丈", "火眼金睛", "火中取栗","火烧眉毛","火速赶赴","火树银花","火伞高张","火然泉达"],
            "油": ["油嘴滑舌", "油然而生"],
            "生": ["生龙活虎", "生机勃勃", "生不如死", "生吞活剥"],
            "虎": ["虎头蛇尾", "虎视眈眈", "虎背熊腰"],
            "尾": ["尾大不掉"],
            "掉": ["掉以轻心"],
            "轻": ["轻而易举", "轻描淡写", "轻车熟路"],
            "举": ["举世闻名", "举一反三", "举足轻重"],
            "闻": ["闻鸡起舞", "闻风丧胆", "闻过则喜"],
            "舞": ["舞文弄墨", "舞枪弄棒"],
            "墨": ["墨守成规"],
            "规": ["规行矩步"],
            "步": ["步步为营", "步调一致", "步月登云"],
            "营": ["营私舞弊"],
            "弊": ["弊绝风清"],
            "清": ["清风明月", "清心寡欲"],
            "月": ["月明星稀", "月下老人", "月落乌啼"],
            "稀": ["稀奇古怪"],
            "怪": ["怪模怪样", "怪诞不经"],
            "样": ["样样精通"],
            "通": ["通情达理", "通宵达旦", "通权达变"],
            "旦": ["旦夕祸福"],
            "福": ["福如东海", "福星高照", "福至心灵"],
            "灵": ["灵机一动", "灵丹妙药"],
            "动": ["动人心弦"],
            "药": ["药到病除"],
            "除": ["除恶务尽", "除旧布新"],
            "新": ["新陈代谢"],
            "山": ["山清水秀", "山穷水尽", "山高水长", "山盟海誓"],
            "秀": ["秀色可餐", "秀外慧中"],
            "餐": ["餐风饮露"],
            "露": ["露宿风餐"],
            "尽": ["尽心竭力", "尽善尽美", "尽忠报国"],
            "美": ["美不胜收", "美轮美奂", "美中不足"],
            "收": ["收回成命"],
            "命": ["命中注定", "命悬一线"],
            "定": ["定国安邦"],
            "国": ["国泰民安", "国色天香", "国富民强"],
            "泰": ["泰然自若", "泰极生否"],
            "若": ["若无其事", "若有所思", "若隐若现"],
            "事": ["事半功倍", "事在人为", "事无巨细"],
            "倍": ["倍道兼程"],
            "程": ["程门立雪"],
            "雪": ["雪中送炭", "雪上加霜", "雪泥鸿爪"],
            "炭": ["炭疽热病"],
            "病": ["病入膏肓", "病从口入"],
            "入": ["入木三分", "入乡随俗"],
            "分": ["分秒必争", "分道扬镳"],
            "争": ["争先恐后", "争分夺秒"],
            "后": ["后来居上"],
            "秒": ["秒秒必争"],
            "毛": ["毛遂自荐", "毛骨悚然"],
            "荐": ["荐贤举能"],
            "能": ["能屈能伸", "能言善辩", "能工巧匠"],
            "伸": ["伸张正义"],
            "义": ["义不容辞"],
            "指": ["指鹿为马", "指手画脚", "指桑骂槐"],
            "马": ["马到成功", "马不停蹄", "马首是瞻"],
            "功": ["功成名就", "功亏一篑"],
            "就": ["就地取材", "就事论事"],
            "材": ["材大难用"],
            "用": ["用心良苦"],
            "手": ["手忙脚乱", "手到擒来", "手无寸铁"],
            "脚": ["脚踏实地"],
            "实": ["实事求是", "实至名归"],
            "是": ["是非曲直", "是可忍孰不可忍"],
            "直": ["直言不讳", "直截了当"],
            "讳": ["讳莫如深", "讳疾忌医"],
            "深": ["深入浅出", "深思熟虑", "深不可测"],
            "出": ["出口成章", "出类拔萃", "出人头地", "出生入死"],
            "章": ["章法有度"],
            "度": ["度日如年", "度德量力"],
            "年": ["年年有余", "年富力强", "年深日久"],
            "余": ["余音绕梁", "余味无穷"],
            "梁": ["梁上君子"],
            "君": ["君子一言", "君子之交"],
            "子": ["子虚乌有", "子孙满堂", "子承父业"],
            "有": ["有口皆碑", "有目共睹", "有始有终", "有备无患", "有求必应"],
            "口": ["口若悬河", "口是心非", "口干舌燥", "口蜜腹剑"],
            "碑": ["碑文石刻"],
            "刻": ["刻舟求剑", "刻骨铭心"],
            "剑": ["剑拔弩张", "剑走偏锋"],
            "张": ["张灯结彩", "张牙舞爪", "张口结舌"],
            "彩": ["彩云追月"],
            "月": ["月明星稀"],
            "爪": ["爪牙之利"],
            "利": ["利令智昏", "利国利民", "利欲熏心"],
            "民": ["民以食为天", "民不聊生"],
            "天": ["天长地久", "天衣无缝", "天花乱坠", "天南地北", "天涯海角"],
            "久": ["久别重逢", "久而久之"],
            "逢": ["逢凶化吉", "逢场作戏"],
            "吉": ["吉祥如意", "吉星高照"],
            "祥": ["祥云瑞气"],
            "气": ["气象万千"],
            "坠": ["坠茵落溷"],
            "溷": ["溷浊不清"],
            "清": ["清风明月"],
            "北": ["北辕适楚"],
            "楚": ["楚河汉界", "楚楚动人"],
            "界": ["界外之物"],
            "物": ["物华天宝", "物极必反", "物是人非"],
            "宝": ["宝刀不老", "宝马香车"],
            "老": ["老当益壮", "老马识途", "老生常谈", "老态龙钟"],
            "谈": ["谈笑风生", "谈虎色变", "谈何容易"],
            "色": ["色厉内荏", "色香味俱全"],
            "荏": ["荏弱无力"],
            "力": ["力不从心"],
            "变": ["变幻莫测", "变本加厉"],
            "测": ["测目可知"],
            "知": ["知难而进", "知足常乐", "知己知彼"],
            "进": ["进退两难", "进退维谷"],
            "难": ["难能可贵", "难舍难分"],
            "贵": ["贵人多忘", "贵不可言"],
            "言": ["言而有信", "言行一致", "言简意赅"],
            "信": ["信口开河", "信誓旦旦", "信以为真"],
            "河": ["河东狮吼"],
            "誓": ["誓死不屈", "誓不罢休"],
            "屈": ["屈指可数", "屈打成招"],
            "数": ["数一数二", "数不胜数", "数典忘祖"],
            "胜": ["胜券在握", "胜利在望", "胜败乃兵家常事"],
            "握": ["握手言和"],
            "望": ["望梅止渴", "望而生畏", "望风披靡"],
            "渴": ["渴骥奔泉"],
            "泉": ["泉涌而出"],
            "出": ["出口成章"],
            "畏": ["畏首畏尾", "畏缩不前"],
            "首": ["首当其冲", "首屈一指", "首鼠两端"],
            "冲": ["冲锋陷阵", "冲冠一怒"],
            "阵": ["阵脚大乱"],
            "乱": ["乱七八糟", "乱臣贼子"],
            "糟": ["糟糠之妻"],
            "妻": ["妻离子散"],
            "离": ["离经叛道", "离心离德", "离群索居"],
            "道": ["道听途说", "道路以目", "道貌岸然"],
            "说": ["说三道四", "说一不二"],
            "四": ["四海为家", "四面楚歌", "四通八达", "四平八稳"],
            "家": ["家喻户晓", "家常便饭", "家破人亡", "家徒四壁"],
            "晓": ["晓风残月"],
            "残": ["残羹冷炙", "残花败柳"],
            "炙": ["炙手可热"],
            "热": ["热火朝天", "热血沸腾"],
            "腾": ["腾云驾雾", "腾蛟起凤"],
            "雾": ["雾里看花"],
            "花": ["花团锦簇", "花枝招展", "花好月圆"],
            "簇": ["簇拥而至"],
            "至": ["至高无上", "至理名言"],
            "高": ["高瞻远瞩", "高山流水", "高枕无忧"],
            "瞩": ["瞩目而视"],
            "视": ["视死如归", "视而不见"],
            "归": ["归心似箭", "归真返璞"],
            "箭": ["箭在弦上"],
            "上": ["上行下效"],
            "璞": ["璞玉浑金"],
            "金": ["金碧辉煌", "金榜题名", "金枝玉叶"],
            "煌": ["煌煌大观"],
            "观": ["观者如云", "观风问俗"],
            "云": ["云开雾散"],
            "俗": ["俗不可耐"],
            "耐": ["耐人寻味"],
            "味": ["味同嚼蜡"],
            "蜡": ["蜡炬成灰"],
            "灰": ["灰心丧气", "灰飞烟灭"],
            "灭": ["灭顶之灾", "灭绝人性"],
            "灾": ["灾难深重"],
            "重": ["重于泰山", "重见天日", "重整旗鼓"],
            "山": ["山清水秀"],
            "鼓": ["鼓乐齐鸣", "鼓舞人心"],
            "鸣": ["鸣锣开道", "鸣金收兵"],
            "兵": ["兵来将挡", "兵不厌诈", "兵荒马乱"],
            "挡": ["挡风遮雨"],
            "雨": ["雨后春笋"],
            "诈": ["诈奸不及"],
            "及": ["及时行乐", "及第成名"],
            "乐": ["乐不思蜀", "乐极生悲", "乐此不疲"],
            "蜀": ["蜀犬吠日"],
            "日": ["日新月异", "日久天长", "日积月累", "日暮途穷"],
            "异": ["异口同声", "异想天开", "异曲同工"],
            "声": ["声东击西", "声名远扬", "声泪俱下"],
            "西": ["西装革履"],
            "履": ["履险如夷"],
            "夷": ["夷为平地"],
            "平": ["平步青云", "平易近人", "平心静气", "平分秋色"],
            "青": ["青云直上"],
            "近": ["近水楼台", "近朱者赤"],
            "台": ["台阁生风"],
            "风": ["风吹草动", "风雨同舟", "风平浪静", "风花雪月"],
            "静": ["静如止水"],
            "水": ["水到渠成"],
            "舟": ["舟车劳顿"],
            "顿": ["顿开茅塞"],
            "塞": ["塞翁失马"],
            "马": ["马到成功"],
            "草": ["草菅人命", "草木皆兵"],
            "兵": ["兵来将挡"],
            "浪": ["浪迹天涯", "浪子回头"],
            "涯": ["天涯海角"],
            "角": ["角立杰出"],
            "出": ["出口成章"],
            "赤": ["赤胆忠心", "赤手空拳"],
            "心": ["心想事成"],
            "拳": ["拳打脚踢"],
            "踢": ["踢皮球"],
            "球": ["球类运动"],
            "动": ["动人心弦"],
            "雪": ["雪中送炭"],
            "月": ["月明星稀"],
            "稀": ["稀奇古怪"],
            "古": ["古往今来", "古今中外", "古色古香"],
            "外": ["外强中干", "外交辞令"],
            "干": ["干戈不息"],
            "息": ["息息相关", "息事宁人"],
            "关": ["关怀备至", "关门大吉"],
            "至": ["至高无上"],
            "宁": ["宁缺毋滥", "宁死不屈"],
            "滥": ["滥竽充数"],
            "数": ["数一数二"],
            "屈": ["屈指可数"],
            "香": ["香消玉殒"],
            "殒": ["殒身不恤"],
            "恤": ["恤老怜贫"],
            "贫": ["贫贱不移", "贫富悬殊"],
            "移": ["移花接木", "移山倒海"],
            "木": ["木已成舟"],
            "舟": ["舟车劳顿"],
            "殊": ["殊途同归"],
            "归": ["归心似箭"],
            "海": ["海阔天空"],
            "空": ["空前绝后"],
            "绝": ["绝处逢生", "绝无仅有"],
            "处": ["处心积虑", "处之泰然"],
            "虑": ["虑事周全"],
            "全": ["全力以赴"],
            "然": ["然荻读书"],
            "书": ["书香门第", "书声琅琅"],
            "第": ["第一桶金"],
            "金": ["金碧辉煌"],
            "琅": ["琅琅上口"],
            "口": ["口若悬河"],
            "读": ["读书破万卷"],
            "卷": ["卷土重来"],
            "来": ["来龙去脉"],
            "有": ["有口皆碑"],
            "仅": ["仅此而已"],
            "已": ["己所不欲勿施于人"],
            "人": ["人山人海"]
        }
        
        # 提取所有成语
        self.all_idioms = []
        for idioms in self.idiom_graph.values():
            self.all_idioms.extend(idioms)
        self.all_idioms = list(set(self.all_idioms))
        
        print(f"词库加载完成：共 {len(self.all_idioms)} 个成语")
        
        # 游戏状态
        self.current = ""
        self.used = []
        self.round_num = 0
        self.player_score = 0
        self.computer_score = 0
        self.difficulty = "普通"
        self.time_limit = 30
        self.time_remaining = 30
        self.timer_running = False
        self.timer_id = None
        self.game_over = False
        
        self.setup_ui()
        self.start_game()
    
    def setup_ui(self):
        """设置UI界面"""
        # 标题栏
        title_frame = tk.Frame(self.root)
        title_frame.pack(fill=tk.X, padx=10, pady=5)
        
        tk.Label(title_frame, text="📚 成语接龙 v4.0", 
                font=("微软雅黑", 22, "bold")).pack(side=tk.LEFT)
        
        tk.Label(title_frame, text=f"词库: {len(self.all_idioms)}个成语", 
                font=("微软雅黑", 10), fg="gray").pack(side=tk.LEFT, padx=10)
        
        # 难度选择
        diff_frame = tk.Frame(title_frame)
        diff_frame.pack(side=tk.RIGHT)
        tk.Label(diff_frame, text="难度:", font=("微软雅黑", 11)).pack(side=tk.LEFT)
        self.diff_combo = ttk.Combobox(diff_frame, values=["简单", "普通", "困难"],
                                       state="readonly", width=6, font=("微软雅黑", 11))
        self.diff_combo.set("普通")
        self.diff_combo.pack(side=tk.LEFT, padx=5)
        self.diff_combo.bind("<<ComboboxSelected>>", self.change_difficulty)
        
        # 信息栏
        info_frame = tk.Frame(self.root)
        info_frame.pack(fill=tk.X, padx=10)
        
        self.round_label = tk.Label(info_frame, text="回合: 0", font=("微软雅黑", 12))
        self.round_label.pack(side=tk.LEFT, padx=10)
        
        self.score_label = tk.Label(info_frame, text="👤 0 : 0 🤖", font=("微软雅黑", 12))
        self.score_label.pack(side=tk.LEFT, padx=10)
        
        self.status_label = tk.Label(info_frame, text="✅ 准备就绪", font=("微软雅黑", 11), fg="green")
        self.status_label.pack(side=tk.LEFT, padx=10)
        
        self.timer_label = tk.Label(info_frame, text="⏱ 30s", font=("微软雅黑", 12), fg="blue")
        self.timer_label.pack(side=tk.RIGHT, padx=10)
        
        # 游戏主区域
        game_frame = tk.Frame(self.root, bd=2, relief=tk.GROOVE)
        game_frame.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)
        
        # 电脑区域
        comp_frame = tk.LabelFrame(game_frame, text="🤖 电脑出题", font=("微软雅黑", 12))
        comp_frame.pack(fill=tk.X, padx=10, pady=5)
        
        self.comp_label = tk.Label(comp_frame, text="等待开始...",
                                   font=("微软雅黑", 18, "bold"), fg="red")
        self.comp_label.pack(pady=10)
        
        # 提示
        self.hint_label = tk.Label(game_frame, text="", font=("微软雅黑", 13))
        self.hint_label.pack(pady=5)
        
        # 玩家输入
        input_frame = tk.Frame(game_frame)
        input_frame.pack(pady=5)
        
        tk.Label(input_frame, text="你的回答:", font=("微软雅黑", 12)).pack(side=tk.LEFT, padx=5)
        self.entry = tk.Entry(input_frame, font=("微软雅黑", 16), width=12, justify="center")
        self.entry.pack(side=tk.LEFT, padx=5)
        self.entry.bind("<Return>", lambda e: self.submit_answer())
        
        submit_btn = tk.Button(input_frame, text="✅ 提交", command=self.submit_answer,
                              font=("微软雅黑", 12), bg="#4CAF50", fg="white", width=8)
        submit_btn.pack(side=tk.LEFT, padx=5)
        
        # 辅助按钮
        help_frame = tk.Frame(game_frame)
        help_frame.pack(pady=5)
        
        hint_btn = tk.Button(help_frame, text="💡 提示", command=self.show_hint,
                            font=("微软雅黑", 10), bg="#FF9800", fg="white", width=8)
        hint_btn.pack(side=tk.LEFT, padx=5)
        
        skip_btn = tk.Button(help_frame, text="🔄 跳过", command=self.skip_turn,
                            font=("微软雅黑", 10), bg="#9C27B0", fg="white", width=8)
        skip_btn.pack(side=tk.LEFT, padx=5)
        
        # 可用成语计数
        self.available_label = tk.Label(game_frame, text="可用成语: -", font=("微软雅黑", 10), fg="gray")
        self.available_label.pack()
        
        # 历史记录
        history_frame = tk.LabelFrame(self.root, text="📜 接龙历史", font=("微软雅黑", 11))
        history_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
        
        scrollbar = tk.Scrollbar(history_frame)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        
        self.history_text = tk.Text(history_frame, height=6, font=("微软雅黑", 11),
                                    yscrollcommand=scrollbar.set, state=tk.DISABLED)
        self.history_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
        scrollbar.config(command=self.history_text.yview)
        
        # 控制按钮
        control_frame = tk.Frame(self.root)
        control_frame.pack(pady=5)
        
        restart_btn = tk.Button(control_frame, text="🔄 重新开始", command=self.restart_game,
                               font=("微软雅黑", 11), bg="#2196F3", fg="white", width=10)
        restart_btn.pack(side=tk.LEFT, padx=5)
        
        exit_btn = tk.Button(control_frame, text="🚪 退出", command=self.root.quit,
                            font=("微软雅黑", 11), bg="#F44336", fg="white", width=10)
        exit_btn.pack(side=tk.LEFT, padx=5)
    
    def change_difficulty(self, event=None):
        """切换难度"""
        self.difficulty = self.diff_combo.get()
        time_map = {"简单": 45, "普通": 30, "困难": 15}
        self.time_limit = time_map[self.difficulty]
        self.timer_label.config(text=f"⏱ {self.time_limit}s")
        self.restart_game()
    
    def get_available_idioms(self, char):
        """获取以某字开头的可用成语"""
        if char not in self.idiom_graph:
            return []
        return [i for i in self.idiom_graph[char] if i not in self.used]
    
    def start_game(self):
        """开始游戏"""
        self.used = []
        self.round_num = 0
        self.game_over = False
        
        # 找一个有后续连接的起始成语
        starters = [i for i in self.all_idioms if self.get_available_idioms(i[-1])]
        if starters:
            self.current = random.choice(starters)
        else:
            self.current = random.choice(self.all_idioms)
        
        self.used.append(self.current)
        self.add_history(f"🏁 开局: {self.current}")
        self.update_display()
        self.start_timer()
        self.status_label.config(text="🎯 轮到你了！", fg="blue")
        self.entry.focus()
    
    def restart_game(self):
        """重新开始"""
        if self.timer_id:
            self.root.after_cancel(self.timer_id)
        self.timer_running = False
        self.player_score = 0
        self.computer_score = 0
        self.history_text.config(state=tk.NORMAL)
        self.history_text.delete(1.0, tk.END)
        self.history_text.config(state=tk.DISABLED)
        self.start_game()
    
    def start_timer(self):
        """开始计时"""
        self.timer_running = True
        self.time_remaining = self.time_limit
        self.update_timer()
    
    def update_timer(self):
        """更新计时器"""
        if not self.timer_running:
            return
        
        self.time_remaining -= 1
        self.timer_label.config(text=f"⏱ {self.time_remaining}s")
        
        if self.time_remaining <= 5:
            self.timer_label.config(fg="red")
        else:
            self.timer_label.config(fg="blue")
        
        if self.time_remaining <= 0:
            self.stop_timer()
            self.computer_score += 1
            self.update_score()
            messagebox.showinfo("⏰ 时间到！", "时间到！电脑得一分")
            self.computer_turn()
            return
        
        self.timer_id = self.root.after(1000, self.update_timer)
    
    def stop_timer(self):
        """停止计时"""
        self.timer_running = False
        if self.timer_id:
            self.root.after_cancel(self.timer_id)
            self.timer_id = None
    
    def submit_answer(self):
        """提交答案"""
        if self.game_over:
            return
        
        user_input = self.entry.get().strip()
        
        if not user_input:
            messagebox.showwarning("⚠️ 警告", "请输入成语！")
            return
        
        if len(user_input) != 4:
            messagebox.showwarning("⚠️ 警告", "请输入四字成语！")
            self.entry.delete(0, tk.END)
            return
        
        # 检查首字
        if user_input[0] != self.current[-1]:
            messagebox.showerror("❌ 错误", f"首字应为 '{self.current[-1]}'")
            self.entry.delete(0, tk.END)
            return
        
        # 检查是否用过
        if user_input in self.used:
            messagebox.showinfo("⚠️ 重复", "这个成语已经用过了！")
            self.entry.delete(0, tk.END)
            return
        
        # 检查是否在词库中
        if user_input not in self.all_idioms:
            messagebox.showerror("❌ 错误", f"'{user_input}' 不在词库中")
            self.entry.delete(0, tk.END)
            return
        
        # ✅ 回答正确
        self.stop_timer()
        self.player_score += 1
        self.used.append(user_input)
        self.current = user_input
        self.round_num += 1
        
        self.add_history(f"👤 玩家: {user_input}")
        self.update_display()
        self.entry.delete(0, tk.END)
        self.status_label.config(text="🤔 电脑思考中...", fg="purple")
        
        # 电脑回合
        self.root.after(800, self.computer_turn)
    
    def computer_turn(self):
        """电脑出招"""
        last_char = self.current[-1]
        available = self.get_available_idioms(last_char)
        
        # 更新可用成语数量
        self.update_available_count(last_char)
        
        if not available:
            # 电脑输了
            self.player_score += 2
            self.update_score()
            messagebox.showinfo("🎉 你赢了！", 
                              f"电脑找不到以 '{last_char}' 开头的成语！\n你获得2分！")
            self.add_history(f"🏆 电脑认输！")
            self.new_round()
            return
        
        # 电脑选择策略
        if self.difficulty == "简单":
            computer_choice = random.choice(available[:3])
        elif self.difficulty == "普通":
            computer_choice = random.choice(available)
        else:
            computer_choice = min(available, 
                                 key=lambda x: len(self.get_available_idioms(x[-1])))
        
        self.used.append(computer_choice)
        self.current = computer_choice
        self.round_num += 1
        
        self.add_history(f"🤖 电脑: {computer_choice}")
        self.update_display()
        self.status_label.config(text="🎯 轮到你了！", fg="blue")
        
        # 检查玩家是否还有路可走
        next_char = self.current[-1]
        player_options = self.get_available_idioms(next_char)
        if not player_options:
            self.status_label.config(text=f"⚠️ 注意：'{next_char}'开头的成语很少！", fg="red")
        
        self.update_available_count(next_char)
        self.start_timer()
        self.entry.focus()
    
    def new_round(self):
        """开始新的一轮"""
        self.used = []
        self.start_game()
    
    def show_hint(self):
        """显示提示"""
        last_char = self.current[-1]
        available = self.get_available_idioms(last_char)
        
        if available:
            hints = available[:5]
            hint_text = "\n".join([f"• {i}" for i in hints])
            messagebox.showinfo("💡 提示", f"以 '{last_char}' 开头的成语：\n{hint_text}")
        else:
            messagebox.showinfo("💡 提示", f"没有找到以 '{last_char}' 开头的可用成语")
    
    def skip_turn(self):
        """跳过当前回合"""
        if messagebox.askyesno("确认跳过", "跳过将失去本回合机会，确定吗？"):
            self.stop_timer()
            self.computer_score += 1
            self.update_score()
            self.add_history(f"⏭️ 玩家跳过")
            self.computer_turn()
    
    def update_available_count(self, char):
        """更新可用成语数量"""
        count = len(self.get_available_idioms(char))
        self.available_label.config(text=f"可用成语: {count} 个")
    
    def update_display(self):
        """更新显示"""
        self.comp_label.config(text=self.current)
        
        need_char = self.current[-1]
        self.hint_label.config(text=f"请以 '{need_char}' 开头", fg="red")
        
        self.round_label.config(text=f"回合: {self.round_num}")
        self.update_score()
    
    def update_score(self):
        """更新分数"""
        self.score_label.config(text=f"👤 {self.player_score} : {self.computer_score} 🤖")
    
    def add_history(self, text):
        """添加历史记录"""
        self.history_text.config(state=tk.NORMAL)
        self.history_text.insert(tk.END, f"{text}\n")
        self.history_text.see(tk.END)
        self.history_text.config(state=tk.DISABLED)

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