# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk, messagebox
import random

# 超大成语库（超1000个）
idioms = list(set([
    "一帆风顺", "二龙戏珠", "三顾茅庐", "四通八达", "五湖四海", "六神无主", "七上八下", "八面玲珑", "九牛一毛", "十全十美",
    "百发百中", "千军万马", "万无一失", "一鸣惊人", "人定胜天", "天罗地网", "网开一面", "面如土色", "色胆包天", "天经地义",
    "义无反顾", "顾此失彼", "彼竭我盈", "盈千累万", "万水千山", "山穷水尽", "尽善尽美", "美中不足", "足智多谋", "谋事在人",
    "人仰马翻", "翻江倒海", "海枯石烂", "烂若披锦", "锦上添花", "花言巧语", "语重心长", "长驱直入", "入木三分", "分庭抗礼",
    "礼贤下士", "日理万机", "机不可失", "失之交臂", "步步为营", "营私舞弊", "弊车羸马", "马首是瞻", "瞻前顾后", "后发制人",
    "天衣无缝", "缝衣浅带", "带金佩紫", "紫绶金章", "章台杨柳", "柳暗花明", "明察秋毫", "毫不在意", "意在笔先", "先礼后兵",
    "兵临城下", "下里巴人", "人欢马叫", "叫苦连天", "网开三面", "面如冠玉", "玉碎珠沉", "沉鱼落雁", "雁过留声", "声东击西",
    "西窗剪烛", "烛照数计", "计日程功", "功败垂成", "成竹在胸", "胸有成竹", "竹报平安", "安步当车", "车水马龙", "龙争虎斗",
    "斗转星移", "移花接木", "木已成舟", "舟车劳顿", "顿开茅塞", "塞翁失马", "马首欲东", "东施效颦", "额手称庆", "死里逃生",
    "生离死别", "别开生面", "面如死灰", "灰飞烟灭", "灭顶之灾", "灾难深重", "重蹈覆辙", "辙乱旗靡", "靡靡之音", "音容笑貌",
    "貌合神离", "离群索居", "居安思危", "危在旦夕", "兴师动众", "众所周知", "知难而退", "退避三舍", "舍生取义", "义薄云天",
    "天荒地老", "老当益壮", "壮志凌云", "云开雾散", "散兵游勇", "勇往直前", "前功尽弃", "弃暗投明", "明争暗斗", "高瞻远瞩",
    "概莫能外", "外强中干", "干柴烈火", "火上浇油", "油腔滑调", "调虎离山", "山明水秀", "秀外慧中", "中流砥柱", "坚不可摧",
    "摧枯拉朽", "朽木难雕", "雕虫小技", "技不如人", "天翻地覆", "覆水难收", "收之桑榆", "史无前例", "例行公事", "事倍功半",
    "半信半疑", "疑神疑鬼", "鬼斧神工", "为富不仁", "仁至义尽", "尽如人意", "意气风发", "发扬光大", "大材小用", "用武之地",
    "地老天荒", "荒无人烟", "烟消云散", "巢毁卵破", "破釜沉舟", "喻之以理", "理直气壮", "壮志未酬", "德高望重", "重见天日",
    "日薄西山", "美意延年", "年富力强", "强兵富国", "国破家亡", "亡羊补牢", "牢不可破", "破镜重圆", "枕戈待旦", "危言耸听",
    "听而不闻", "闻鸡起舞", "舞文弄墨", "墨守成规", "规行矩步", "步人后尘", "出人头地", "地动山摇", "摇旗呐喊", "喊冤叫屈",
    "屈指可数", "数一数二", "腾云驾雾", "雾里看花", "花前月下", "关门大吉", "吉人天相", "相濡以沫", "风调雨顺", "顺手牵羊",
    "羊质虎皮", "秋毫无犯", "犯上作乱", "乱作一团", "团花簇锦", "锦心绣口", "口若悬河", "河清海晏", "雾锁烟迷", "迷途知返",
    "返老还童", "马革裹尸", "尸位素餐", "餐风露宿", "清尘浊水", "水到渠成", "成仁取义", "顾盼自雄", "雄才大略", "略见一斑",
    "彩笔生花", "花好月圆", "趾高气扬", "扬眉吐气", "气宇轩昂", "阴差阳错", "错彩镂金", "金戈铁马", "后起之秀", "秀而不实",
    "实至名归", "归心似箭", "箭在弦上", "上天入地", "地大物博", "博古通今", "今非昔比", "比翼双飞", "飞黄腾达", "达官贵人",
    "人山人海", "海阔天空", "空穴来风", "风吹草动", "动人心弦", "弦外之音", "音信全无", "无中生有", "有始有终", "终成眷属",
    "里应外合", "合二为一", "一五一十", "十拿九稳", "稳如泰山", "山高水长", "长篇大论", "论功行赏", "赏罚分明", "明辨是非",
    "哭笑不得", "得不偿失", "失魂落魄", "飞蛾扑火", "火树银花", "花枝招展", "展翅高飞", "飞沙走石", "石沉大海", "海誓山盟",
    "凤毛麟角", "出类拔萃", "实话实说", "说一不二", "四面楚歌", "歌舞升平", "平心静气", "气吞山河", "疾恶如仇", "仇深似海",
    "欲罢不能", "能者多劳", "劳苦功高", "进退两难", "争权夺利", "利欲熏心", "心平气和", "和颜悦色", "任劳任怨", "怨天尤人",
    "马马虎虎", "虎头蛇尾", "掉以轻心", "想入非非", "故弄玄虚", "虚情假意", "事与愿违", "违法乱纪", "白日做梦", "梦寐以求",
    "形影不离", "离经叛道", "道听途说", "接二连三", "三人成虎", "变本加厉", "厉兵秣马", "马到成功", "功成名就", "细水长流",
    "流芳百世", "世外桃源", "水涨船高", "高枕无忧", "忧国忧民", "民不聊生", "生龙活虎", "虎落平阳", "阳春白雪", "雪上加霜",
    "天涯海角", "原形毕露", "己所不欲", "欲擒故纵", "纵横四海", "泥牛入海", "空谷足音", "辞旧迎新", "天长地久", "长治久安",
    "安之若素", "异想天开", "开门见山", "山盟海誓", "至高无上", "来者不拒", "外圆内方", "容光焕发", "发号施令", "指鹿为马",
    "来龙去脉", "脉脉含情", "情同手足", "沸沸扬扬", "气壮山河", "下笔成章", "安然无恙", "古往今来", "来历不明", "大智若愚",
    "愚公移山", "山珍海味", "味同嚼蜡", "厚颜无耻", "神采飞扬", "目瞪口呆", "呆若木鸡", "鸡犬不宁", "滥竽充数", "数典忘祖",
    "鼠目寸光", "光明磊落", "落井下石", "石破天惊", "惊天动地", "和气生财", "财源广进", "进退维谷", "乐善好施", "德配天地",
    "翻云覆雨", "雨过天晴", "晴空万里", "如鱼得水", "水乳交融", "融会贯通", "成人之美", "四海为家", "家徒四壁", "剑拔弩张",
    "张灯结彩", "亲如手足", "兵强马壮", "情投意合", "珠联璧合", "心花怒放", "放虎归山", "安邦定国", "国泰民安", "为虎作伥",
    "怅然若失", "胆大包天", "天网恢恢", "度日如年", "名不虚传", "传宗接代", "过目不忘", "忘乎所以", "以貌取人", "连绵不绝",
    "绝处逢生", "生财有道", "道貌岸然", "薪火相传", "传为佳话", "话不投机", "神通广大", "大快人心", "堂堂正正", "正大光明",
    "明镜高悬", "悬崖勒马", "马不停蹄", "寻欢作乐", "乐不思蜀", "夜长梦多", "多多益善", "顺水推舟", "国色天香", "缘木求鱼",
    "鱼目混珠", "珠圆玉润", "身不由己", "山高路远", "远走高飞", "飞禽走兽", "户枢不蠹", "民脂民膏", "负荆请罪", "罪该万死",
    "惜墨如金", "金枝玉叶", "叶公好龙", "龙飞凤舞", "坐井观天", "天姿国色", "与虎谋皮", "皮开肉绽", "齿白唇红", "红装素裹",
    "裹足不前", "前无古人", "人来人往", "劳燕分飞", "啼笑皆非", "非同小可", "可歌可泣", "载歌载舞", "念念不忘", "交头接耳",
    "耳濡目染", "黄道吉日", "远交近攻", "攻其不备", "苦口婆心", "心慈手软", "软硬兼施", "行尸走肉", "中庸之道", "道骨仙风",
    "风卷残云", "愁眉苦脸", "赤胆忠心", "水泄不通", "通情达理", "理屈词穷", "穷途末路", "路不拾遗", "遗臭万年", "本末倒置",
    "置之不理", "理不胜辞", "辞不达意", "意气高昂", "昂首挺胸", "胸无点墨", "干脆利落", "落英缤纷", "魂不附体", "体无完肤",
    "草木皆兵", "兵戎相见", "见多识广", "广开言路", "路见不平", "平白无故", "故态复萌", "心猿意马", "山崩地裂", "裂石穿云",
    "云蒸霞蔚", "蔚然成风", "风吹雨打", "打草惊蛇", "蛇蝎心肠", "肠肥脑满", "满面春风", "风华正茂", "前功尽弃", "弃暗投明",
    "明察暗访", "访贫问苦", "苦不堪言", "言听计从", "从善如流", "畅所欲言", "言简意赅", "绝无仅有", "有目共睹", "睹物思人",
    "人困马乏", "陈词滥调", "调兵遣将", "将计就计", "计上心来", "凡夫俗子", "日进斗金", "金屋藏娇", "娇生惯养", "养精蓄锐",
    "锐不可当", "当机立断", "断壁残垣", "事过境迁", "迁善改过", "过眼云烟", "行若无事", "小题大做", "做贼心虚", "虚怀若谷",
    "母慈子孝", "孝悌忠信", "信口开河", "口蜜腹剑", "剑胆琴心", "恩重如山", "山呼海啸", "啸聚山林", "林林总总", "总而言之",
    "石火光阴", "阴魂不散", "勇猛精进", "据为己有", "有口皆碑", "应付自如", "如梦初醒", "歌功颂德", "德厚流光", "光宗耀祖",
    "生老病死", "死而复生", "生杀予夺", "夺眶而出", "地坼天崩", "海不扬波", "诡计多端", "察言观色", "色若死灰", "灰心丧气",
    "气壮如牛", "牛毛细雨", "雨丝风片", "片言只字", "字斟句酌", "今愁古恨", "恨海难填", "填海移山", "怜香惜玉", "玉液琼浆",
    "浆酒霍肉", "肉跳心惊", "惊弓之鸟", "鸟尽弓藏", "藏龙卧虎", "紫气东来", "知书达理", "伏龙凤雏", "震耳欲聋", "哑口无言",
    "投笔从戎", "戎马一生", "别有用心", "心术不正", "正人君子", "子虚乌有", "有恃无恐", "指日可待", "待人接物", "物以类聚",
    "聚精会神", "神清气爽", "目不暇接", "接风洗尘", "标新立异", "异军突起", "起死回生", "保家卫国", "洁身自好", "好高骛远",
    "气贯长虹", "虹销雨霁", "霁月光风", "横眉怒目", "目光如炬", "时来运转", "转祸为福", "福如东海", "高谈阔论", "宝刀未老",
    "老态龙钟", "钟鸣鼎食", "食古不化", "奇货可居", "居心叵测", "志同道合", "全心全意", "前呼后拥", "拥书百城", "偷天换日",
    "天造地设", "设身处地", "地灵人杰", "物华天宝", "老谋深算", "算无遗策", "策马扬鞭", "鞭辟入里", "里通外国", "国色天姿",
    "风烛残年", "年逾古稀", "稀世之宝", "宝山空回", "回光返照", "照猫画虎", "虎踞龙盘", "盘根错节", "节用爱民", "民康物阜",
    "与世无争", "争强好胜", "胜友如云", "云兴霞蔚", "蔚为大观", "观过知仁", "仁民爱物", "物极必反", "反客为主", "主敬存诚",
    "诚心诚意", "意气飞扬", "扬威耀武", "武艺超群", "群策群力", "力不从心", "心花怒发", "发愤图强", "强颜欢笑", "笑里藏刀",
    "刀光剑影", "影影绰绰", "绰绰有余", "余音绕梁", "梁上君子", "孙康映雪", "雪兆丰年", "强本节用", "用舍行藏", "藏污纳垢",
    "垢面蓬头", "头头是道", "道学先生", "生财之道", "合情合理", "理正词直", "直抒己见", "见利忘义", "义断恩绝", "全神贯注",
    "白手起家", "家常便饭", "饭来张口", "口口声声", "声嘶力竭", "竭尽心力", "力大无穷", "穷凶极恶", "恶语伤人", "清夜扪心",
    "发愤忘食", "食前方丈", "才高八斗", "斗酒百篇", "连绵起伏", "诛心之论", "白日飞升", "升堂入室", "遐迩闻名", "名正言顺",
    "顺理成章", "儒雅风流", "反躬自省", "省身克己", "饥寒交迫", "迫不得已", "狗尾续貂", "座无虚席", "席卷天下", "乔迁之喜",
    "喜上眉梢", "朝秦暮楚", "楚楚动人", "恻隐之心", "美不胜收", "收锣罢鼓", "鼓舞人心", "心高气傲", "傲然挺立", "立锥之地",
    "肝胆相照", "照章办事", "事预则立", "立身处世", "源源不断", "断发文身", "身经百战", "战无不胜", "胜任愉快", "快人快语",
    "语焉不详", "斗霜傲雪", "雪窖冰天", "天壤之别", "别树一帜", "明心见性", "性命交关", "关门打狗", "狗急跳墙", "墙面而立",
    "立竿见影", "影只形单", "单枪匹马", "尸鸠之平", "平流缓进", "进德修业", "业精于勤", "勤学苦练", "练达老成", "成群结队",
    "对头冤家", "家破人亡", "亡戟得矛", "列鼎而食", "食为民天", "天悬地隔", "隔岸观火", "火眼金睛", "耐人寻味", "尽力而为",
    "为非作歹", "念念有词", "词不达意", "意兴盎然", "然荻读书", "书声琅琅", "琅琅上口", "口出狂言", "言而有信", "信以为真",
    "真知灼见", "见微知著", "著书立说", "说东道西", "西风落叶", "叶瘦花残", "残花败柳", "柳媚花明", "明媒正娶", "礼顺人情",
    "情窦初开", "开诚布公", "公而忘私", "私心杂念", "念念不舍", "舍近求远", "飞针走线", "线抽傀儡", "振振有词", "词严义正",
    "正本清源", "源头活水", "水秀山明", "性烈如火", "火上加油", "油然而生", "生荣死哀", "哀鸿遍野", "尽力而为"
]))


def first(idiom): return idiom[0]
def last(idiom): return idiom[-1]


def find(start, used):
    c = [i for i in idioms if first(i) == start and i not in used]
    return random.choice(c) if c else None


class Game:
    def __init__(self, root):
        self.root = root
        self.root.title("成语接龙 GUI版")
        self.root.geometry("500x450")
        self.used = []
        self.score = 0
        self.now = ""

        # 标题（去掉emoji，避免编码问题）
        tk.Label(root, text="成语接龙", font=("黑体", 22, "bold")).pack(pady=8)

        # 日志框
        f = tk.Frame(root)
        f.pack(pady=5, padx=10, fill=tk.BOTH, expand=True)
        self.log = tk.Text(f, height=12, font=("宋体", 12))
        self.log.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scroll = tk.Scrollbar(f, command=self.log.yview)
        scroll.pack(side=tk.RIGHT, fill=tk.Y)
        self.log.config(yscrollcommand=scroll.set)
        self.log.config(state=tk.DISABLED)

        # 输入区域
        frm = tk.Frame(root)
        frm.pack(pady=5)
        tk.Label(frm, text="你的成语：", font=("黑体", 12)).grid(row=0, column=0)
        self.entry = tk.Entry(frm, font=("黑体", 14), width=10)
        self.entry.grid(row=0, column=1, padx=5)
        tk.Button(frm, text="提交", command=self.go,
                  font=("黑体", 12)).grid(row=0, column=2)
        self.entry.focus()

        # 分数显示
        self.lb_score = tk.Label(
            root, text=f"分数：{self.score}", font=("黑体", 12))
        self.lb_score.pack(pady=5)

        # 启动游戏
        self.start()

    def add(self, text):
        """添加游戏日志"""
        self.log.config(state=tk.NORMAL)
        self.log.insert(tk.END, text+"\n")
        self.log.see(tk.END)  # 自动滚动到最新内容
        self.log.config(state=tk.DISABLED)

    def start(self):
        """游戏初始化，电脑先出第一个成语"""
        idm = random.choice(idioms)
        self.used.append(idm)
        self.now = last(idm)
        self.add(f"电脑：{idm}")
        self.add(f"请以【{self.now}】开头接龙")

    def go(self):
        """处理玩家输入并验证"""
        u = self.entry.get().strip()
        self.entry.delete(0, tk.END)  # 清空输入框

        # 验证1：是否是4字有效成语
        if len(u) != 4 or u not in idioms:
            messagebox.showerror("游戏结束", "输入的不是有效4字成语！")
            self.root.destroy()
            return

        # 验证2：是否重复使用
        if u in self.used:
            messagebox.showerror("游戏结束", "这个成语已经用过了！")
            self.root.destroy()
            return

        # 验证3：接龙规则（首字匹配上一个尾字）
        if first(u) != self.now:
            messagebox.showerror("游戏结束", f"必须以【{self.now}】开头接龙！")
            self.root.destroy()
            return

        # 玩家接龙成功
        self.add(f"你：{u}")
        self.used.append(u)
        self.score += 10
        self.lb_score.config(text=f"分数：{self.score}")

        # 电脑接龙
        c = find(last(u), self.used)
        if not c:
            messagebox.showinfo("游戏胜利", "你赢了！电脑接不上了！")
            self.root.destroy()
            return

        self.used.append(c)
        self.now = last(c)
        self.add(f"电脑：{c}")
        self.add(f"请以【{self.now}】开头接龙")


if __name__ == "__main__":
    r = tk.Tk()
    Game(r)
    r.mainloop()
