1230 lines
88 KiB
Python
1230 lines
88 KiB
Python
import streamlit as st
|
||
import random
|
||
import time
|
||
import requests
|
||
import json
|
||
import os
|
||
|
||
# DeepSeek API 配置
|
||
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY") # 请替换为实际的API密钥
|
||
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
|
||
|
||
# 系统提示
|
||
SYSTEM_PROMPT = "你是一个成语接龙专家,精通各种成语,能够根据前一个成语的最后一个字(或其谐音)生成合适的接龙成语。"
|
||
|
||
# 汉字拼音映射表(基础常用字)
|
||
CHINESE_PINYIN = {
|
||
'一': 'yi', '心': 'xin', '意': 'yi', '气': 'qi', '风': 'feng', '发': 'fa',
|
||
'扬': 'yang', '光': 'guang', '大': 'da', '材': 'cai', '小': 'xiao', '用': 'yong',
|
||
'武': 'wu', '之': 'zhi', '地': 'di', '博': 'bo', '学': 'xue', '多': 'duo',
|
||
'才': 'cai', '高': 'gao', '八': 'ba', '斗': 'dou', '斗': 'dou', '志': 'zhi',
|
||
'昂': 'ang', '眉': 'mei', '吐': 'tu', '吞': 'tun', '山': 'shan', '河': 'he',
|
||
'清': 'qing', '海': 'hai', '晏': 'yan', '子': 'zi', '使': 'shi', '楚': 'chu',
|
||
'动': 'dong', '人': 'ren', '各': 'ge', '自': 'zi', '美': 'mei', '好': 'hao',
|
||
'事': 'shi', '成': 'cheng', '双': 'shuang', '全': 'quan', '美': 'mei', '满': 'man',
|
||
'堂': 'tang', '彩': 'cai', '声': 'sheng', '笑': 'xiao', '语': 'yu', '香': 'xiang',
|
||
'玉': 'yu', '言': 'yan', '巧': 'qiao', '语': 'yu', '珠': 'zhu', '落': 'luo',
|
||
'玉': 'yu', '盘': 'pan', '根': 'gen', '固': 'gu', '蒂': 'di', '深': 'shen',
|
||
'叶': 'ye', '茂': 'mao', '枝': 'zhi', '繁': 'fan', '花': 'hua', '盛': 'sheng',
|
||
'开': 'kai', '富': 'fu', '贵': 'gui', '竹': 'zhu', '报': 'bao', '平': 'ping',
|
||
'安': 'an', '吉': 'ji', '祥': 'xiang', '如': 'ru', '意': 'yi', '万': 'wan',
|
||
'事': 'shi', '如': 'ru', '意': 'yi', '心': 'xin', '想': 'xiang', '事': 'shi',
|
||
'成': 'cheng', '步': 'bu', '步': 'bu', '高': 'gao', '升': 'sheng', '帆': 'fan',
|
||
'风': 'feng', '顺': 'shun', '马': 'ma', '到': 'dao', '成': 'cheng', '功': 'gong',
|
||
'成': 'cheng', '名': 'ming', '利': 'li', '就': 'jiu', '吉': 'ji', '星': 'xing',
|
||
'高': 'gao', '照': 'zhao', '万': 'wan', '象': 'xiang', '更': 'geng', '新': 'xin',
|
||
'五': 'wu', '谷': 'gu', '丰': 'feng', '登': 'deng', '六': 'liu', '畜': 'chu',
|
||
'兴': 'xing', '旺': 'wang', '和': 'he', '和': 'he', '美': 'mei', '美': 'mei',
|
||
'团': 'tuan', '团': 'tuan', '圆': 'yuan', '圆': 'yuan', '家': 'jia', '和': 'he',
|
||
'万': 'wan', '事': 'shi', '兴': 'xing', '国': 'guo', '泰': 'tai', '民': 'min',
|
||
'安': 'an', '人': 'ren', '寿': 'shou', '年': 'nian', '丰': 'feng', '欢': 'huan',
|
||
'天': 'tian', '喜': 'xi', '地': 'di', '庆': 'qing', '张': 'zhang', '灯': 'deng',
|
||
'结': 'jie', '彩': 'cai', '热': 're', '热': 're', '闹': 'nao', '闹': 'nao',
|
||
'红': 'hong', '红': 'hong', '火': 'huo', '火': 'huo', '吉': 'ji', '利': 'li',
|
||
'双': 'shuang', '收': 'shou', '喜': 'xi', '气': 'qi', '洋': 'yang', '洋': 'yang',
|
||
'幸': 'xing', '福': 'fu', '美': 'mei', '满': 'man', '健': 'jian', '康': 'kang',
|
||
'长': 'chang', '寿': 'shou', '平': 'ping', '平': 'ping', '安': 'an', '安': 'an',
|
||
'快': 'kuai', '乐': 'le', '幸': 'xing', '福': 'fu', '吉': 'ji', '庆': 'qing',
|
||
'有': 'you', '余': 'yu', '笑': 'xiao', '口': 'kou', '常': 'chang', '开': 'kai',
|
||
'财': 'cai', '源': 'yuan', '滚': 'gun', '滚': 'gun', '富': 'fu', '贵': 'gui',
|
||
'荣': 'rong', '华': 'hua', '子': 'zi', '孙': 'sun', '满': 'man', '堂': 'tang',
|
||
'夫': 'fu', '妻': 'qi', '和': 'he', '睦': 'mu', '父': 'fu', '子': 'zi',
|
||
'孝': 'xiao', '顺': 'shun', '兄': 'xiong', '弟': 'di', '友': 'you', '爱': 'ai',
|
||
'和': 'he', '和': 'he', '气': 'qi', '气': 'qi', '风': 'feng', '雨': 'yu',
|
||
'同': 'tong', '舟': 'zhou', '甘': 'gan', '苦': 'ku', '与': 'yu', '共': 'gong',
|
||
'相': 'xiang', '敬': 'jing', '如': 'ru', '宾': 'bin', '恩': 'en', '爱': 'ai',
|
||
'如': 'ru', '初': 'chu', '白': 'bai', '头': 'tou', '偕': 'xie', '老': 'lao',
|
||
'子': 'zi', '孝': 'xiao', '孙': 'sun', '贤': 'xian', '家': 'jia', '业': 'ye',
|
||
'兴': 'xing', '旺': 'wang', '财': 'cai', '运': 'yun', '亨': 'heng', '通': 'tong',
|
||
'名': 'ming', '利': 'li', '双': 'shuang', '收': 'shou', '事': 'shi', '业': 'ye',
|
||
'有': 'you', '成': 'cheng', '前': 'qian', '程': 'cheng', '似': 'si', '锦': 'jin',
|
||
'万': 'wan', '里': 'li', '鹏': 'peng', '程': 'cheng', '一': 'yi', '帆': 'fan',
|
||
'风': 'feng', '顺': 'shun', '一': 'yi', '路': 'lu', '平': 'ping', '安': 'an',
|
||
'四': 'si', '季': 'ji', '平': 'ping', '安': 'an', '万': 'wan', '事': 'shi',
|
||
'如': 'ru', '意': 'yi', '吉': 'ji', '祥': 'xiang', '如': 'ru', '意': 'yi',
|
||
'洪': 'hong', '福': 'fu', '齐': 'qi', '天': 'tian', '泰': 'tai', '山': 'shan',
|
||
'北': 'bei', '斗': 'dou', '寿': 'shou', '比': 'bi', '南': 'nan', '山': 'shan',
|
||
'福': 'fu', '如': 'ru', '东': 'dong', '海': 'hai', '吉': 'ji', '星': 'xing',
|
||
'高': 'gao', '照': 'zhao', '万': 'wan', '事': 'shi', '大': 'da', '吉': 'ji',
|
||
'大': 'da', '利': 'li', '大': 'da', '发': 'fa', '大': 'da', '财': 'cai',
|
||
'大': 'da', '吉': 'ji', '大': 'da', '利': 'li', '大': 'da', '发': 'fa',
|
||
'大': 'da', '财': 'cai', '大': 'da', '吉': 'ji', '大': 'da', '利': 'li',
|
||
'大': 'da', '发': 'fa', '大': 'da', '财': 'cai', '大': 'da', '吉': 'ji',
|
||
'大': 'da', '利': 'li', '大': 'da', '发': 'fa', '大': 'da', '财': 'cai',
|
||
'节': 'jie', '衣': 'yi', '缩': 'suo', '食': 'shi', '果': 'guo', '腹': 'fu',
|
||
'背': 'bei', '受': 'shou', '敌': 'di', '强': 'qiang', '弱': 'ruo', '禁': 'jin',
|
||
'花': 'hua', '雪': 'xue', '月': 'yue', '朗': 'lang', '星': 'xing', '稀': 'xi',
|
||
'奇': 'qi', '古': 'gu', '怪': 'guai', '诞': 'dan', '经': 'jing', '久': 'jiu',
|
||
'衰': 'shuai', '草': 'cao', '连': 'lian', '天': 'tian', '马': 'ma', '行': 'xing',
|
||
'空': 'kong', '穴': 'xue', '来': 'lai', '调': 'tiao', '顺': 'shun', '牵': 'qian',
|
||
'羊': 'yang', '肠': 'chang', '道': 'dao', '貌': 'mao', '岸': 'an', '然': 'ran',
|
||
'糠': 'kang', '照': 'zhao', '薪': 'xin', '火': 'huo', '相': 'xiang', '传': 'chuan',
|
||
'宗': 'zong', '接': 'jie', '代': 'dai', '过': 'guo', '目': 'mu', '忘': 'wang',
|
||
'恩': 'en', '负': 'fu', '义': 'yi', '薄': 'bao', '云': 'yun', '长': 'chang',
|
||
'久': 'jiu'
|
||
}
|
||
|
||
# 成语库(示例,可扩展)
|
||
IDIOMS = {
|
||
'一心一意': {'pinyin': 'yī xīn yī yì', 'meaning': '心思、意念专一'},
|
||
'意气风发': {'pinyin': 'yì qì fēng fā', 'meaning': '形容精神振奋,气概昂扬'},
|
||
'发扬光大': {'pinyin': 'fā yáng guāng dà', 'meaning': '使事业、传统等更加发展壮大'},
|
||
'大材小用': {'pinyin': 'dà cái xiǎo yòng', 'meaning': '大的材料用在小处,多指人事安排不恰当,屈才'},
|
||
'用武之地': {'pinyin': 'yòng wǔ zhī dì', 'meaning': '形容地形险要,利于作战的地方。比喻可以施展自己才能的地方或机会'},
|
||
'地大物博': {'pinyin': 'dì dà wù bó', 'meaning': '指国家疆土辽阔,资源丰富'},
|
||
'博学多才': {'pinyin': 'bó xué duō cái', 'meaning': '学问广博,才能很多'},
|
||
'才高八斗': {'pinyin': 'cái gāo bā dǒu', 'meaning': '形容人文才高超'},
|
||
'斗志昂扬': {'pinyin': 'dòu zhì áng yáng', 'meaning': '斗争的意志旺盛'},
|
||
'扬眉吐气': {'pinyin': 'yáng méi tǔ qì', 'meaning': '形容摆脱了长期受压状态后高兴痛快的样子'},
|
||
'气吞山河': {'pinyin': 'qì tūn shān hé', 'meaning': '气势可以吞没山河,形容气魄很大'},
|
||
'河清海晏': {'pinyin': 'hé qīng hǎi yàn', 'meaning': '黄河水清,大海平静。形容天下太平'},
|
||
'晏子使楚': {'pinyin': 'yàn zǐ shǐ chǔ', 'meaning': '讲述了春秋末期,齐国大夫晏子出使楚国,楚王三次侮辱晏子,想显示楚国的威风,晏子巧妙回击,维护了自己和国家尊严的故事'},
|
||
'楚楚动人': {'pinyin': 'chǔ chǔ dòng rén', 'meaning': '形容姿容美好,动人心神'},
|
||
'人山人海': {'pinyin': 'rén shān rén hǎi', 'meaning': '人群如山似海,形容人聚集得非常多'},
|
||
'海底捞月': {'pinyin': 'hǎi dǐ lāo yuè', 'meaning': '到水中去捞月亮。比喻去做根本做不到的事,只能白费力气'},
|
||
'月明星稀': {'pinyin': 'yuè míng xīng xī', 'meaning': '月亮明亮时,星星就显得稀疏了'},
|
||
'稀奇古怪': {'pinyin': 'xī qí gǔ guài', 'meaning': '指很少见,很奇异,不同一般'},
|
||
'怪诞不经': {'pinyin': 'guài dàn bù jīng', 'meaning': '言语奇怪荒唐,不合常理'},
|
||
'经久不息': {'pinyin': 'jīng jiǔ bù xī', 'meaning': '经过长时间停不下来'},
|
||
'息事宁人': {'pinyin': 'xī shì níng rén', 'meaning': '指调解纠纷,使事情平息下来,消除事端,使人们平安相处'},
|
||
'人云亦云': {'pinyin': 'rén yún yì yún', 'meaning': '人家怎么说,自己也跟着怎么说。指没有主见,只会随声附和'},
|
||
'云开见日': {'pinyin': 'yún kāi jiàn rì', 'meaning': '乌云消散,阳光出现。比喻黑暗过去,光明到来。也比喻误会消除'},
|
||
'日新月异': {'pinyin': 'rì xīn yuè yì', 'meaning': '每天都在更新,每月都有变化。指发展或进步迅速,不断出现新事物、新气象'},
|
||
'异想天开': {'pinyin': 'yì xiǎng tiān kāi', 'meaning': '比喻荒唐离奇,想象着暂时无法实现的事,还比喻超强的想象力'},
|
||
'开门见山': {'pinyin': 'kāi mén jiàn shān', 'meaning': '打开门就能看见山。比喻说话或写文章直截了当谈本题,不拐弯抹角'},
|
||
'山清水秀': {'pinyin': 'shān qīng shuǐ xiù', 'meaning': '形容风景优美'},
|
||
'秀色可餐': {'pinyin': 'xiù sè kě cān', 'meaning': '形容女子姿容非常美丽或景物非常优美'},
|
||
'餐风露宿': {'pinyin': 'cān fēng lù sù', 'meaning': '形容旅途或野外工作的辛苦'},
|
||
'宿弊一清': {'pinyin': 'sù bì yī qīng', 'meaning': '多年的弊病一下就肃清了'},
|
||
'青梅竹马': {'pinyin': 'qīng méi zhú mǎ', 'meaning': '形容男女儿童之间两小无猜的情状'},
|
||
'马到成功': {'pinyin': 'mǎ dào chéng gōng', 'meaning': '形容工作刚开始就取得成功'},
|
||
'功成名就': {'pinyin': 'gōng chéng míng jiù', 'meaning': '功绩取得了,名声也有了'},
|
||
'就事论事': {'pinyin': 'jiù shì lùn shì', 'meaning': '按照事物本身的性质来评定是非得失。现也指仅从事物的表面现象孤立、静止、片面地议论'},
|
||
'事半功倍': {'pinyin': 'shì bàn gōng bèi', 'meaning': '指做事得法,因而费力小,收效大'},
|
||
'倍道兼行': {'pinyin': 'bèi dào jiān xíng', 'meaning': '每天加倍行程,一天走两天的路程。形容加速急行'},
|
||
'行云流水': {'pinyin': 'xíng yún liú shuǐ', 'meaning': '比喻文章的布局和发展,不加雕琢,就像云的运行,水的流动,非常自然'},
|
||
'水落石出': {'pinyin': 'shuǐ luò shí chū', 'meaning': '水落下去,水底的石头就露出来。比喻事情的真相完全显露出来'},
|
||
'出人头地': {'pinyin': 'chū rén tóu dì', 'meaning': '指高人一等。形容德才超众或成就突出'},
|
||
'地老天荒': {'pinyin': 'dì lǎo tiān huāng', 'meaning': '指经历的时间极久'},
|
||
'荒无人烟': {'pinyin': 'huāng wú rén yān', 'meaning': '形容地方偏僻荒凉,见不到人家'},
|
||
'烟消云散': {'pinyin': 'yān xiāo yún sàn', 'meaning': '像烟云消散一样。比喻事物消失得干干净净'},
|
||
'散兵游勇': {'pinyin': 'sàn bīng yóu yǒng', 'meaning': '原指没有统帅的逃散士兵。现有指没有组织的集体队伍里独自行动的人'},
|
||
'勇往直前': {'pinyin': 'yǒng wǎng zhí qián', 'meaning': '勇敢地一直向前进'},
|
||
'前仆后继': {'pinyin': 'qián pū hòu jì', 'meaning': '前面的倒下了,后面的紧跟上去。形容斗争的英勇壮烈'},
|
||
'继往开来': {'pinyin': 'jì wǎng kāi lái', 'meaning': '继承前人的事业,开辟未来的道路'},
|
||
'来日方长': {'pinyin': 'lái rì fāng cháng', 'meaning': '将来的日子还长着呢。表示事有可为或将来还有机会'},
|
||
'长驱直入': {'pinyin': 'cháng qū zhí rù', 'meaning': '迅速向很远的目的地前进。形容进军迅猛顺利。用来表示军队以不可阻挡之势向前挺进,深入敌方心脏'},
|
||
'入木三分': {'pinyin': 'rù mù sān fēn', 'meaning': '形容书法极有笔力。现多比喻分析问题很深刻'},
|
||
'分秒必争': {'pinyin': 'fēn miǎo bì zhēng', 'meaning': '一分一秒也一定要争取。形容抓紧时间'},
|
||
'争先恐后': {'pinyin': 'zhēng xiān kǒng hòu', 'meaning': '抢着向前,唯恐落后'},
|
||
'后来居上': {'pinyin': 'hòu lái jū shàng', 'meaning': '后来的超过先前的。有以称赞后起之秀超过前辈'},
|
||
'上天入地': {'pinyin': 'shàng tiān rù dì', 'meaning': '升上天空,钻入地下。形容神通广大。也比喻为实现某种目的而四处奔走'},
|
||
'地动山摇': {'pinyin': 'dì dòng shān yáo', 'meaning': '地震发生时大地颤动,山河摇摆。亦形容声势浩大或斗争激烈'},
|
||
'摇身一变': {'pinyin': 'yáo shēn yī biàn', 'meaning': '旧时神怪小说中描写有神通的人能用法术一晃身子就改变自己本来的模样。现用来形容人不讲道义原则,一下子来个大改变'},
|
||
'变化多端': {'pinyin': 'biàn huà duō duān', 'meaning': '形容变化极多。也指变化很大'},
|
||
'端本正源': {'pinyin': 'duān běn zhèng yuán', 'meaning': '从根本上加以整顿清理'},
|
||
'源远流长': {'pinyin': 'yuán yuǎn liú cháng', 'meaning': '源头很远,水流很长。比喻历史悠久'},
|
||
'长吁短叹': {'pinyin': 'cháng xū duǎn tàn', 'meaning': '长一声、短一声不住地叹气。形容发愁的神情'},
|
||
'叹为观止': {'pinyin': 'tàn wéi guān zhǐ', 'meaning': '指赞美所见到的事物好到了极点'},
|
||
'止戈为武': {'pinyin': 'zhǐ gē wéi wǔ', 'meaning': '意思是武字是止戈两字合成的,所以要能止战,才是真正的武功。后也指不用武力而使对方屈服,才是真正的武功'},
|
||
'武艺超群': {'pinyin': 'wǔ yì chāo qún', 'meaning': '形容武艺高强,超出一般人'},
|
||
'群策群力': {'pinyin': 'qún cè qún lì', 'meaning': '指发挥集体的作用,大家一起来想办法,贡献力量'},
|
||
'力挽狂澜': {'pinyin': 'lì wǎn kuáng lán', 'meaning': '比喻尽力挽回危险的局势'},
|
||
'澜倒波随': {'pinyin': 'lán dǎo bō suí', 'meaning': '比喻言行无标准'},
|
||
'随遇而安': {'pinyin': 'suí yù ér ān', 'meaning': '指能顺应环境,在任何境遇中都能满足'},
|
||
'安贫乐道': {'pinyin': 'ān pín lè dào', 'meaning': '安于贫穷,以坚持自己的信念为乐。旧时士大夫所主张的为人处世之道'},
|
||
'道听途说': {'pinyin': 'dào tīng tú shuō', 'meaning': '路上听来的、路上传播的话。泛指没有根据的传闻'},
|
||
'说三道四': {'pinyin': 'shuō sān dào sì', 'meaning': '形容不负责任地胡乱议论'},
|
||
'四面楚歌': {'pinyin': 'sì miàn chǔ gē', 'meaning': '比喻陷入四面受敌、孤立无援的境地'},
|
||
'歌功颂德': {'pinyin': 'gē gōng sòng dé', 'meaning': '颂扬功绩和德行'},
|
||
'德高望重': {'pinyin': 'dé gāo wàng zhòng', 'meaning': '道德高尚,名望很大'},
|
||
'重见天日': {'pinyin': 'chóng jiàn tiān rì', 'meaning': '重新看到了天和太阳。比喻脱离黑暗,重见光明'},
|
||
'日新月异': {'pinyin': 'rì xīn yuè yì', 'meaning': '每天都在更新,每月都有变化。指发展或进步迅速,不断出现新事物、新气象'},
|
||
'异口同声': {'pinyin': 'yì kǒu tóng shēng', 'meaning': '不同的嘴说出相同的话。指大家说得都一样'},
|
||
'声东击西': {'pinyin': 'shēng dōng jī xī', 'meaning': '指造成要攻打东边的声势,实际上却攻打西边。是使对方产生错觉以出奇制胜的一种战术'},
|
||
'西装革履': {'pinyin': 'xī zhuāng gé lǚ', 'meaning': '身穿西装,脚穿皮鞋。形容衣着入时'},
|
||
'履险如夷': {'pinyin': 'lǚ xiǎn rú yí', 'meaning': '走在危险的地方就象走在平地一样。比喻平安地渡过困境'},
|
||
'夷为平地': {'pinyin': 'yí wéi píng dì', 'meaning': '铲平使成一块平地'},
|
||
'地广人稀': {'pinyin': 'dì guǎng rén xī', 'meaning': '地方大,人烟少'},
|
||
'稀奇古怪': {'pinyin': 'xī qí gǔ guài', 'meaning': '指很少见,很奇异,不同一般'},
|
||
'怪模怪样': {'pinyin': 'guài mó guài yàng', 'meaning': '形态奇怪'},
|
||
'样样俱全': {'pinyin': 'yàng yàng jù quán', 'meaning': '一切齐全,应有尽有'},
|
||
'全力以赴': {'pinyin': 'quán lì yǐ fù', 'meaning': '把全部力量都投入进去'},
|
||
'赴汤蹈火': {'pinyin': 'fù tāng dǎo huǒ', 'meaning': '沸水敢蹚,烈火敢踏。比喻不避艰险,奋勇向前'},
|
||
'火树银花': {'pinyin': 'huǒ shù yín huā', 'meaning': '形容张灯结彩或大放焰火的灿烂夜景'},
|
||
'花团锦簇': {'pinyin': 'huā tuán jǐn cù', 'meaning': '形容五彩缤纷,十分鲜艳多彩的景象。也形容文章辞藻华丽'},
|
||
'簇锦团花': {'pinyin': 'cù jǐn tuán huā', 'meaning': '簇:聚成团。锦:有花纹的丝织品。形容五色缤纷,繁华艳丽的景象'},
|
||
'花好月圆': {'pinyin': 'huā hǎo yuè yuán', 'meaning': '花儿正盛开,月亮正圆满。比喻美好圆满。多用于祝贺人新婚'},
|
||
'圆孔方木': {'pinyin': 'yuán kǒng fāng mù', 'meaning': '把方木头放到圆孔里去。比喻二者不能投合'},
|
||
'木已成舟': {'pinyin': 'mù yǐ chéng zhōu', 'meaning': '树木已经做成了船。比喻事情已成定局,无法改变'},
|
||
'舟车劳顿': {'pinyin': 'zhōu chē láo dùn', 'meaning': '舟车:船与车,泛指一切水陆交通工具。劳顿:劳累疲倦。形容旅途疲劳困顿'},
|
||
'顿足捶胸': {'pinyin': 'dùn zú chuí xiōng', 'meaning': '用脚跺地,以拳捶胸。形容极度悲痛或恼怒,到了极点'},
|
||
'胸有成竹': {'pinyin': 'xiōng yǒu chéng zhú', 'meaning': '原指画竹子要在心里有一幅竹子的形象。后比喻在做事之前已经拿定主意'},
|
||
'竹报平安': {'pinyin': 'zhú bào píng ān', 'meaning': '比喻平安家信'},
|
||
'安步当车': {'pinyin': 'ān bù dāng chē', 'meaning': '以从容的步行代替乘车。形容轻松缓慢地行走。也指人能够安守贫贱生活'},
|
||
'车水马龙': {'pinyin': 'chē shuǐ mǎ lóng', 'meaning': '车象流水,马象游龙。形容来往车马很多,连续不断的热闹情景'},
|
||
'龙飞凤舞': {'pinyin': 'lóng fēi fèng wǔ', 'meaning': '原形容山势的蜿蜒雄壮,后也形容书法笔势有力,灵活舒展'},
|
||
'舞文弄墨': {'pinyin': 'wǔ wén nòng mò', 'meaning': '原指曲引法律条文作弊。后常指玩弄文字技巧'},
|
||
'墨守成规': {'pinyin': 'mò shǒu chéng guī', 'meaning': '指思想保守,守着老规矩不肯改变'},
|
||
'规行矩步': {'pinyin': 'guī xíng jǔ bù', 'meaning': '指严格按照规矩办事,毫不苟且。也指办事死板,不灵活'},
|
||
'步步为营': {'pinyin': 'bù bù wéi yíng', 'meaning': '军队每向前推进一步就设下一首营垒。形容防守严密,行动谨慎'},
|
||
'营私舞弊': {'pinyin': 'yíng sī wǔ bì', 'meaning': '因图谋私利而玩弄欺骗手段做犯法的事'},
|
||
'弊绝风清': {'pinyin': 'bì jué fēng qīng', 'meaning': '弊:坏事;清:洁净。贪污、舞弊的事情没有了。形容坏事绝迹,社会风气良好'},
|
||
'清风明月': {'pinyin': 'qīng fēng míng yuè', 'meaning': '只与清风、明月为伴。比喻不随便结交朋友。也比喻清闲无事'},
|
||
'月黑风高': {'pinyin': 'yuè hēi fēng gāo', 'meaning': '比喻没有月光风也很大的夜晚。比喻险恶的环境'},
|
||
'高风亮节': {'pinyin': 'gāo fēng liàng jié', 'meaning': '形容道德和行为都很高尚'},
|
||
'节外生枝': {'pinyin': 'jié wài shēng zhī', 'meaning': '本不应该生枝的地方生枝。比喻在原有问题之外又岔出了新问题。多指故意设置障碍,使问题不能顺利解决'},
|
||
'枝繁叶茂': {'pinyin': 'zhī fán yè mào', 'meaning': '枝叶繁密茂盛'},
|
||
'茂林修竹': {'pinyin': 'mào lín xiū zhú', 'meaning': '茂密高大的树林竹林'},
|
||
'竹篮打水': {'pinyin': 'zhú lán dǎ shuǐ', 'meaning': '比喻白费气力,劳而无功'},
|
||
'水泄不通': {'pinyin': 'shuǐ xiè bù tōng', 'meaning': '像是连水也流不出去。形容拥挤或包围的非常严密'},
|
||
'通情达理': {'pinyin': 'tōng qíng dá lǐ', 'meaning': '指说话、做事很讲道理'},
|
||
'理直气壮': {'pinyin': 'lǐ zhí qì zhuàng', 'meaning': '理由充分,说话气势就壮'},
|
||
'壮志凌云': {'pinyin': 'zhuàng zhì líng yún', 'meaning': '壮志:宏大的志愿;凌云:直上云霄。形容理想宏伟远大'},
|
||
'云蒸霞蔚': {'pinyin': 'yún zhēng xiá wèi', 'meaning': '蒸:上升;蔚:聚集。像云霞升腾聚集起来。形容景物灿烂绚丽'},
|
||
'蔚为大观': {'pinyin': 'wèi wéi dà guān', 'meaning': '蔚:茂盛;大观:盛大的景象。发展成为盛大壮观的景象。形容事物美好繁多,给人一种盛大的印象'},
|
||
'观者如织': {'pinyin': 'guān zhě rú zhī', 'meaning': '织:编织的衣物。观众像编织起来的衣物一样密。形容观看的人非常多'},
|
||
'织当访婢': {'pinyin': 'zhī dāng fǎng bì', 'meaning': '比喻办事应该向内行请教'},
|
||
'婢作夫人': {'pinyin': 'bì zuò fū rén', 'meaning': '婢:侍女;夫人:主妇。旧时指在文艺方面虽刻意模仿别人,但才力和作品的规模总赶不上'},
|
||
'人尽其才': {'pinyin': 'rén jìn qí cái', 'meaning': '每个人都能充分发挥自己的才能'},
|
||
'才疏学浅': {'pinyin': 'cái shū xué qiǎn', 'meaning': '疏:浅薄。才学不高,学识不深(多用作自谦的话)'},
|
||
'浅尝辄止': {'pinyin': 'qiǎn cháng zhé zhǐ', 'meaning': '辄:就。略微尝试一下就停下来。指不深入钻研'},
|
||
'止谈风月': {'pinyin': 'zhǐ tán fēng yuè', 'meaning': '止:只,仅。只谈风、月等景物。隐指莫谈国事'},
|
||
'月白风清': {'pinyin': 'yuè bái fēng qīng', 'meaning': '形容幽静美好的夜晚'},
|
||
'清风徐来': {'pinyin': 'qīng fēng xú lái', 'meaning': '清风缓缓地吹来'},
|
||
'来之不易': {'pinyin': 'lái zhī bù yì', 'meaning': '来之:使之来。得到它不容易。表示财物的取得或事物的成功是不容易的'},
|
||
'易如反掌': {'pinyin': 'yì rú fǎn zhǎng', 'meaning': '象翻一下手掌那样容易。比喻事情非常容易做'},
|
||
'掌上明珠': {'pinyin': 'zhǎng shàng míng zhū', 'meaning': '比喻接受父母疼爱的儿女,特指女儿'},
|
||
'珠联璧合': {'pinyin': 'zhū lián bì hé', 'meaning': '璧:平圆形中间有孔的玉。珍珠联串在一起,美玉结合在一块。比喻杰出的人才或美好的事物结合在一起'},
|
||
'合二为一': {'pinyin': 'hé èr wéi yī', 'meaning': '指将两者合为一个整体'},
|
||
'一视同仁': {'pinyin': 'yī shì tóng rén', 'meaning': '原指圣人对百姓一样看待,同施仁爱。后多表示对人同样看待,不分厚薄'},
|
||
'仁至义尽': {'pinyin': 'rén zhì yì jìn', 'meaning': '至:极,最;尽:全部用出。竭尽仁义之道。指人的善意和帮助已经做到了最大限度'},
|
||
'尽善尽美': {'pinyin': 'jìn shàn jìn měi', 'meaning': '极其完善,极其美好。指完美到没有一点缺点'},
|
||
'美中不足': {'pinyin': 'měi zhōng bù zú', 'meaning': '大体很好,但还有不足'},
|
||
'足智多谋': {'pinyin': 'zú zhì duō móu', 'meaning': '足:充实,足够;智:聪明、智慧;谋:计谋。富有智慧,善于谋划。形容人善于料事和用计'},
|
||
'谋事在人': {'pinyin': 'móu shì zài rén', 'meaning': '谋:谋划,安排。根据个人的能力策划事情'},
|
||
'人定胜天': {'pinyin': 'rén dìng shèng tiān', 'meaning': '人定:指人谋。指人力能够战胜自然'},
|
||
'天经地义': {'pinyin': 'tiān jīng dì yì', 'meaning': '经:规范,原则;义:正理。天地间历久不变的常道。指绝对正确,不能改变的道理。也指理所当然的事'},
|
||
'义薄云天': {'pinyin': 'yì báo yún tiān', 'meaning': '正义之气直上高空。形容为正义而斗争的精神极其崇高'},
|
||
'天长地久': {'pinyin': 'tiān cháng dì jiǔ', 'meaning': '跟天和地存在的时间那样长。形容时间悠久。也形容永远不变(多指爱情)'},
|
||
'久别重逢': {'pinyin': 'jiǔ bié chóng féng', 'meaning': '指朋友或亲人在长久分别之后再次见面'},
|
||
'逢凶化吉': {'pinyin': 'féng xiōng huà jí', 'meaning': '逢:遭遇;凶:不幸;吉:吉利、吉祥。遇到凶险转化为吉祥、顺利。这是带有迷信的说法'},
|
||
'吉祥如意': {'pinyin': 'jí xiáng rú yì', 'meaning': '祥:祥瑞。如意称心。多用祝颂他人美满称心'},
|
||
'意气风发': {'pinyin': 'yì qì fēng fā', 'meaning': '意气:意志和气概;风发:象风吹一样迅猛。形容精神振奋,气概豪迈'},
|
||
'发人深省': {'pinyin': 'fā rén shēn xǐng', 'meaning': '发:启发;省:醒悟。启发人深刻思考,有所醒悟'},
|
||
'省吃俭用': {'pinyin': 'shěng chī jiǎn yòng', 'meaning': '形容生活简朴,吃用节俭'},
|
||
'用兵如神': {'pinyin': 'yòng bīng rú shén', 'meaning': '调兵遣将如同神人。形容善于指挥作战'},
|
||
'神通广大': {'pinyin': 'shén tōng guǎng dà', 'meaning': '神通:原是佛家语,指神奇的法术。法术广大无边。形容本领高超,无所不能'},
|
||
'大智若愚': {'pinyin': 'dà zhì ruò yú', 'meaning': '某些才智出众的人,看来好象愚笨,不露锋芒'},
|
||
'愚公移山': {'pinyin': 'yú gōng yí shān', 'meaning': '比喻坚持不懈地改造自然和坚定不移地进行斗争'},
|
||
'山高水长': {'pinyin': 'shān gāo shuǐ cháng', 'meaning': '象山一样高耸,如水一般长流。原比喻人的风范或声誉象高山一样永远存在。后比喻恩德深厚'},
|
||
'长生不老': {'pinyin': 'cháng shēng bù lǎo', 'meaning': '长生:永生。原为道教的话,后也用作对年长者的祝愿语'},
|
||
'老当益壮': {'pinyin': 'lǎo dāng yì zhuàng', 'meaning': '当:应该;益:更加;壮:雄壮。年纪虽老而志气更旺盛,干劲更足'},
|
||
'壮志未酬': {'pinyin': 'zhuàng zhì wèi chóu', 'meaning': '酬:实现。旧指潦倒的一生,志向没有实现就衰老了。也指抱负没有实现就去世了'},
|
||
'踌躇满志': {'pinyin': 'chóu chú mǎn zhì', 'meaning': '踌躇:从容自得的样子;满:满足;志:志愿。形容对自己取得的成就非常得意'},
|
||
'志同道合': {'pinyin': 'zhì tóng dào hé', 'meaning': '道:途径。志趣相同,意见一致'},
|
||
'合浦珠还': {'pinyin': 'hé pǔ zhū huán', 'meaning': '合浦:汉代郡名,在今广西合浦县东北。比喻东西失而复得或人去而复回'},
|
||
'还淳返朴': {'pinyin': 'huán chún fǎn pǔ', 'meaning': '回复到人本来的淳厚、朴实的状态或本性'},
|
||
'朴实无华': {'pinyin': 'pǔ shí wú huá', 'meaning': '质朴实在而不浮华'},
|
||
'华而不实': {'pinyin': 'huá ér bù shí', 'meaning': '华:开花。花开得好看,但不结果实。比喻外表好看,内容空虚'},
|
||
'实事求是': {'pinyin': 'shí shì qiú shì', 'meaning': '指从实际对象出发,探求事物的内部联系及其发展的规律性,认识事物的本质。通常指按照事物的实际情况办事'},
|
||
'是是非非': {'pinyin': 'shì shì fēi fēi', 'meaning': '把对的认为是对的,把错的认为是错的。比喻是非、好坏分得非常清楚'},
|
||
'非池中物': {'pinyin': 'fēi chí zhōng wù', 'meaning': '不是长期蛰居池塘中的小动物。比喻有远大抱负的人终究要做大事'},
|
||
'物尽其用': {'pinyin': 'wù jìn qí yòng', 'meaning': '各种东西凡有可用之处,都要尽量利用。指充分利用资源,一点不浪费'},
|
||
'用兵如神': {'pinyin': 'yòng bīng rú shén', 'meaning': '调兵遣将如同神人。形容善于指挥作战'},
|
||
'神采奕奕': {'pinyin': 'shén cǎi yì yì', 'meaning': '奕奕:精神焕发的样子。形容精神饱满,容光焕发'},
|
||
'奕奕欲生': {'pinyin': 'yì yì yù shēng', 'meaning': '奕奕:精神焕发的样子。指艺术形象非常逼真,如同活的一样'},
|
||
'生龙活虎': {'pinyin': 'shēng lóng huó hǔ', 'meaning': '形容活泼矫健,富有生气'},
|
||
'虎落平川': {'pinyin': 'hǔ luò píng chuān', 'meaning': '平川:地势平坦的地方。老虎离开自己称王称霸的深山老林,落到了平地上。比喻有权有势或有实力者失去了自己的权势或优势'},
|
||
'川流不息': {'pinyin': 'chuān liú bù xī', 'meaning': '川:河流。形容行人、车马等象水流一样连续不断'},
|
||
'息息相关': {'pinyin': 'xī xī xiāng guān', 'meaning': '息:呼吸时进出的气。呼吸也相互关联。形容彼此的关系非常密切'},
|
||
'关门大吉': {'pinyin': 'guān mén dà jí', 'meaning': '指商店倒闭或企业破产停业'},
|
||
'吉祥如意': {'pinyin': 'jí xiáng rú yì', 'meaning': '祥:祥瑞。如意称心。多用祝颂他人美满称心'},
|
||
'意气相投': {'pinyin': 'yì qì xiāng tóu', 'meaning': '意气:志趣性格;投:合得来。指志趣和性格相同的人,彼此投合'},
|
||
'投机取巧': {'pinyin': 'tóu jī qǔ qiǎo', 'meaning': '指用不正当的手段谋取私利。也指靠小聪明占便宜'},
|
||
'巧夺天工': {'pinyin': 'qiǎo duó tiān gōng', 'meaning': '夺:胜过。人工的精巧胜过天然。形容技艺十分巧妙'},
|
||
'工欲善其事,必先利其器': {'pinyin': 'gōng yù shàn qí shì,bì xiān lì qí qì', 'meaning': '工匠想要使他的工作做好,一定要先让工具锋利。比喻要做好一件事,准备工作非常重要'},
|
||
'器宇轩昂': {'pinyin': 'qì yǔ xuān áng', 'meaning': '形容人精力充沛,风度不凡'},
|
||
'昂首挺胸': {'pinyin': 'áng shǒu tǐng xiōng', 'meaning': '抬起头,挺起胸膛。形容斗志高,士气旺'},
|
||
'胸无点墨': {'pinyin': 'xiōng wú diǎn mò', 'meaning': '肚子里没有一点墨水。指人没有文化'},
|
||
'墨守成规': {'pinyin': 'mò shǒu chéng guī', 'meaning': '墨守:战国时墨翟善于守城;成规:现成的或久已通行的规则、方法。指思想保守,守着老规矩不肯改变'},
|
||
'规规矩矩': {'pinyin': 'guī guī jǔ jǔ', 'meaning': '指人的品行方正,谨守礼法'},
|
||
'矩步方行': {'pinyin': 'jǔ bù fāng xíng', 'meaning': '行走时步伐端方合度。指行为举止合乎礼仪规范'},
|
||
'行尸走肉': {'pinyin': 'xíng shī zǒu ròu', 'meaning': '行尸:可以走动的尸体;走肉:会走动而没有灵魂的躯壳。比喻不动脑筋,不起作用,糊里糊涂过日子的人'},
|
||
'肉袒牵羊': {'pinyin': 'ròu tǎn qiān yáng', 'meaning': '肉袒:光着身子;牵羊:牵着羊。古代战败投降的仪式'},
|
||
'羊肠小道': {'pinyin': 'yáng cháng xiǎo dào', 'meaning': '曲折而极窄的路(多指山路)'},
|
||
'道听途说': {'pinyin': 'dào tīng tú shuō', 'meaning': '道、途:路。路上听来的、路上传播的话。泛指没有根据的传闻'},
|
||
'说长道短': {'pinyin': 'shuō cháng dào duǎn', 'meaning': '议论别人的好坏是非'},
|
||
'短兵相接': {'pinyin': 'duǎn bīng xiāng jiē', 'meaning': '短兵:刀剑等短兵器;接:交战。指近距离搏斗。比喻面对面地进行激烈的斗争'},
|
||
'接二连三': {'pinyin': 'jiē èr lián sān', 'meaning': '一个接着一个,接连不断'},
|
||
'三心二意': {'pinyin': 'sān xīn èr yì', 'meaning': '又想这样又想那样,犹豫不定。常指不安心,不专一'},
|
||
'意气风发': {'pinyin': 'yì qì fēng fā', 'meaning': '意气:意志和气概;风发:象风吹一样迅猛。形容精神振奋,气概豪迈'},
|
||
'发扬光大': {'pinyin': 'fā yáng guāng dà', 'meaning': '发扬:发展,提倡;光大:辉煌而盛大。使事业、传统等更加发展壮大'},
|
||
'大快人心': {'pinyin': 'dà kuài rén xīn', 'meaning': '快:痛快。指坏人坏事受到惩罚或打击,使大家非常痛快'},
|
||
'心口如一': {'pinyin': 'xīn kǒu rú yī', 'meaning': '心里想的和嘴里说的一样。形容诚实直爽'},
|
||
'一马平川': {'pinyin': 'yī mǎ píng chuān', 'meaning': '平川:地势平坦的地方。能够纵马疾驰的一片广阔平地。指广阔的平原'},
|
||
'川流不息': {'pinyin': 'chuān liú bù xī', 'meaning': '川:河流。形容行人、车马等象水流一样连续不断'},
|
||
'息事宁人': {'pinyin': 'xī shì níng rén', 'meaning': '息:平息;宁:使安定。原指不生事,不骚扰百姓,后指调解纠纷,使事情平息下来,消除事端,使人们平安相处'},
|
||
'人仰马翻': {'pinyin': 'rén yǎng mǎ fān', 'meaning': '人马被打得仰翻在地。形容被打得惨败。也比喻乱得一塌糊涂,不可收拾'},
|
||
'翻江倒海': {'pinyin': 'fān jiāng dǎo hǎi', 'meaning': '原形容雨势大,后形容力量或声势非常壮大'},
|
||
'海阔天空': {'pinyin': 'hǎi kuò tiān kōng', 'meaning': '象大海一样辽阔,象天空一样无边无际。形容大自然的广阔。比喻言谈议论等漫无边际,没有中心'},
|
||
'空穴来风': {'pinyin': 'kōng xué lái fēng', 'meaning': '穴:孔、洞;来:招致。有了洞穴才进风。比喻消息和谣言的传播不是完全没有原因的。也比喻流言乘机会传开来'},
|
||
'风调雨顺': {'pinyin': 'fēng tiáo yǔ shùn', 'meaning': '调:调和;顺:和协。风雨及时适宜。形容风雨适合农时'},
|
||
'顺手牵羊': {'pinyin': 'shùn shǒu qiān yáng', 'meaning': '顺手把人家的羊牵走。比喻趁势将敌手捉住或乘机利用别人。现比喻乘机拿走别人的东西'},
|
||
'羊质虎皮': {'pinyin': 'yáng zhì hǔ pí', 'meaning': '质:本性。羊虽然披上虎皮,还是见到草就喜欢,碰到豺狼就怕得发抖,它的本性没有变。比喻外表装作强大而实际上很胆小'},
|
||
'皮里阳秋': {'pinyin': 'pí lǐ yáng qiū', 'meaning': '指藏在心里不说出来的言论'},
|
||
'秋高气爽': {'pinyin': 'qiū gāo qì shuǎng', 'meaning': '形容秋季晴空万里,天气清爽'},
|
||
'爽然若失': {'pinyin': 'shuǎng rán ruò shī', 'meaning': '爽然:主意不定的样子;若失:象失去依靠。形容心中无主、空虚怅惘的神态'},
|
||
'失之东隅,收之桑榆': {'pinyin': 'shī zhī dōng yú,shōu zhī sāng yú', 'meaning': '东隅:东方日出处,指早晨;桑、榆:指日落处,也指日暮。比喻开始在这一方面失败了,最后在另一方面取得胜利'},
|
||
'榆木脑袋': {'pinyin': 'yú mù nǎo dài', 'meaning': '比喻思想顽固'},
|
||
'呆若木鸡': {'pinyin': 'dāi ruò mù jī', 'meaning': '呆:傻,发愣的样子。呆得象木头鸡一样。形容因恐惧或惊异而发愣的样子'},
|
||
'鸡飞狗跳': {'pinyin': 'jī fēi gǒu tiào', 'meaning': '把鸡吓得飞起来,把狗吓得到处乱跳。形容惊慌得乱成一团'},
|
||
'跳梁小丑': {'pinyin': 'tiào liáng xiǎo chǒu', 'meaning': '跳梁:腾跃跳动;小丑:对人的卑称。比喻猖狂捣乱而成不了大气候的坏人'},
|
||
'丑态百出': {'pinyin': 'chǒu tài bǎi chū', 'meaning': '各种丑恶的样子都表现出来了'},
|
||
'出尔反尔': {'pinyin': 'chū ěr fǎn ěr', 'meaning': '尔:你;反:通“返”,回。原意是你怎样做,就会得到怎样的后果。现指人的言行反复无常,前后自相矛盾'},
|
||
'尔虞我诈': {'pinyin': 'ěr yú wǒ zhà', 'meaning': '尔:你;虞、诈:欺骗。表示彼此互相欺骗'},
|
||
'诈败佯输': {'pinyin': 'zhà bài yáng shū', 'meaning': '诈、佯:假装。假装败阵,引人上当'},
|
||
'输肝剖胆': {'pinyin': 'shū gān pōu dǎn', 'meaning': '比喻对人极为忠诚'},
|
||
'胆大心细': {'pinyin': 'dǎn dà xīn xì', 'meaning': '形容办事果断,考虑周密'},
|
||
'细水长流': {'pinyin': 'xì shuǐ cháng liú', 'meaning': '比喻节约使用财物,使经常不缺用。也比喻一点一滴不间断地做某件事'},
|
||
'流言蜚语': {'pinyin': 'liú yán fēi yǔ', 'meaning': '毫无根据的话。指背后散布的诽谤性的坏话'},
|
||
'语重心长': {'pinyin': 'yǔ zhòng xīn cháng', 'meaning': '话深刻有力,情意深长'},
|
||
'长驱直入': {'pinyin': 'cháng qū zhí rù', 'meaning': '长驱:不停顿地策马快跑;直入:一直往前。指长距离不停顿的快速行进。形容进军迅猛,不可阻挡'},
|
||
'入木三分': {'pinyin': 'rù mù sān fēn', 'meaning': '相传王羲之在木板上写字,木工刻时,发现字迹透入木板三分深。形容书法极有笔力。现多比喻分析问题很深刻'},
|
||
'分道扬镳': {'pinyin': 'fēn dào yáng biāo', 'meaning': '分路而行。比喻目标不同,各走各的路或各干各的事'},
|
||
'标新立异': {'pinyin': 'biāo xīn lì yì', 'meaning': '标:提出,写明;异:不同的,特别的。提出新奇的主张,表示与众不同'},
|
||
'异想天开': {'pinyin': 'yì xiǎng tiān kāi', 'meaning': '异:奇异;天开:比喻凭空的、根本没有的事情。指想法很不切实际,非常奇怪'},
|
||
'开天辟地': {'pinyin': 'kāi tiān pì dì', 'meaning': '古代神话传说:盘古氏开辟天地,开始有人类历史。后常比喻空前的,自古以来没有过的'},
|
||
'地老天荒': {'pinyin': 'dì lǎo tiān huāng', 'meaning': '指经历的时间极久'},
|
||
'荒无人烟': {'pinyin': 'huāng wú rén yān', 'meaning': '人烟:指住户、居民,因有炊烟的地方就有人居住。形容地方偏僻荒凉,见不到人家'},
|
||
'烟消云散': {'pinyin': 'yān xiāo yún sàn', 'meaning': '象烟云消散一样。比喻事物消失得干干净净'},
|
||
'散兵游勇': {'pinyin': 'sàn bīng yóu yǒng', 'meaning': '勇:清代指战争期间临时招募的士兵。原指没有统帅的逃散士兵。现有指没有组织的集体队伍里独自行动的人'},
|
||
'勇往直前': {'pinyin': 'yǒng wǎng zhí qián', 'meaning': '勇敢地一直向前进'},
|
||
'前赴后继': {'pinyin': 'qián fù hòu jì', 'meaning': '前面的冲上去了,后面的紧跟上来。形容不断投入战斗,奋勇冲杀向前'},
|
||
'继往开来': {'pinyin': 'jì wǎng kāi lái', 'meaning': '继:继承;开:开辟。继承前人的事业,开辟未来的道路'},
|
||
'来者不拒': {'pinyin': 'lái zhě bù jù', 'meaning': '拒:拒绝。对于有所求而来的人或送上门来的东西概不拒绝'},
|
||
'拒之门外': {'pinyin': 'jù zhī mén wài', 'meaning': '拒:拒绝。把人挡在门外,不让其进入,形容拒绝协商或共事'},
|
||
'外柔内刚': {'pinyin': 'wài róu nèi gāng', 'meaning': '柔:柔弱;内:内心。外表柔和而内心刚正'},
|
||
'刚愎自用': {'pinyin': 'gāng bì zì yòng', 'meaning': '愎:任性;刚愎:强硬回执;自用:自以为是。十分固执自信,不考虑别人的意见'},
|
||
'用兵如神': {'pinyin': 'yòng bīng rú shén', 'meaning': '调兵遣将如同神人。形容善于指挥作战'},
|
||
'神出鬼没': {'pinyin': 'shén chū guǐ mò', 'meaning': '出:出现;没:消失。象神鬼那样出没无常。形容出没无常,不可捉摸。后泛指行动变化迅速'},
|
||
'没齿难忘': {'pinyin': 'mò chǐ nán wàng', 'meaning': '没齿:终身。一辈子也忘不了'},
|
||
'忘乎所以': {'pinyin': 'wàng hū suǒ yǐ', 'meaning': '指因过分兴奋或得意而忘了应有的举止'},
|
||
'以逸待劳': {'pinyin': 'yǐ yì dài láo', 'meaning': '逸:安闲;劳:疲劳。指在战争中做好充分准备,养精蓄锐,等疲乏的敌人来犯时给以迎头痛击'},
|
||
'劳燕分飞': {'pinyin': 'láo yàn fēn fēi', 'meaning': '劳:伯劳。伯劳、燕子各飞东西。比喻夫妻、情侣别离'},
|
||
'飞蛾扑火': {'pinyin': 'fēi é pū huǒ', 'meaning': '飞蛾扑到火上,比喻自取灭亡'},
|
||
'火上浇油': {'pinyin': 'huǒ shàng jiāo yóu', 'meaning': '往火上倒油。比喻使人更加愤怒或使情况更加严重'},
|
||
'油腔滑调': {'pinyin': 'yóu qiāng huá diào', 'meaning': '形容说话轻浮油滑,不诚恳,不严肃'},
|
||
'调虎离山': {'pinyin': 'diào hǔ lí shān', 'meaning': '设法使老虎离开原来的山冈。比喻用计使对方离开原来的有利位置'},
|
||
'山高水长': {'pinyin': 'shān gāo shuǐ cháng', 'meaning': '象山一样高耸,如水一般长流。原比喻人的风范或声誉象高山一样永远存在。后比喻恩德深厚'},
|
||
'长年累月': {'pinyin': 'cháng nián lěi yuè', 'meaning': '长年:整年;累月:很多个月。形容经过了很多年月'},
|
||
'月黑风高': {'pinyin': 'yuè hēi fēng gāo', 'meaning': '比喻没有月光风也很大的夜晚。比喻险恶的环境'},
|
||
'高瞻远瞩': {'pinyin': 'gāo zhān yuǎn zhǔ', 'meaning': '瞻:视,望;瞩:注视。站得高,看得远。比喻眼光远大'},
|
||
'瞩望将来': {'pinyin': 'zhǔ wàng jiāng lái', 'meaning': '期待着将来'},
|
||
'来日方长': {'pinyin': 'lái rì fāng cháng', 'meaning': '来日:未来的日子;方:正。将来的日子还长着呢。表示事有可为或将来还有机会'},
|
||
'长话短说': {'pinyin': 'cháng huà duǎn shuō', 'meaning': '要说的话很多,一时不能说清,只用扼要的几句话表明主要意思'},
|
||
'说三道四': {'pinyin': 'shuō sān dào sì', 'meaning': '形容不负责任地胡乱议论'},
|
||
'四面楚歌': {'pinyin': 'sì miàn chǔ gē', 'meaning': '比喻陷入四面受敌、孤立无援的境地'},
|
||
'歌功颂德': {'pinyin': 'gē gōng sòng dé', 'meaning': '歌、颂:颂扬。颂扬功绩和德行'},
|
||
'德高望重': {'pinyin': 'dé gāo wàng zhòng', 'meaning': '德:品德;望:声望。道德高尚,名望很大'},
|
||
'重蹈覆辙': {'pinyin': 'chóng dǎo fù zhé', 'meaning': '蹈:踏;覆:翻;辙:车轮辗过的痕迹。重新走上翻过车的老路。比喻不吸取教训,再走失败的老路'},
|
||
'辙乱旗靡': {'pinyin': 'zhé luàn qí mǐ', 'meaning': '辙:车辙;靡:倒下。车辙错乱,旗子倒下。形容军队溃败逃窜'},
|
||
'靡靡之音': {'pinyin': 'mǐ mǐ zhī yīn', 'meaning': '靡靡:柔弱,萎靡不振。使人萎靡不振的音乐。指颓废的、低级趣味的乐曲'},
|
||
'音容笑貌': {'pinyin': 'yīn róng xiào mào', 'meaning': '谈笑时的容貌和神态。用以怀念故人的声音容貌和神情'},
|
||
'貌合神离': {'pinyin': 'mào hé shén lí', 'meaning': '貌:外表;神:内心。表面上关系很密切,实际上是两条心'},
|
||
'离心离德': {'pinyin': 'lí xīn lí dé', 'meaning': '思想不统一,信念也不一致。指不一条心'},
|
||
'德艺双馨': {'pinyin': 'dé yì shuāng xīn', 'meaning': '形容一个人的德行和艺术(技艺)都具有良好的声誉。一般指从事艺术的人'},
|
||
'馨香祷祝': {'pinyin': 'xīn xiāng dǎo zhù', 'meaning': '馨香:烧香;祷祝:祷告祝愿。原指迷信的人虔诚地向神祈祷祝愿。后引申指真诚地期望'},
|
||
'祝哽祝噎': {'pinyin': 'zhù gěng zhù yē', 'meaning': '祝:祷祝;哽、噎:食物塞住喉咙。古代帝王敬老、养老的表示:请年老致仕者饮酒吃饭,设置专人祷祝他们不哽不噎'},
|
||
'噎膈反胃': {'pinyin': 'yē gé fǎn wèi', 'meaning': '中医病名,即食道癌、胃癌'},
|
||
'位高权重': {'pinyin': 'wèi gāo quán zhòng', 'meaning': '地位高,权力大'},
|
||
'重见天日': {'pinyin': 'chóng jiàn tiān rì', 'meaning': '重新看到了天和太阳。比喻脱离黑暗,重见光明'},
|
||
'日新月异': {'pinyin': 'rì xīn yuè yì', 'meaning': '新:更新;异:不同。每天都在更新,每月都有变化。指发展或进步迅速,不断出现新事物、新气象'},
|
||
'异曲同工': {'pinyin': 'yì qǔ tóng gōng', 'meaning': '工:细致,巧妙;异:不同的。不同的曲调演得同样好。比喻话的说法不一而用意相同,或一件事情的做法不同而都巧妙地达到目的'},
|
||
'工力悉敌': {'pinyin': 'gōng lì xī dí', 'meaning': '工力:功夫和力量;悉:完全;敌:相当。双方用的功夫和力量相当。常形容两个优秀的艺术作品不分上下'},
|
||
'敌众我寡': {'pinyin': 'dí zhòng wǒ guǎ', 'meaning': '敌方人数多,我方人数少。形容双方对峙,众寡悬殊'},
|
||
'寡不敌众': {'pinyin': 'guǎ bù dí zhòng', 'meaning': '寡:少;敌:抵挡;众:多。人少的抵挡不住人多的'},
|
||
'众志成城': {'pinyin': 'zhòng zhì chéng chéng', 'meaning': '万众一心,像坚固的城墙一样不可摧毁。比喻团结一致,力量无比强大'},
|
||
'城门失火,殃及池鱼': {'pinyin': 'chéng mén shī huǒ,yāng jí chí yú', 'meaning': '城门失火,大家都到护城河取水,水用完了,鱼也死了。比喻因受连累而遭到损失或祸害'},
|
||
'鱼目混珠': {'pinyin': 'yú mù hùn zhū', 'meaning': '混:搀杂,冒充。拿鱼眼睛冒充珍珠。比喻用假的冒充真的'},
|
||
'珠联璧合': {'pinyin': 'zhū lián bì hé', 'meaning': '璧:平圆形中间有孔的玉。珍珠联串在一起,美玉结合在一块。比喻杰出的人才或美好的事物结合在一起'},
|
||
'合情合理': {'pinyin': 'hé qíng hé lǐ', 'meaning': '符合情理'},
|
||
'理屈词穷': {'pinyin': 'lǐ qū cí qióng', 'meaning': '屈:短,亏;穷:尽。由于理亏而无话可说'},
|
||
'穷途末路': {'pinyin': 'qióng tú mò lù', 'meaning': '穷途:处境困窘。形容到了无路可走的地步'},
|
||
'路不拾遗': {'pinyin': 'lù bù shí yí', 'meaning': '遗:失物。路上没有人把别人丢失的东西捡走。形容社会风气好'},
|
||
'遗臭万年': {'pinyin': 'yí chòu wàn nián', 'meaning': '遗臭:死后留下的恶名。死后恶名一直流传,永远被人唾骂'},
|
||
'年富力强': {'pinyin': 'nián fù lì qiáng', 'meaning': '年富:未来的年岁多。形容年纪轻,精力旺盛'},
|
||
'强人所难': {'pinyin': 'qiǎng rén suǒ nán', 'meaning': '勉强人家去做他不能做或不愿做的事情'},
|
||
'难能可贵': {'pinyin': 'nán néng kě guì', 'meaning': '难能:极难做到。指不容易做到的事居然能做到,非常可贵'},
|
||
'贵不可言': {'pinyin': 'guì bù kě yán', 'meaning': '旧时多用以称人贵有帝王、母后之相。此话不能直言,故婉称之'},
|
||
'言听计从': {'pinyin': 'yán tīng jì cóng', 'meaning': '听:听从。什么话都听从,什么主意都采纳。形容对某人十分信任'},
|
||
'从容不迫': {'pinyin': 'cóng róng bù pò', 'meaning': '从容:不慌不忙,很镇静;不迫:不急促。不慌不忙,沉着镇定'},
|
||
'迫不及待': {'pinyin': 'pò bù jí dài', 'meaning': '迫:紧急。急迫得不能等待。形容心情急切'},
|
||
'待价而沽': {'pinyin': 'dài jià ér gū', 'meaning': '沽:卖。等有好价钱才卖。比喻谁给好的待遇就替谁工作'},
|
||
'沽名钓誉': {'pinyin': 'gū míng diào yù', 'meaning': '沽:买;钓:用饵引鱼上钩,比喻骗取。用某种不正当的手段捞取名誉'},
|
||
'誉满天下': {'pinyin': 'yù mǎn tiān xià', 'meaning': '美好的名声天下皆知'},
|
||
'下里巴人': {'pinyin': 'xià lǐ bā rén', 'meaning': '原指战国时代楚国民间流行的一种歌曲。比喻通俗的文学艺术'},
|
||
'人杰地灵': {'pinyin': 'rén jié dì líng', 'meaning': '杰:杰出;灵:好。指有杰出的人降生或到过,其地也就成了名胜之区'},
|
||
'灵机一动': {'pinyin': 'líng jī yī dòng', 'meaning': '灵机:灵活的心思。急忙中转了一下念头(多指临时想出了一个办法)'},
|
||
'动魄惊心': {'pinyin': 'dòng pò jīng xīn', 'meaning': '使人神魂震惊。原指文辞优美,意境深远,使人感受极深,震动极大。后常形容使人十分惊骇紧张到极点'},
|
||
'心灰意冷': {'pinyin': 'xīn huī yì lěng', 'meaning': '灰心失望,意志消沉'},
|
||
'冷眼旁观': {'pinyin': 'lěng yǎn páng guān', 'meaning': '指不参与其事,站在一旁看事情的发展'},
|
||
'观过知仁': {'pinyin': 'guān guò zhī rén', 'meaning': '察看一个人所犯过错的性质,就可以了解他的为人'},
|
||
'仁至义尽': {'pinyin': 'rén zhì yì jìn', 'meaning': '至:极,最;尽:全部用出。竭尽仁义之道。指人的善意和帮助已经做到了最大限度'},
|
||
'尽善尽美': {'pinyin': 'jìn shàn jìn měi', 'meaning': '极其完善,极其美好。指完美到没有一点缺点'},
|
||
'美轮美奂': {'pinyin': 'měi lún měi huàn', 'meaning': '轮:高大;奂:众多。形容房屋高大华丽'},
|
||
'焕然一新': {'pinyin': 'huàn rán yī xīn', 'meaning': '焕然:鲜明光亮的样子。改变旧面貌,出现崭新的气象'},
|
||
'新婚燕尔': {'pinyin': 'xīn hūn yàn ěr', 'meaning': '原为弃妇诉说原夫再娶与新欢作乐,后反其意,用作庆贺新婚之辞。形容新婚时的欢乐'},
|
||
'尔诈我虞': {'pinyin': 'ěr zhà wǒ yú', 'meaning': '尔:你;虞、诈:欺骗。表示彼此互相欺骗'},
|
||
'虞诈相倾': {'pinyin': 'yú zhà xiāng qīng', 'meaning': '互相欺骗,彼此倾轧'},
|
||
'倾国倾城': {'pinyin': 'qīng guó qīng chéng', 'meaning': '倾:倾覆;城:国。原指因女色而亡国。后多形容妇女容貌极美'},
|
||
'城北徐公': {'pinyin': 'chéng běi xú gōng', 'meaning': '原指战国时期齐国姓徐的美男子。后作美男子的代称'},
|
||
'公而忘私': {'pinyin': 'gōng ér wàng sī', 'meaning': '为了公事而不考虑私事,为了集体利益而不考虑个人得失'},
|
||
'私心杂念': {'pinyin': 'sī xīn zá niàn', 'meaning': '为个人利益打算的种种念头'},
|
||
'念念不忘': {'pinyin': 'niàn niàn bù wàng', 'meaning': '念念:时刻思念着。形容牢记于心,时刻不忘'},
|
||
'忘年之交': {'pinyin': 'wàng nián zhī jiāo', 'meaning': '年辈不相当而结交为朋友'},
|
||
'交头接耳': {'pinyin': 'jiāo tóu jiē ěr', 'meaning': '交头:头靠着头;接耳:嘴凑近耳朵。形容两个人凑近低声交谈'},
|
||
'耳濡目染': {'pinyin': 'ěr rú mù rǎn', 'meaning': '濡:沾湿;染:沾染。耳朵经常听到,眼睛经常看到,不知不觉地受到影响'},
|
||
'染苍染黄': {'pinyin': 'rǎn cāng rǎn huáng', 'meaning': '苍:青色。比喻变化不定,反复无常'},
|
||
'黄粱一梦': {'pinyin': 'huáng liáng yī mèng', 'meaning': '黄粱:小米。比喻虚幻不能实现的梦想'},
|
||
'梦寐以求': {'pinyin': 'mèng mèi yǐ qiú', 'meaning': '寐:睡着。做梦的时候都在追求。形容迫切地期望着'},
|
||
'求全责备': {'pinyin': 'qiú quán zé bèi', 'meaning': '求、责:要求;全、备:完备,完美。对人对事物要求十全十美,毫无缺点'},
|
||
'备而不用': {'pinyin': 'bèi ér bù yòng', 'meaning': '准备好了,以备急用,眼下暂存不用'},
|
||
'用舍行藏': {'pinyin': 'yòng shě xíng cáng', 'meaning': '任用就出来做事,不得任用就退隐。这是早时世大夫的处世态度'},
|
||
'藏龙卧虎': {'pinyin': 'cáng lóng wò hǔ', 'meaning': '指隐藏着未被发现的人才,也指隐藏不露的人才'},
|
||
'虎背熊腰': {'pinyin': 'hǔ bèi xióng yāo', 'meaning': '背宽厚如虎,腰粗壮如熊。形容人身体魁梧健壮'},
|
||
'腰缠万贯': {'pinyin': 'yāo chán wàn guàn', 'meaning': '腰缠:指随身携带的财物;贯:旧时用绳索穿钱,每一千文为一贯。比喻钱财极多'},
|
||
'贯通融会': {'pinyin': 'guàn tōng róng huì', 'meaning': '把各方面的知识和道理融化汇合,得到全面透彻的理解'},
|
||
'会少离多': {'pinyin': 'huì shǎo lí duō', 'meaning': '相会少,别离多。感慨人生聚散无常或离别之苦'},
|
||
'多此一举': {'pinyin': 'duō cǐ yī jǔ', 'meaning': '举:行动。指多余的,没有必要的举动'},
|
||
'举世闻名': {'pinyin': 'jǔ shì wén míng', 'meaning': '举世:全世界。全世界都知道。形容非常著名'},
|
||
'名落孙山': {'pinyin': 'míng luò sūn shān', 'meaning': '名字落在榜末孙山的后面。指考试或选拔没有录取'},
|
||
'山盟海誓': {'pinyin': 'shān méng hǎi shì', 'meaning': '指男女相爱时立下的誓言,表示爱情要象山和海一样永恒不变'},
|
||
'誓死不二': {'pinyin': 'shì sǐ bù èr', 'meaning': '誓死:立下志愿,至死不变。至死也不变心。形容意志坚定专一'},
|
||
'二龙戏珠': {'pinyin': 'èr lóng xì zhū', 'meaning': '两条龙相对,戏玩着一颗宝珠'},
|
||
'珠圆玉润': {'pinyin': 'zhū yuán yù rùn', 'meaning': '润:细腻光滑。象珠子一样圆,象玉石一样光润。比喻歌声宛转优美,或文字流畅明快'},
|
||
'润物无声': {'pinyin': 'rùn wù wú shēng', 'meaning': '指有大胸怀者,做了贡献而不张扬,默默奉献'},
|
||
'声东击西': {'pinyin': 'shēng dōng jī xī', 'meaning': '声:声张。指造成要攻打东边的声势,实际上却攻打西边。是使对方产生错觉以出奇制胜的一种战术'},
|
||
'西装革履': {'pinyin': 'xī zhuāng gé lǚ', 'meaning': '身穿西装,脚穿皮鞋。形容衣着入时'},
|
||
'履险如夷': {'pinyin': 'lǚ xiǎn rú yí', 'meaning': '履:行走;夷:平坦。走在危险的地方就象走在平地一样。比喻平安地渡过困境'},
|
||
'夷为平地': {'pinyin': 'yí wéi píng dì', 'meaning': '铲平使成一块平地'},
|
||
'地久天长': {'pinyin': 'dì jiǔ tiān cháng', 'meaning': '时间长,日子久'},
|
||
'长年累月': {'pinyin': 'cháng nián lěi yuè', 'meaning': '形容经过了很多年月'},
|
||
'月白风清': {'pinyin': 'yuè bái fēng qīng', 'meaning': '形容幽静美好的夜晚'},
|
||
'清风朗月': {'pinyin': 'qīng fēng lǎng yuè', 'meaning': '比喻不随便结交朋友。也比喻清闲无事'},
|
||
'月黑风高': {'pinyin': 'yuè hēi fēng gāo', 'meaning': '比喻没有月光风也很大的夜晚。比喻险恶的环境'},
|
||
'高风亮节': {'pinyin': 'gāo fēng liàng jié', 'meaning': '高风:高尚的品格;亮节:坚贞的节操。形容道德和行为都很高尚'},
|
||
'节衣缩食': {'pinyin': 'jié yī suō shí', 'meaning': '省吃省穿。形容节约'},
|
||
'食不果腹': {'pinyin': 'shí bù guǒ fù', 'meaning': '果:充实,饱。指吃不饱肚子。形容生活贫困'},
|
||
'腹背受敌': {'pinyin': 'fù bèi shòu dí', 'meaning': '腹:指前面;背:指后面。前后受到敌人的夹攻'},
|
||
'敌强我弱': {'pinyin': 'dí qiáng wǒ ruò', 'meaning': '敌方力量强大,我方力量薄弱'},
|
||
'弱不禁风': {'pinyin': 'ruò bù jīn fēng', 'meaning': '禁:承受。形容身体娇弱,连风吹都经受不起'},
|
||
'风花雪月': {'pinyin': 'fēng huā xuě yuè', 'meaning': '原指旧时诗文里经常描写的自然景物。后比喻堆砌词藻、内容贫乏空洞的诗文。也指爱情之事或花天酒地的荒淫生活'},
|
||
'月朗星稀': {'pinyin': 'yuè lǎng xīng xī', 'meaning': '皓月当空,星星稀少'},
|
||
'稀奇古怪': {'pinyin': 'xī qí gǔ guài', 'meaning': '指很少见,很奇异,不同一般'},
|
||
'怪诞不经': {'pinyin': 'guài dàn bù jīng', 'meaning': '怪诞:离奇古怪;不经:不合常理。指言语奇怪荒唐,不合常理'},
|
||
'经久不衰': {'pinyin': 'jīng jiǔ bù shuāi', 'meaning': '精神饱满的状态,身体健壮的外表,或幼年期到成年期之间的时期的精神特征;青年人的活力或朝气'},
|
||
'衰草连天': {'pinyin': 'shuāi cǎo lián tiān', 'meaning': '形容荒草遍地,极其荒凉的样子'},
|
||
'天马行空': {'pinyin': 'tiān mǎ xíng kōng', 'meaning': '天马:神马。天马奔腾神速,象是腾起在空中飞行一样。比喻诗文气势豪放。也比喻人浮躁,不踏实'},
|
||
'空穴来风': {'pinyin': 'kōng xué lái fēng', 'meaning': '穴:孔、洞;来:招致。有了洞穴才进风。比喻消息和谣言的传播不是完全没有原因的。也比喻流言乘机会传开来'},
|
||
'风调雨顺': {'pinyin': 'fēng tiáo yǔ shùn', 'meaning': '调:调和;顺:和协。风雨及时适宜。形容风雨适合农时'},
|
||
'顺手牵羊': {'pinyin': 'shùn shǒu qiān yáng', 'meaning': '顺手把人家的羊牵走。比喻趁势将敌手捉住或乘机利用别人。现比喻乘机拿走别人的东西'},
|
||
'羊肠小道': {'pinyin': 'yáng cháng xiǎo dào', 'meaning': '曲折而极窄的路(多指山路)'},
|
||
'道貌岸然': {'pinyin': 'dào mào àn rán', 'meaning': '道貌:正经严肃的容貌;岸然:高傲的样子。指神态严肃,一本正经的样子'},
|
||
'然糠照薪': {'pinyin': 'rán kāng zhào xīn', 'meaning': '烧糠照明。比喻勤奋学习'},
|
||
'薪火相传': {'pinyin': 'xīn huǒ xiāng chuán', 'meaning': '古时候比喻形骸有尽而精神不灭;后人用来比喻学问和技艺代代相传'},
|
||
'传宗接代': {'pinyin': 'chuán zōng jiē dài', 'meaning': '宗:宗教,家族。代:后代。传延宗教,接续后代。旧指生了独生子可以使家世一代一代传下去'},
|
||
'代人受过': {'pinyin': 'dài rén shòu guò', 'meaning': '受:承受,担待;过:过失,过错。替别人承担过错的责任'},
|
||
'过目不忘': {'pinyin': 'guò mù bù wàng', 'meaning': '看过就不忘记。形容记忆力非常强'},
|
||
'忘恩负义': {'pinyin': 'wàng ēn fù yì', 'meaning': '恩:恩惠;负:违背;义:情谊,恩谊。忘记别人对自己的好处,反而做出对不起别人的事'},
|
||
'义薄云天': {'pinyin': 'yì báo yún tiān', 'meaning': '正义之气直上高空。形容为正义而斗争的精神极其崇高'},
|
||
'天长地久': {'pinyin': 'tiān cháng dì jiǔ', 'meaning': '跟天和地存在的时间那样长。形容时间悠久。也形容永远不变(多指爱情)'}
|
||
}
|
||
|
||
# 游戏逻辑
|
||
|
||
def get_character_pinyin(char):
|
||
"""获取汉字的拼音"""
|
||
return CHINESE_PINYIN.get(char, char)
|
||
|
||
def is_homophone(char1, char2):
|
||
"""检测两个汉字是否同音"""
|
||
pinyin1 = get_character_pinyin(char1)
|
||
pinyin2 = get_character_pinyin(char2)
|
||
return pinyin1 == pinyin2
|
||
|
||
def get_next_idioms(last_char):
|
||
"""根据最后一个字获取可能的接龙成语(支持谐音)"""
|
||
result = []
|
||
for idiom in IDIOMS.keys():
|
||
first_char = idiom[0]
|
||
if idiom.startswith(last_char) or is_homophone(first_char, last_char):
|
||
result.append(idiom)
|
||
return result
|
||
|
||
def validate_idiom(idiom, last_char, history):
|
||
"""验证成语是否有效(支持谐音)"""
|
||
if idiom not in IDIOMS:
|
||
return False, "成语不存在"
|
||
if last_char:
|
||
first_char = idiom[0]
|
||
if not (idiom.startswith(last_char) or is_homophone(first_char, last_char)):
|
||
return False, f"成语必须以'{last_char}'或其谐音开头"
|
||
if idiom in history:
|
||
return False, "成语已经使用过"
|
||
return True, ""
|
||
|
||
def get_random_idiom():
|
||
"""获取随机成语"""
|
||
return random.choice(list(IDIOMS.keys()))
|
||
|
||
def get_deepseek_idiom(last_char, history):
|
||
"""使用DeepSeek API生成接龙成语(支持谐音)"""
|
||
if not DEEPSEEK_API_KEY or DEEPSEEK_API_KEY == "your_api_key_here":
|
||
# API密钥未配置,返回本地成语
|
||
idioms = get_next_idioms(last_char)
|
||
# 过滤掉已使用的成语
|
||
available_idioms = [idiom for idiom in idioms if idiom not in history]
|
||
return available_idioms[0] if available_idioms else None
|
||
|
||
# 构建API请求
|
||
headers = {
|
||
"Content-Type": "application/json",
|
||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}"
|
||
}
|
||
|
||
messages = [
|
||
{"role": "system", "content": SYSTEM_PROMPT},
|
||
{"role": "user", "content": f"请生成一个以'{last_char}'或其谐音开头的成语,不要使用以下成语:{', '.join(history)}。只需要返回成语本身,不需要任何解释。"}
|
||
]
|
||
|
||
data = {
|
||
"model": "deepseek-chat",
|
||
"messages": messages,
|
||
"max_tokens": 50,
|
||
"temperature": 0.7
|
||
}
|
||
|
||
try:
|
||
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=10)
|
||
response.raise_for_status()
|
||
result = response.json()
|
||
idiom = result['choices'][0]['message']['content'].strip()
|
||
|
||
# 验证成语是否有效
|
||
if idiom and validate_idiom(idiom, last_char, history)[0]:
|
||
# 如果是新成语,添加到成语库
|
||
if idiom not in IDIOMS:
|
||
# 这里可以添加成语的拼音和解释,暂时使用占位符
|
||
IDIOMS[idiom] = {'pinyin': '', 'meaning': ''}
|
||
return idiom
|
||
else:
|
||
# API返回的成语无效,使用本地成语
|
||
idioms = get_next_idioms(last_char)
|
||
available_idioms = [idiom for idiom in idioms if idiom not in history]
|
||
return available_idioms[0] if available_idioms else None
|
||
except Exception as e:
|
||
print(f"DeepSeek API调用失败: {e}")
|
||
# API调用失败,使用本地成语
|
||
idioms = get_next_idioms(last_char)
|
||
available_idioms = [idiom for idiom in idioms if idiom not in history]
|
||
return available_idioms[0] if available_idioms else None
|
||
|
||
# Streamlit应用
|
||
|
||
st.set_page_config(page_title="成语接龙", page_icon="🎯", layout="wide")
|
||
|
||
# 自定义CSS
|
||
st.markdown("""
|
||
<style>
|
||
/* 基础样式 */
|
||
.stApp {
|
||
background-color: #f5f0e6;
|
||
background-image: url('data:image/svg+xml,%3Csvg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z" fill="%23c8a97e" fill-opacity="0.15" fill-rule="evenodd"/%3E%3C/svg%3E');
|
||
}
|
||
|
||
/* 标题样式 */
|
||
h1 {
|
||
color: #7a1717 !important;
|
||
font-family: 'SimSun', serif !important;
|
||
text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
|
||
animation: fadeIn 1s ease;
|
||
}
|
||
|
||
h3, h4 {
|
||
color: #5d2b00 !important;
|
||
font-family: 'SimSun', serif !important;
|
||
animation: fadeIn 0.8s ease;
|
||
}
|
||
|
||
/* 卡片样式 */
|
||
.idiom-card {
|
||
background: linear-gradient(135deg, #fffaf0 0%, #f9f2e8 100%);
|
||
border-radius: 18px;
|
||
padding: 30px;
|
||
box-shadow: 0 6px 20px rgba(0,0,0,0.12);
|
||
margin: 20px 0;
|
||
border: 1px solid #e6ccb2;
|
||
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.idiom-card::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 4px;
|
||
background: linear-gradient(90deg, #8a1a1a, #d4a76a, #8a1a1a);
|
||
}
|
||
|
||
.idiom-card:hover {
|
||
box-shadow: 0 12px 30px rgba(0,0,0,0.2);
|
||
transform: translateY(-4px) scale(1.02);
|
||
}
|
||
|
||
/* 中国风边框 */
|
||
.chinese-border {
|
||
position: relative;
|
||
border: 2px solid #d4a76a;
|
||
box-shadow: 0 4px 15px rgba(138, 26, 26, 0.15);
|
||
background-color: #fffaf0;
|
||
}
|
||
|
||
.chinese-border::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: -12px;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
width: 90px;
|
||
height: 24px;
|
||
background: linear-gradient(135deg, #fffaf0 0%, #f9f2e8 100%);
|
||
border: 2px solid #d4a76a;
|
||
border-bottom: none;
|
||
border-radius: 10px 10px 0 0;
|
||
box-shadow: 0 -2px 8px rgba(0,0,0,0.1);
|
||
}
|
||
|
||
/* 动画效果 */
|
||
@keyframes fadeIn {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(10px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
/* 成语样式 */
|
||
.current-idiom {
|
||
font-size: 32px;
|
||
font-weight: bold;
|
||
color: #8a1a1a;
|
||
font-family: 'SimSun', serif;
|
||
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.idiom-pinyin {
|
||
color: #a67c52;
|
||
font-style: italic;
|
||
font-size: 16px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.idiom-meaning {
|
||
color: #6b4423;
|
||
margin-top: 10px;
|
||
font-size: 15px;
|
||
line-height: 1.4;
|
||
}
|
||
|
||
/* 历史记录样式 */
|
||
.history-item {
|
||
padding: 12px 16px;
|
||
border-bottom: 1px solid #e6ccb2;
|
||
color: #5d2b00;
|
||
transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||
border-radius: 8px;
|
||
margin: 4px 0;
|
||
background-color: rgba(255, 250, 240, 0.5);
|
||
}
|
||
|
||
.history-item:hover {
|
||
color: #8a1a1a;
|
||
padding-left: 20px;
|
||
background-color: rgba(255, 250, 240, 0.8);
|
||
box-shadow: 0 2px 8px rgba(138, 26, 26, 0.1);
|
||
transform: translateX(5px);
|
||
}
|
||
|
||
/* 提示信息样式 */
|
||
.tooltip {
|
||
position: relative;
|
||
display: inline-block;
|
||
cursor: help;
|
||
}
|
||
|
||
.tooltip::after {
|
||
content: attr(data-tooltip);
|
||
position: absolute;
|
||
bottom: 125%;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
background-color: #5d2b00;
|
||
color: white;
|
||
padding: 8px 12px;
|
||
border-radius: 6px;
|
||
font-size: 14px;
|
||
white-space: nowrap;
|
||
opacity: 0;
|
||
visibility: hidden;
|
||
transition: all 0.3s ease;
|
||
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
|
||
z-index: 1000;
|
||
}
|
||
|
||
.tooltip:hover::after {
|
||
opacity: 1;
|
||
visibility: visible;
|
||
bottom: 135%;
|
||
}
|
||
|
||
/* 成功和错误信息样式 */
|
||
.success-message {
|
||
background-color: rgba(107, 142, 35, 0.1);
|
||
border-left: 4px solid #6b8e23;
|
||
padding: 12px 16px;
|
||
border-radius: 0 8px 8px 0;
|
||
margin: 10px 0;
|
||
animation: slideIn 0.5s ease;
|
||
}
|
||
|
||
.error-message {
|
||
background-color: rgba(138, 26, 26, 0.1);
|
||
border-left: 4px solid #8a1a1a;
|
||
padding: 12px 16px;
|
||
border-radius: 0 8px 8px 0;
|
||
margin: 10px 0;
|
||
animation: slideIn 0.5s ease;
|
||
}
|
||
|
||
/* 加载动画 */
|
||
@keyframes spin {
|
||
from { transform: rotate(0deg); }
|
||
to { transform: rotate(360deg); }
|
||
}
|
||
|
||
.loading {
|
||
display: inline-block;
|
||
width: 20px;
|
||
height: 20px;
|
||
border: 3px solid rgba(138, 26, 26, 0.1);
|
||
border-radius: 50%;
|
||
border-top-color: #8a1a1a;
|
||
animation: spin 1s ease-in-out infinite;
|
||
}
|
||
|
||
/* 游戏信息样式 */
|
||
.score-display {
|
||
font-size: 24px;
|
||
font-weight: bold;
|
||
color: #6b8e23;
|
||
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
||
}
|
||
|
||
.timer {
|
||
font-size: 28px;
|
||
font-weight: bold;
|
||
color: #8a1a1a;
|
||
text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
|
||
animation: pulse 1s infinite;
|
||
}
|
||
|
||
@keyframes pulse {
|
||
0% { transform: scale(1); }
|
||
50% { transform: scale(1.05); }
|
||
100% { transform: scale(1); }
|
||
}
|
||
|
||
/* 消息样式 */
|
||
.success-message {
|
||
color: #6b8e23;
|
||
font-weight: bold;
|
||
font-size: 16px;
|
||
animation: fadeIn 0.5s ease;
|
||
}
|
||
|
||
.error-message {
|
||
color: #8a1a1a;
|
||
font-weight: bold;
|
||
font-size: 16px;
|
||
animation: fadeIn 0.5s ease;
|
||
}
|
||
|
||
@keyframes fadeIn {
|
||
from { opacity: 0; transform: translateY(-10px); }
|
||
to { opacity: 1; transform: translateY(0); }
|
||
}
|
||
|
||
@keyframes pulse {
|
||
0% { transform: scale(1); }
|
||
50% { transform: scale(1.05); }
|
||
100% { transform: scale(1); }
|
||
}
|
||
|
||
@keyframes slideIn {
|
||
from { opacity: 0; transform: translateX(-20px); }
|
||
to { opacity: 1; transform: translateX(0); }
|
||
}
|
||
|
||
@keyframes bounceIn {
|
||
from { opacity: 0; transform: scale(0.8); }
|
||
50% { opacity: 1; transform: scale(1.05); }
|
||
to { opacity: 1; transform: scale(1); }
|
||
}
|
||
|
||
/* 按钮样式 */
|
||
.stButton > button {
|
||
background: linear-gradient(135deg, #8a1a1a, #7a1717);
|
||
color: black;
|
||
border-radius: 12px;
|
||
padding: 12px 24px;
|
||
font-size: 16px;
|
||
font-weight: bold;
|
||
border: none;
|
||
box-shadow: 0 4px 12px rgba(138,26,26,0.3);
|
||
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.stButton > button::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: -100%;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
|
||
transition: left 0.6s;
|
||
}
|
||
|
||
.stButton > button:hover {
|
||
background: linear-gradient(135deg, #7a1717, #6b1414);
|
||
box-shadow: 0 8px 20px rgba(138,26,26,0.45);
|
||
transform: translateY(-4px) scale(1.03);
|
||
}
|
||
|
||
.stButton > button:hover::before {
|
||
left: 100%;
|
||
}
|
||
|
||
.stButton > button:active {
|
||
transform: translateY(0) scale(0.98);
|
||
box-shadow: 0 2px 8px rgba(138,26,26,0.3);
|
||
animation: pulse 0.3s ease;
|
||
}
|
||
|
||
.stButton > button:focus {
|
||
outline: none;
|
||
box-shadow: 0 0 0 3px rgba(138,26,26,0.3);
|
||
}
|
||
|
||
/* 输入框样式 */
|
||
.stTextInput > div > input {
|
||
border-radius: 12px;
|
||
border: 2px solid #e6ccb2;
|
||
padding: 12px 18px;
|
||
font-size: 16px;
|
||
transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||
background-color: #fffaf0;
|
||
box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);
|
||
}
|
||
|
||
.stTextInput > div > input:focus {
|
||
border-color: #8a1a1a;
|
||
box-shadow: 0 0 0 3px rgba(138,26,26,0.1), inset 0 2px 4px rgba(0,0,0,0.05);
|
||
outline: none;
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
/* 展开框样式 */
|
||
.stExpander {
|
||
border-radius: 15px;
|
||
overflow: hidden;
|
||
margin: 15px 0;
|
||
}
|
||
|
||
.stExpander > div {
|
||
background: linear-gradient(135deg, #fffaf0 0%, #f9f2e8 100%);
|
||
border: 1px solid #e6ccb2;
|
||
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
|
||
}
|
||
|
||
.stExpander .st-expander-header {
|
||
background-color: #f9f2e8;
|
||
border-bottom: 1px solid #e6ccb2;
|
||
padding: 12px 16px;
|
||
font-weight: bold;
|
||
color: #8a1a1a;
|
||
transition: all 0.3s ease;
|
||
}
|
||
|
||
.stExpander .st-expander-header:hover {
|
||
background-color: #f5e8d8;
|
||
}
|
||
|
||
/* 分割线样式 */
|
||
.divider {
|
||
height: 3px;
|
||
background: linear-gradient(90deg, transparent, #d4a76a, transparent);
|
||
margin: 25px 0;
|
||
border-radius: 2px;
|
||
}
|
||
|
||
/* 游戏信息样式 */
|
||
.game-info {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
gap: 15px;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.info-item {
|
||
background-color: #fffaf0;
|
||
padding: 12px 20px;
|
||
border-radius: 10px;
|
||
border: 1px solid #e6ccb2;
|
||
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
||
transition: all 0.3s ease;
|
||
}
|
||
|
||
.info-item:hover {
|
||
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
/* 响应式调整 */
|
||
@media (max-width: 768px) {
|
||
.current-idiom {
|
||
font-size: 24px;
|
||
}
|
||
|
||
.idiom-card {
|
||
padding: 20px;
|
||
margin: 10px 0;
|
||
}
|
||
|
||
.stButton > button {
|
||
padding: 10px 20px;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.stTextInput > div > input {
|
||
padding: 10px 15px;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.game-info {
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
}
|
||
|
||
.info-item {
|
||
text-align: center;
|
||
}
|
||
}
|
||
|
||
/* 装饰元素 */
|
||
.chinese-border {
|
||
position: relative;
|
||
}
|
||
|
||
.chinese-border::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: -5px;
|
||
left: -5px;
|
||
right: -5px;
|
||
bottom: -5px;
|
||
border: 2px solid #e6ccb2;
|
||
border-radius: 15px;
|
||
z-index: -1;
|
||
}
|
||
</style>
|
||
""", unsafe_allow_html=True)
|
||
|
||
# 初始化游戏状态
|
||
if 'game_state' not in st.session_state:
|
||
st.session_state.game_state = {
|
||
'current_idiom': None,
|
||
'score': 0,
|
||
'time_limit': 30, # 30秒时间限制
|
||
'difficulty': 'normal', # 难度:easy, normal, hard
|
||
'game_mode': 'classic', # 游戏模式:classic, time_attack
|
||
'score_multiplier': 1.5, # 分数倍数
|
||
'start_time': None,
|
||
'history': [],
|
||
'game_over': False
|
||
}
|
||
|
||
# 游戏标题
|
||
st.markdown('<div style="text-align: center; margin-bottom: 30px;">', unsafe_allow_html=True)
|
||
st.markdown('<h1 style="display: inline-block; position: relative; padding: 0 20px;">', unsafe_allow_html=True)
|
||
st.markdown('🎯 成语接龙游戏', unsafe_allow_html=True)
|
||
st.markdown('<div style="position: absolute; bottom: -10px; left: 0; width: 100%; height: 3px; background: linear-gradient(90deg, transparent, #8a1a1a, transparent);"></div>', unsafe_allow_html=True)
|
||
st.markdown('</h1>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
# 游戏区域
|
||
col1, col2 = st.columns([2, 1])
|
||
|
||
with col1:
|
||
# 游戏状态显示
|
||
if st.session_state.game_state['current_idiom']:
|
||
st.markdown('<div class="idiom-card chinese-border">', unsafe_allow_html=True)
|
||
st.markdown(f'<div class="current-idiom" style="animation: fadeIn 0.8s ease;">当前成语: {st.session_state.game_state["current_idiom"]}</div>', unsafe_allow_html=True)
|
||
st.markdown(f'<div class="idiom-pinyin">{IDIOMS[st.session_state.game_state["current_idiom"]]["pinyin"]}</div>', unsafe_allow_html=True)
|
||
st.markdown(f'<div class="idiom-meaning">{IDIOMS[st.session_state.game_state["current_idiom"]]["meaning"]}</div>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
else:
|
||
st.markdown('<div class="idiom-card chinese-border">', unsafe_allow_html=True)
|
||
st.markdown('<h3 style="animation: fadeIn 1s ease;">欢迎来到成语接龙游戏!</h3>', unsafe_allow_html=True)
|
||
st.markdown('<p style="animation: fadeIn 1s ease 0.2s; animation-fill-mode: both;">点击下方按钮开始游戏</p>', unsafe_allow_html=True)
|
||
st.markdown('<p style="animation: fadeIn 1s ease 0.4s; animation-fill-mode: both; color: #8a1a1a; font-style: italic;">支持谐音接龙,同音不同字也可以哦!</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
# 开始游戏按钮
|
||
if not st.session_state.game_state['current_idiom']:
|
||
# 难度选择
|
||
difficulty = st.selectbox(
|
||
"选择难度",
|
||
options=["简单", "普通", "困难"],
|
||
index=1,
|
||
key="difficulty",
|
||
help="选择游戏难度,影响时间限制"
|
||
)
|
||
|
||
# 游戏模式选择
|
||
game_mode = st.selectbox(
|
||
"选择游戏模式",
|
||
options=["经典模式", "限时挑战"],
|
||
index=0,
|
||
key="game_mode",
|
||
help="选择游戏模式"
|
||
)
|
||
|
||
# 难度和时间限制映射
|
||
difficulty_map = {
|
||
"简单": {"time_limit": 45, "score_multiplier": 1},
|
||
"普通": {"time_limit": 30, "score_multiplier": 1.5},
|
||
"困难": {"time_limit": 20, "score_multiplier": 2}
|
||
}
|
||
|
||
game_mode_map = {
|
||
"经典模式": "classic",
|
||
"限时挑战": "time_attack"
|
||
}
|
||
|
||
if st.button("开始游戏", key="start_game", help="开始新游戏"):
|
||
first_idiom = get_random_idiom()
|
||
selected_difficulty = difficulty_map[difficulty]
|
||
st.session_state.game_state = {
|
||
'current_idiom': first_idiom,
|
||
'score': 0,
|
||
'time_limit': selected_difficulty["time_limit"],
|
||
'difficulty': difficulty,
|
||
'game_mode': game_mode_map[game_mode],
|
||
'score_multiplier': selected_difficulty["score_multiplier"],
|
||
'start_time': time.time(),
|
||
'history': [first_idiom],
|
||
'game_over': False
|
||
}
|
||
st.rerun()
|
||
|
||
# 游戏进行中
|
||
if st.session_state.game_state['current_idiom'] and not st.session_state.game_state['game_over']:
|
||
# 计算剩余时间
|
||
elapsed_time = time.time() - st.session_state.game_state['start_time']
|
||
remaining_time = max(0, st.session_state.game_state['time_limit'] - elapsed_time)
|
||
|
||
if remaining_time <= 0:
|
||
st.session_state.game_state['game_over'] = True
|
||
st.rerun()
|
||
|
||
# 输入框
|
||
user_input = st.text_input(
|
||
f"请输入以 '{st.session_state.game_state['current_idiom'][-1]}' 开头的成语",
|
||
key="user_idiom",
|
||
placeholder="输入成语..."
|
||
)
|
||
|
||
# 提交按钮
|
||
if st.button("提交", key="submit_idiom"):
|
||
if user_input:
|
||
valid, message = validate_idiom(
|
||
user_input,
|
||
st.session_state.game_state['current_idiom'][-1],
|
||
st.session_state.game_state['history']
|
||
)
|
||
|
||
if valid:
|
||
# 验证成功
|
||
st.session_state.game_state['current_idiom'] = user_input
|
||
score_gained = int(10 * st.session_state.game_state['score_multiplier'])
|
||
st.session_state.game_state['score'] += score_gained
|
||
st.session_state.game_state['history'].append(user_input)
|
||
st.session_state.game_state['start_time'] = time.time() # 重置计时器
|
||
st.markdown('<div style="animation: fadeIn 0.5s ease; background-color: rgba(107,142,35,0.1); border-left: 4px solid #6b8e23; padding: 10px; border-radius: 0 8px 8px 0; margin: 10px 0;">', unsafe_allow_html=True)
|
||
st.markdown('<p class="success-message">🎉 接龙成功!</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
# 计算机接龙(使用DeepSeek API)
|
||
with st.spinner('计算机正在思考...'):
|
||
time.sleep(1) # 模拟思考时间
|
||
last_char = user_input[-1]
|
||
computer_idiom = get_deepseek_idiom(last_char, st.session_state.game_state['history'])
|
||
|
||
if computer_idiom:
|
||
st.session_state.game_state['current_idiom'] = computer_idiom
|
||
st.session_state.game_state['history'].append(computer_idiom)
|
||
st.session_state.game_state['start_time'] = time.time() # 重置计时器
|
||
st.markdown('<div style="animation: fadeIn 0.5s ease; background-color: rgba(30,144,255,0.1); border-left: 4px solid #1e90ff; padding: 10px; border-radius: 0 8px 8px 0; margin: 10px 0;">', unsafe_allow_html=True)
|
||
st.markdown(f'<p class="computer-message">💻 计算机接龙:{computer_idiom}</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
else:
|
||
# 计算机无法接龙,游戏结束
|
||
st.session_state.game_state['game_over'] = True
|
||
st.markdown('<div style="animation: fadeIn 0.5s ease; background-color: rgba(138,26,26,0.1); border-left: 4px solid #8a1a1a; padding: 10px; border-radius: 0 8px 8px 0; margin: 10px 0;">', unsafe_allow_html=True)
|
||
st.markdown('<p class="error-message">🎉 恭喜!计算机无法接龙,你赢了!</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
st.rerun()
|
||
else:
|
||
# 验证失败
|
||
st.markdown('<div style="animation: fadeIn 0.5s ease; background-color: rgba(138,26,26,0.1); border-left: 4px solid #8a1a1a; padding: 10px; border-radius: 0 8px 8px 0; margin: 10px 0;">', unsafe_allow_html=True)
|
||
st.markdown(f'<p class="error-message">{message}</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
# 游戏结束
|
||
if st.session_state.game_state['game_over']:
|
||
st.markdown('<div class="idiom-card chinese-border" style="animation: fadeIn 1s ease;">', unsafe_allow_html=True)
|
||
st.markdown('<h3>游戏结束!</h3>', unsafe_allow_html=True)
|
||
st.markdown(f'<p style="font-size: 18px; font-weight: bold; color: #8a1a1a;">最终得分: {st.session_state.game_state["score"]}</p>', unsafe_allow_html=True)
|
||
st.markdown(f'<p>接龙次数: {len(st.session_state.game_state["history"])-1}</p>', unsafe_allow_html=True)
|
||
st.markdown('<div style="margin-top: 20px;">', unsafe_allow_html=True)
|
||
if st.button("重新开始", key="restart_game"):
|
||
st.session_state.game_state = {
|
||
'current_idiom': None,
|
||
'score': 0,
|
||
'time_limit': 30,
|
||
'difficulty': 'normal',
|
||
'game_mode': 'classic',
|
||
'score_multiplier': 1.5,
|
||
'start_time': None,
|
||
'history': [],
|
||
'game_over': False
|
||
}
|
||
st.rerun()
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
with col2:
|
||
# 游戏信息
|
||
st.markdown('<div class="idiom-card chinese-border">', unsafe_allow_html=True)
|
||
st.markdown('<h4>游戏信息</h4>', unsafe_allow_html=True)
|
||
|
||
# 计时器
|
||
if st.session_state.game_state['start_time'] and not st.session_state.game_state['game_over']:
|
||
elapsed_time = time.time() - st.session_state.game_state['start_time']
|
||
remaining_time = max(0, st.session_state.game_state['time_limit'] - elapsed_time)
|
||
progress = remaining_time / st.session_state.game_state['time_limit']
|
||
color = '#6b8e23' if progress > 0.5 else '#ff9800' if progress > 0.2 else '#f44336'
|
||
st.markdown(f'<div style="margin: 10px 0;">', unsafe_allow_html=True)
|
||
st.markdown(f'<p class="timer">剩余时间: {int(remaining_time)}s</p>', unsafe_allow_html=True)
|
||
st.markdown(f'<div style="width: 100%; height: 8px; background-color: #e6ccb2; border-radius: 4px; overflow: hidden;">', unsafe_allow_html=True)
|
||
st.markdown(f'<div style="width: {progress*100}%; height: 100%; background-color: {color}; transition: width 0.5s ease;"></div>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
# 得分
|
||
st.markdown(f'<p class="score-display">得分: {st.session_state.game_state["score"]}</p>', unsafe_allow_html=True)
|
||
|
||
# 历史记录
|
||
st.markdown('<h4>接龙历史</h4>', unsafe_allow_html=True)
|
||
if st.session_state.game_state['history']:
|
||
for i, idiom in enumerate(st.session_state.game_state['history']):
|
||
st.markdown(f'<div class="history-item" style="animation: fadeIn 0.3s ease {i*0.1}s; animation-fill-mode: both;">', unsafe_allow_html=True)
|
||
st.markdown(f'{i+1}. {idiom}', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
else:
|
||
st.markdown('<p>暂无历史记录</p>', unsafe_allow_html=True)
|
||
|
||
# 提示功能
|
||
if st.session_state.game_state['current_idiom'] and not st.session_state.game_state['game_over']:
|
||
if st.button("获取提示", key="get_hint"):
|
||
last_char = st.session_state.game_state['current_idiom'][-1]
|
||
hints = get_next_idioms(last_char)
|
||
if hints:
|
||
hint = random.choice(hints[:3]) # 随机选择前3个中的一个
|
||
st.markdown('<div style="animation: fadeIn 0.5s ease; background-color: rgba(138,26,26,0.05); border: 1px solid #e6ccb2; padding: 10px; border-radius: 8px; margin-top: 10px;">', unsafe_allow_html=True)
|
||
st.markdown(f'<p style="color: #5d2b00;">提示: 以"{last_char}"开头的成语有很多,比如"<strong>{hint}</strong>"</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
else:
|
||
st.markdown('<div style="animation: fadeIn 0.5s ease; background-color: rgba(138,26,26,0.05); border: 1px solid #e6ccb2; padding: 10px; border-radius: 8px; margin-top: 10px;">', unsafe_allow_html=True)
|
||
st.markdown('<p style="color: #5d2b00;">没有找到合适的成语</p>', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
st.markdown('</div>', unsafe_allow_html=True)
|
||
|
||
# 游戏规则
|
||
with st.expander("游戏规则", expanded=False):
|
||
st.markdown("""
|
||
<div style="animation: fadeIn 0.5s ease;">
|
||
1. 游戏开始时,系统会随机生成一个成语作为起始点
|
||
2. 玩家需要输入一个以上一个成语最后一个字开头的新成语
|
||
3. **支持谐音接龙**:同音不同字也可以算对
|
||
4. 每个成语有30秒的思考时间
|
||
5. 每成功接龙一次,得10分
|
||
6. 不能重复使用已经说过的成语
|
||
7. 时间耗尽游戏结束
|
||
</div>
|
||
""", unsafe_allow_html=True)
|
||
|
||
# 成语库信息
|
||
with st.expander("成语库信息", expanded=False):
|
||
st.markdown(f"<div style='animation: fadeIn 0.5s ease;'>当前成语库包含 <strong>{len(IDIOMS)}</strong> 个成语</div>", unsafe_allow_html=True)
|
||
st.markdown("<div style='animation: fadeIn 0.5s ease 0.2s; animation-fill-mode: both;'>成语库持续更新中...</div>", unsafe_allow_html=True)
|
||
|
||
# 页脚信息
|
||
st.markdown('<div style="margin-top: 30px; padding-top: 20px; border-top: 1px solid #e6ccb2; text-align: center; color: #999; font-size: 14px;">', unsafe_allow_html=True)
|
||
st.markdown('成语接龙游戏 - 传承中华文化', unsafe_allow_html=True)
|
||
st.markdown('</div>', unsafe_allow_html=True) |