用Python写了个带界面的“成语接龙”小软件
大家好,欢迎来到 Crossin的编程教室 !
今天分享的这篇文章,将带大家做个朴素简单的小玩意:成语接龙小软件。
废话不多说,让我们愉快地开始吧~
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
pip install pyqt5
原理简介
大家应该都了解成语接龙这个小游戏的游戏规则吧:
首先,我去网上找了下别人整理好的现成的成语数据:
大概有两万多条,看起来足够我们玩的了。现在,我们需要做的就是写一个函数来读取这个文本文件里的成语数据了,这个很简单:
'''读取成语数据'''
def readData(self, filepath):
fp = open(filepath, 'r', encoding='utf-8')
idiom_data = {}
valid_idioms = []
for line in fp.readlines():
line = line.strip()
if not line: continue
item = line.split('\t')
if len(item) != 3: continue
if item[0][0] not in idiom_data:
idiom_data[item[0][0]] = [item]
else:
idiom_data[item[0][0]].append(item)
valid_idioms.append(item[0])
return idiom_data, valid_idiom
接着,我们用PyQt5写个简单的GUI界面,大概长这个样子:
我的想法大概是这样子的:首先我方输入一个成语,然后点击确定,从而告诉电脑方我们现在输入的成语是什么,让电脑方接龙;电脑经过搜索得出回答;然后我方再根据电脑方的输出进行接龙,以此类推……
重新开始按钮用来重置当前的游戏状态。(主要是在我方不知道该接什么词的时候使用)
ok,确定了大概的思路之后,我们就可以开始愉快地coding啦~
首先是完成电脑接龙部分:
'''电脑接龙'''
def airound(self):
idiom = self.user_input_edit.text()
idiom = idiom.strip()
if (not self.isvalid(idiom)) or (self.ai_answer and idiom[0] != self.ai_answer[0][-1]):
QMessageBox.warning(self, '成语输入错误', '你输入的成语不对哦, 不可以耍小聪明哒!', QMessageBox.Yes | QMessageBox.No)
else:
if idiom[-1] in self.idiom_data:
answers = self.idiom_data[idiom[-1]]
answer = random.choice(answers)
self.ai_answer = answer.copy()
self.ai_input_edit.setText(self.ai_answer[0])
else:
QMessageBox.information(self, '你赢啦', '电脑都接不上你的成语, 你太厉害啦!', QMessageBox.Yes | QMessageBox.No)
这里需要注意的点有:
玩家接龙的成语必须真的是成语,不然你随便打几个字,保证第一个字和电脑出的成语最后一个字对上就行的话,就失去了成语接龙的意义了;
保证玩家方接的成语第一个字能够对上电脑方出的成语的最后一个字;
写代码的时候要考虑到电脑方也是有可能输的。
然后是重新开始部分:
'''重新开始'''
def restart(self):
self.ai_answer = None
self.ai_input_edit.clear()
self.user_input_edit.clear()
这部分很简单,就不展开说了。现在,我们大致完成了我们的成语接龙小软件:
最后,再来给它添加一点内容?比如我们玩成语接龙的时候能不能顺便学习一下成语本身的含义呢,就像这样:
这部分的实现其实很简单,数据都是有的,读取并显示一下就可以。就不展开说啦~
效果展示
在终端运行如下命令即可:
python IdiomSolitaire.py
效果如下:
留个"作业"?聪明的小伙伴们能不能在本文代码的基础上实现语音版的成语接龙小游戏呢?
获取完整源代码请公众号内回复 成语接龙
如果文章对你有帮助,欢迎转发/点赞/收藏~
作者:白露未晞me
_往期文章推荐_