🎄導語
"胸藏文墨懷如谷,腹有詩書氣自華", ——《和董傳留別》
成語接龍是中華民族傳統的文字游戲,
它歷史悠久,是傳統文字、文化、文明的一個縮影,也是老少皆宜的民間文化娛樂活動,

成語接龍:"龍騰虎躍,該你了!" 什么?你立刻接上了「躍馬彎弓」?
確認過眼神,是高手沒錯了, Hi~我是木木子,又見面了哇! 今天我帶來了新技能解鎖,沒錯,就是:
「👏成語接龍👏」
🎡據說,跟我玩游戲的朋友偷偷作弊,拿了本《現代漢語詞典》要跟我大戰三百回合,
最后發現,我說的每個成語她都忍不住要去查一下啊哈哈哈!!!小編亂入:我的天吶,奇怪的知
識成倍增長了!
?
認慫? 我會認慫嘛?! 不存在的.
看我寫一款成語接龍小程式,分分鐘秒殺你~快來和我「成語接龍」吧~👑
🎋正文
在這款成語接龍小游戲中,你會學到一些「新成語」,能邊玩兒邊學成語,最重要的還是能接觸一款
編程,在玩兒中進步學習,成就感滿滿,又能學知識,你有閑暇時,跟隔壁老王可以一直玩一直玩哈
哈哈~
🎬1) 游戲規則
下面我簡單說說「成語接龍」游戲的基本規則,你很熟悉可以跳過這段,不熟悉就仔細看看:
①用四字成語的最后一個字起頭,接出下一句成語,由此不斷延伸;
②成語尾首相接的字,可以是同一個字,也可以是同音的字;
③一場游戲中,不應出現重復成語,
【舉例】
「海枯石爛」→「爛醉如泥」→「泥牛入海」
×不能接「海枯石爛」(出現重復)
√可以接「海納百川」
是不是超級簡單?考驗詞匯儲備量的時候到了~
🎬2) 正式敲代碼
2.1 模塊匯入🎃
import os
import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
2.2 讀取txt資料🎉
self.idiom_data, self.valid_idioms = self.readData('data/data.txt')
self.ai_answer = None
2.3 界面設定🎊
self.setWindowTitle('成語接龍小程式-就差你了!')
self.setWindowIcon(QIcon('data/02.png'))
self.setFixedSize(600, 200)
self.user_input_label = QLabel('我方:')
self.user_input_edit = QLineEdit()
self.user_input_button = QPushButton('確定')
self.ai_input_label = QLabel('電腦方:')
self.ai_input_edit = QLineEdit()
self.restart_button = QPushButton('重新開始')
self.user_explain_label = QLabel('我方成語釋義:')
self.user_explain_edit = QLineEdit()
self.ai_explain_label = QLabel('電腦方成語釋義:')
self.ai_explain_edit = QLineEdit()
# 布局
self.grid = QGridLayout()
self.grid.setSpacing(12)
self.grid.addWidget(self.user_input_label, 0, 0)
self.grid.addWidget(self.user_input_edit, 0, 1)
self.grid.addWidget(self.user_input_button, 0, 2)
self.grid.addWidget(self.user_explain_label, 1, 0)
self.grid.addWidget(self.user_explain_edit, 1, 1, 1, 2)
self.grid.addWidget(self.ai_input_label, 2, 0)
self.grid.addWidget(self.ai_input_edit, 2, 1)
self.grid.addWidget(self.restart_button, 2, 2)
self.grid.addWidget(self.ai_explain_label, 3, 0)
self.grid.addWidget(self.ai_explain_edit, 3, 1, 1, 2)
self.setLayout(self.grid)
# 按鍵系結
self.user_input_button.clicked.connect(self.airound)
self.restart_button.clicked.connect(self.restart)
2.4 電腦接龍🧨
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:
self.user_explain_edit.setText('讀音: %s; 含義: %s' % (self.valid_idioms[idiom][0], self.valid_idioms[idiom][1]))
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])
self.ai_explain_edit.setText('讀音: %s; 含義: %s' % (self.valid_idioms[answer[0]][0], self.valid_idioms[answer[0]][1]))
else:
QMessageBox.information(self, '你贏啦', '電腦都接不上你的成語, 你太厲害啦!', QMessageBox.Yes | QMessageBox.No)
2.5 重新開始新游戲🎉
def restart(self):
self.ai_answer = None
self.ai_input_edit.clear()
self.ai_explain_edit.clear()
self.user_input_edit.clear()
self.user_explain_edit.clear()
2.6 成語是否合法
def isvalid(self, idiom):
return (idiom in self.valid_idioms)
2.7 讀取成語的資料🎊
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[item[0]] = item[1:]
return idiom_data, valid_idioms
2.8 附完整的專案原始碼🎃
'''
小程式名:
成語接龍
原始碼基地:#806965976#
csdn賬號:顧木子吖
'''
import os
import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
'''成語接龍'''
class IdiomSolitaire(QWidget):
def __init__(self, parent=None, **kwargs):
super(IdiomSolitaire, self).__init__(parent)
# 讀取資料
self.idiom_data, self.valid_idioms = self.readData('data/data.txt')
self.ai_answer = None
# 定義界面
self.setWindowTitle('成語接龍小程式-就差你了!')
self.setWindowIcon(QIcon('data/02.png'))
self.setFixedSize(600, 200)
self.user_input_label = QLabel('我方:')
self.user_input_edit = QLineEdit()
self.user_input_button = QPushButton('確定')
self.ai_input_label = QLabel('電腦方:')
self.ai_input_edit = QLineEdit()
self.restart_button = QPushButton('重新開始')
self.user_explain_label = QLabel('我方成語釋義:')
self.user_explain_edit = QLineEdit()
self.ai_explain_label = QLabel('電腦方成語釋義:')
self.ai_explain_edit = QLineEdit()
# 布局
self.grid = QGridLayout()
self.grid.setSpacing(12)
self.grid.addWidget(self.user_input_label, 0, 0)
self.grid.addWidget(self.user_input_edit, 0, 1)
self.grid.addWidget(self.user_input_button, 0, 2)
self.grid.addWidget(self.user_explain_label, 1, 0)
self.grid.addWidget(self.user_explain_edit, 1, 1, 1, 2)
self.grid.addWidget(self.ai_input_label, 2, 0)
self.grid.addWidget(self.ai_input_edit, 2, 1)
self.grid.addWidget(self.restart_button, 2, 2)
self.grid.addWidget(self.ai_explain_label, 3, 0)
self.grid.addWidget(self.ai_explain_edit, 3, 1, 1, 2)
self.setLayout(self.grid)
# 按鍵系結
self.user_input_button.clicked.connect(self.airound)
self.restart_button.clicked.connect(self.restart)
'''電腦接龍'''
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:
self.user_explain_edit.setText('讀音: %s; 含義: %s' % (self.valid_idioms[idiom][0], self.valid_idioms[idiom][1]))
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])
self.ai_explain_edit.setText('讀音: %s; 含義: %s' % (self.valid_idioms[answer[0]][0], self.valid_idioms[answer[0]][1]))
else:
QMessageBox.information(self, '你贏啦', '電腦都接不上你的成語, 你太厲害啦!', QMessageBox.Yes | QMessageBox.No)
'''重新開始'''
def restart(self):
self.ai_answer = None
self.ai_input_edit.clear()
self.ai_explain_edit.clear()
self.user_input_edit.clear()
self.user_explain_edit.clear()
'''檢測成語是否合法'''
def isvalid(self, idiom):
return (idiom in self.valid_idioms)
'''讀取成語資料'''
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[item[0]] = item[1:]
return idiom_data, valid_idioms
'''run'''
if __name__ == '__main__':
app = QApplication(sys.argv)
client = IdiomSolitaire()
client.show()
sys.exit(app.exec_())
🎬3) 效果展示
3.1 成語:龍騰虎躍 Part 1效果🎏

?3.2 成語:山清水秀 Part 2效果🎏
?

?
?🎁總結
成語接龍小測驗💦💦:看看大家的成語量詞匯是不是夠多吖~哈哈哈 大家順著上一位的接下去,看能
接到幾樓呀?!💨文章匯總里面更多型別的游戲等你來學習哈~
?完整的免費原始碼領取處:
如需完整的專案原始碼+素材原始碼基地見:#私信小編06#或者點擊藍色文字添加即可獲取免費的福利!
你們的支持是我最大的動力!!記得三連哦~mua 歡迎大家閱讀往期的文章哦~
?新增解答方面——
如果在學習Python方面遇到問題、有時間會給大家解答滴啦!需要自行添加哈!
放WX號如下:apython68
🏆文章匯總——
Python—2021 |已有文章匯總 | 持續更新,直接看這篇就夠了~
?
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336328.html
標籤:其他
