基于Python编写简易的成语接龙游戏
作者:嗨!栗子同学 发布时间:2022-08-26 02:15:05
前言
"胸藏文墨怀如谷,腹有诗书气自华"。 ——《和董传留别》
成语接龙是中华民族传统的文字游戏。
它历史悠久,是传统文字、文化、文明的一个缩影,也是老少皆宜的民间文化娱乐活动。
成语接龙:"龙腾虎跃,该你了!" 什么?你立刻接上了「跃马弯弓」?
确认过眼神,是高手没错了。 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效果
来源:https://blog.csdn.net/xy258009/article/details/122981264


猜你喜欢
- 移动互联网被称为“第五次科技革命”,而随着iPhone和Android等智能手机的日渐流行和iPad等平板电脑的出现,移动互联网的潜力和趋势
- 之前用来整理图片的小程序,拿来备忘,算是使用Python复制文件的一个例子。# -*- coding: utf-8 -*-#程序用来拷贝文件
- 我就废话不多说了,大家还是直接看代码吧~one = tf.ones_like(label)zero = tf.zeros_like(labe
- 在学习与运用ASP中,response对象涉及到的方面也比较多,想全部都掌握也并非一两天的事,我也是最近才发现response对象中居然有这
- 尽管Python事实上并不是一门纯函数式编程语言,但它本身是一门多范型语言,并给了你足够的自由利用函数式编程的便利。函数式风格有着各种理论与
- 一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。 一个context是一系列变量和它们值的集合。conte
- 之前项目有一个需求,业务人员使用中文编写一些自定义公式,然后需要我们后台执行将结果返回到界面上,于是就基于有限状态机写了这个词法分析器,比较
- 安装过程(rhel5.8+mysql5.5)安装过程中不断报错,参考了众多网上资料,一上午时间才搞定1,
- nonzero函数返回非零元素的目录。返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值。 import
- 乱码原因:源码文件的编码格式为utf-8,但是window的本地默认编码是gbk,所以在控制台直接打印utf-8的字符串当然是乱码了!解决方
- 0. 前言周日在爬一个国外网站的时候,发现用协程并发请求,并且请求次数太快的时候,会出现对方把我的服务器IP封掉的情况。于是网上找了一下开源
- 节日用心准备的礼物,使用python画玫瑰和爱心,供大家参考,具体内容如下#!/usr/bin/env python#coding=utf-
- 我想大家都有一些开了80端口的肉 * ,如果是国内的出于安全就不要往下看了,如果不不妨往下看一下,小弟献丑了,以求抛砖引玉。在肉鸡上放网站最麻
- 一·json数据格式1.什么是jsonJSON是一种轻量级的数据交互格式。可以按照.JSON指定的格式去组织和封装数据
- 1. 视图分离与嵌套在 learnlaravel 文件夹下运行命令:php artisan generate:view admin._lay
- 本文实例为大家分享了python如何实现视频转代码视频的具体代码,供大家参考,具体内容如下# -*- coding:utf-8 -*-#co
- python实现二级登陆菜单的代码如下所示:""" 1. * 菜单 注册 登陆 注销 2.进入每一个一级菜单,都
- Cookie 对象是一种以文件(Cookie文件)的形式保存在客户端硬盘的Cookies文件夹中的数据信息(Cookie数据)。Cookie
- 以下是通过Excel 的VBA连接Oracle并操作Oracle相关数据的示例Excel 通过VBA连接数据库需要安装相应的Oracle客户
- 本文实例讲述了MSSql简单查询出数据表中所有重复数据的方法。分享给大家供大家参考,具体如下:这里直接给出下面的例子:SELECT * FR