基於Python編寫簡易的成語接龍遊戲

前言

"胸藏文墨懷如谷,腹有詩書氣自華"。      ——《和董傳留別》

成語接龍是中華民族傳統的文字遊戲。

它歷史悠久,是傳統文字、文化、文明的一個縮影,也是老少皆宜的民間文化娛樂活動。

成語接龍:"龍騰虎躍,該你瞭!"                        什麼?你立刻接上瞭「躍馬彎弓」?

確認過眼神,是高手沒錯瞭。    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 附完整的項目源碼

'''
小程序名:
成語接龍
'''
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效果​

到此這篇關於基於Python編寫簡易的成語接龍遊戲的文章就介紹到這瞭,更多相關Python成語接龍遊戲內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: