基于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效果

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

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

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

来源:https://blog.csdn.net/xy258009/article/details/122981264

标签:Python,成语接龙,游戏
0
投稿

猜你喜欢

  • asp如何防止计数器刷新计数?

    2009-11-22 19:19:00
  • Golang库插件注册加载机制的问题

    2023-06-24 04:25:59
  • python不同版本的_new_不同点总结

    2023-09-21 15:36:45
  • SQL中DATEADD和DATEDIFF的用法示例介绍

    2024-01-27 16:57:58
  • 使用实例管理器轻松管理多个MySQL实例

    2009-03-25 17:07:00
  • Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)

    2023-04-27 13:37:46
  • Python实现向QQ群成员自动发邮件的方法

    2021-08-16 13:41:33
  • Python实现高效求解素数代码实例

    2023-04-29 16:06:32
  • JavaScript版俄罗斯方块Easy Tetris实现原理

    2009-07-16 10:25:00
  • PHP适配器模式Adapter Pattern的使用介绍

    2023-06-10 12:28:21
  • MySQL 子查询和分组查询

    2024-01-18 22:05:36
  • 使用javascript控制cookie显示和隐藏背景图

    2024-04-23 09:33:26
  • python三引号如何输入

    2021-08-12 12:42:34
  • Python paramiko模块的使用示例

    2021-05-12 20:30:00
  • python多进程 主进程和子进程间共享和不共享全局变量实例

    2022-11-05 11:42:56
  • 浅谈Python的正则表达式

    2022-05-11 00:54:16
  • TypeScript入门-基本数据类型

    2024-06-07 15:56:50
  • python 下划线的多种应用场景总结

    2021-12-19 10:51:54
  • echarts实现晶体球面投影的实例教程

    2023-09-02 10:35:12
  • Golang两行代码实现发送钉钉机器人消息

    2024-04-26 17:30:39
  • asp之家 网络编程 m.aspxhome.com