我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于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成语接龙游戏内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Python编写简易的成语接龙游戏

本文小编为大家详细介绍“怎么用Python编写简易的成语接龙游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Python编写简易的成语接龙游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.游戏规则下
2023-06-29

基于C语言如何实现简易的扫雷游戏

这篇文章主要讲解了“基于C语言如何实现简易的扫雷游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于C语言如何实现简易的扫雷游戏”吧!扫雷即在一个棋盘中,随机放入一定数量的雷,玩家通过输入
2023-06-30

基于Python实现成语填空游戏的示例代码

成语填空想必大家都是十分熟悉的了,特别是有在上小学的家长肯定都有十分深刻的印象。当然了你也别小看了成语调控小游戏,有的时候知识储备不够,你还真的不一定猜得出来是什么。本文就来用Python编写一个简单的成语填空游戏,感兴趣的可以了解下
2023-02-17

基于C语言编写简易的英文统计和加密系统

这篇文章主要介绍如何基于C语言编写一个简易的英文统计和加密系统,实际上就是对字符数组的基本操作的各种使用,感兴趣的可以了解一下
2023-05-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录