开发者

基于Python编写简易的成语接龙游戏

开发者 https://www.devze.com 2022-12-12 10:37 出处:网络 作者: 嗨!栗子同学
目录前言1.游戏规则2.正式敲代码2.1模块导入2.2读取txt数据2.3界面设置2.4电脑接龙2.5重新开始新游戏2.6成语是否合法2.7读取成语的数据2.8附完整的项目源码3.效果展示前言
目录
  • 前言
  • 1.游戏规则
  • 2.正式敲代码
    • 2.1模块导入
    • 2.2读取txt数据
    • 2.3界面设置
    • 2.4电脑接龙
    • 2.5重新开始新游戏
    • 2.6成语是否合法
    • 2.7读取成语的数据
    • 2.8附完整的项目源码
  • 3.效果展示

    前言

    "胸藏文墨怀如谷,腹有诗书气自华"。      ——《和董传留别》

    成语接龙是中华民族传统的文字游戏。

    它历史悠久,是传统文字、文化、文明的一个缩影,也是老少皆宜的民间文化娱乐活动。

    成语接龙:"龙腾虎跃,该你了!"                        什么?你立刻接上了「跃马弯弓」?

    确认过眼神,是高手没错了。    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('我方:')
      iQzdmSkN      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_eiQzdmSkNdit.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 imphttp://www.cppcns.comort *
    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(s编程客栈elf, 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效果

    基于Python编写简易的成语接龙游戏

    ​3.2 成语:山清水秀 Part 2效果​

    基于Python编写简易的成语接龙游戏

    到此这篇关于基于python编写简易的成语接龙游戏的文章就介绍到这了,更多相关Python成语接龙游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号