用Python寫了個(gè)帶界面的“成語(yǔ)接龍”小軟件
大家好,歡迎來(lái)到 Crossin的編程教室 !
今天分享的這篇文章,將帶大家做個(gè)樸素簡(jiǎn)單的小玩意:成語(yǔ)接龍小軟件。
廢話不多說(shuō),讓我們愉快地開始吧~
環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。
pip install pyqt5原理簡(jiǎn)介
大家應(yīng)該都了解成語(yǔ)接龍這個(gè)小游戲的游戲規(guī)則吧:

首先,我去網(wǎng)上找了下別人整理好的現(xiàn)成的成語(yǔ)數(shù)據(jù):

大概有兩萬(wàn)多條,看起來(lái)足夠我們玩的了。現(xiàn)在,我們需要做的就是寫一個(gè)函數(shù)來(lái)讀取這個(gè)文本文件里的成語(yǔ)數(shù)據(jù)了,這個(gè)很簡(jiǎn)單:
'''讀取成語(yǔ)數(shù)據(jù)'''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: continueitem = line.split('\t')if len(item) != 3: continueif 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寫個(gè)簡(jiǎn)單的GUI界面,大概長(zhǎng)這個(gè)樣子:

我的想法大概是這樣子的:首先我方輸入一個(gè)成語(yǔ),然后點(diǎn)擊確定,從而告訴電腦方我們現(xiàn)在輸入的成語(yǔ)是什么,讓電腦方接龍;電腦經(jīng)過(guò)搜索得出回答;然后我方再根據(jù)電腦方的輸出進(jìn)行接龍,以此類推……
重新開始按鈕用來(lái)重置當(dāng)前的游戲狀態(tài)。(主要是在我方不知道該接什么詞的時(shí)候使用
)
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, '成語(yǔ)輸入錯(cuò)誤', '你輸入的成語(yǔ)不對(duì)哦, 不可以耍小聰明噠!', 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, '你贏啦', '電腦都接不上你的成語(yǔ), 你太厲害啦!', QMessageBox.Yes | QMessageBox.No)
這里需要注意的點(diǎn)有:
玩家接龍的成語(yǔ)必須真的是成語(yǔ),不然你隨便打幾個(gè)字,保證第一個(gè)字和電腦出的成語(yǔ)最后一個(gè)字對(duì)上就行的話,就失去了成語(yǔ)接龍的意義了;
保證玩家方接的成語(yǔ)第一個(gè)字能夠?qū)ι想娔X方出的成語(yǔ)的最后一個(gè)字;
寫代碼的時(shí)候要考慮到電腦方也是有可能輸?shù)摹?/p>
然后是重新開始部分:
'''重新開始'''def restart(self):self.ai_answer = Noneself.ai_input_edit.clear()self.user_input_edit.clear()
這部分很簡(jiǎn)單,就不展開說(shuō)了。現(xiàn)在,我們大致完成了我們的成語(yǔ)接龍小軟件:

最后,再來(lái)給它添加一點(diǎn)內(nèi)容?比如我們玩成語(yǔ)接龍的時(shí)候能不能順便學(xué)習(xí)一下成語(yǔ)本身的含義呢,就像這樣:

這部分的實(shí)現(xiàn)其實(shí)很簡(jiǎn)單,數(shù)據(jù)都是有的,讀取并顯示一下就可以。就不展開說(shuō)啦~
效果展示
在終端運(yùn)行如下命令即可:
python IdiomSolitaire.py效果如下:
留個(gè)"作業(yè)"?聰明的小伙伴們能不能在本文代碼的基礎(chǔ)上實(shí)現(xiàn)語(yǔ)音版的成語(yǔ)接龍小游戲呢?
獲取完整源代碼請(qǐng)公眾號(hào)內(nèi)回復(fù) 成語(yǔ)接龍
如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~
作者:白露未晞me
_往期文章推薦_
