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

目录
  • 前言
  • 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('我方:')
        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成语接龙游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Pygame实战之欢乐打地鼠游戏

    目录 导语 ​​​一.准备中 二.环境安装 ​三.开始敲代码 1)导入模块 2)不同的图片设置 3)界面头标.标题等. 4)音乐设置 5)右侧窗口控件不同的按钮设置 四.效果展示 导语 闲来无事: 铲屎官用废旧的纸箱,给猫主子做了一个打地鼠玩具,看,主子玩得不亦乐乎 打掉了——咦,怎么还有,怎么还有两个呢?是不是很心动呀?这可是和猫主子增进感情的好机会哦! ​ 哈哈哈!看完上面的简介知道我今天要做什么游戏了吧~嗯哼 对 今天来给大家写一款打地鼠小游戏,宅在家里的无聊的时候可以玩一玩啦!不过文末也

  • 13个有趣又好玩的Python游戏代码分享

    目录 1.吃金币 2.打乒乓 3.滑雪 4.并夕夕版飞机大战 5.打地鼠 6.小恐龙 7.消消乐 8.俄罗斯方块 9.贪吃蛇 10.24点小游戏 11.平衡木 12.外星人入侵 13.井字棋888 经常听到有朋友说,学习编程是一件非常枯燥无味的事情.其实,大家有没有认真想过,可能是我们的学习方法不对? 比方说,你有没有想过,可以通过打游戏来学编程? 今天我想跟大家分享几个Python小游戏,教你如何通过边打游戏边学编程! 1.吃金币 源码分享: import os import cfg impo

  • Python Pygame实战之打砖块小游戏

    目录 导语 一.准备中 1)游戏规则: 2)环境安装 二.开始敲代码 1)配置文件 2)定义一些类 3)定义开始.结束界面 4)定义游戏 5)主函数与运行界面 三.效果展示 导语 嘿!前不久刚刚给大家过一款反弹球的小游戏嘛! 不知道大家还记得不?不记得可以看下往期的内容呢,在上一期的基础上升级了这款打砖块的小游戏,界面的话也挺简单的,经典配色原汁原味哈哈哈. 大家好,我是木木子,一个上的编程下的厅堂的女码农!今天带大家编写一款经典的打砖块儿小游戏! 小科普: 打砖块最早是由雅达利公司开发的一款独

  • Python实现炸金花游戏的示例代码

    今天的第二个作品,哈哈哈哈,搞起来感觉还挺有意思的,不过代码里纸牌J,Q,K,A几个数字被我替换成了11,12,13,14......主要是没有想到简单的办法让其比较,索性都用数字了,我太菜了,希望有大佬指点一下. 代码如下: import random   #导入随机数函数 def puke():     """     生成一副52张的扑克牌(除去大小王)     :return:     """     list1 = ['黑桃', '红桃

  • Python+Pygame制作简易版2048小游戏

    目录 导语 正文 主要代码 效果图 导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本的! 呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧! 正文 为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波! 然后.........完全停不下来!23333~ 玩法: 用手指或键盘上下左右滑动,将

  • Python Pygame实战之水果忍者游戏的实现

    目录 一.准备中 1.0游戏规则 1.1游戏图片素材(可修改) 1.2游戏字体素材(可修改) 二.环境安装 三.开始敲代码 3.0设置界面玩家生命值等 3.1导入模块 3.2界面背景.字体设置 3.3游戏窗口设置 3.4随机生成水果的位置与数据存放 3.5用一个字典来存放水果的数据 3.6在屏幕中绘制字体 3.7绘制玩家的生命 3.8游戏开始与结束画面 3.9游戏主循环 四.游戏展示效果 导语 Hey!下午好,我是木木子,关注我,一起玩游戏吧~ ​ ​微信小游戏很久之前刮起了一股切水果热潮,还记

  • Python爬取成语接龙类网站

    介绍 本文将展示如何利用Python爬虫来实现诗歌接龙. 该项目的思路如下: 利用爬虫爬取诗歌,制作诗歌语料库: 将诗歌分句,形成字典:键(key)为该句首字的拼音,值(value)为该拼音对应的诗句,并将字典保存为pickle文件: 读取pickle文件,编写程序,以exe文件形式运行该程序. 该项目实现的诗歌接龙,规则为下一句的首字与上一句的尾字的拼音(包括声调)一致.下面将分步讲述该项目的实现过程. 诗歌语料库 首先,我们利用Python爬虫来爬取诗歌,制作语料库.爬取的网址为:https

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

    目录 前言 1.游戏规则 2.正式敲代码 2.1模块导入 2.2读取txt数据 2.3界面设置 2.4电脑接龙 2.5重新开始新游戏 2.6成语是否合法 2.7读取成语的数据 2.8附完整的项目源码 3.效果展示 前言 "胸藏文墨怀如谷,腹有诗书气自华".      ——<和董传留别> 成语接龙是中华民族传统的文字游戏. 它历史悠久,是传统文字.文化.文明的一个缩影,也是老少皆宜的民间文化娱乐活动. 成语接龙:"龙腾虎跃,该你了!"          

  • 基于Python编写简易版的天天跑酷游戏的示例代码

    写出来的效果图就是这样了: 下面就更新一下全部的代码吧 还是老样子先定义 import pygame,sys import random 写一下游戏配置 width = 1200            #窗口宽度 height = 508            #窗口高度 size = width, height    score=None              #分数 myFont=myFont1=None     #字体 surObject=None          #障碍物图片   

  • 基于Python编写简易文字语音转换器

    话不多说上代码!源代码 from tkinter import * import pyttsx3 class Application(Frame): def __init__(self,master=None): super().__init__(master) self.master = master self.pack() self.creatWidget() # BING INPUT def creatWidget(self): self.w1 = Text(self, width=80,

  • 基于Python实现西西成语接龙小助手

    目录 介绍 爬虫模块 前缀树搜索提示 成语接龙 介绍 代码地址:https://github.com/taishan1994/chinese_chengyujielong 读完该文,你可以收获: python爬虫的简单使用. 构建前缀树以进行搜索提示. 构建一个简单的成语接龙小程序. 爬虫模块 首先展示下我们最终获得的成语的数据: ,成语,拼音,成语解释,典故出处,近义词,反义词,常用程度,感情色彩,语法用法,成语结构,产生年代,英文翻译,成语谜面 0,阿匼取容,ē ǎn qǔ róng,阿匼:

  • 利用Python编写简易版德州扑克小游戏

    目录 德州扑克简要介绍 什么是德州扑克 游戏规则简要介绍 德州扑克游戏的python实现过程 游戏初始化 评选赢家 游戏主题函数 游戏体验与展示 模块不足与后续改进 德州扑克简要介绍 什么是德州扑克 德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫做Texas Hold’em Poker.玩法上又分为常规桌(Cash, 现金局),单桌赛(SNG)和多桌锦标赛(MTT).虽然扑克种类繁多,但基本的扑克规则通常保持一致.它是一种考验心态与谋略的游戏. 游戏规则简要

  • 基于Python编写一个中秋节嫦娥投食小游戏

    目录 游戏设计 1.游戏背景 2.功能设计 效果展示 代码素材 代码 素材 山河远阔,烟火人间,又一年,千里婵娟~ 今天给大家带来的是给玉兔投喂月饼的小游戏.八月十五中秋夜晚,让我们对着月亮许愿:希望我们在意和在意我们的人,诸邪避退.百事无忌.平安喜乐.万事胜意.提前祝大家中秋节快乐. 中秋节的起源 中秋节起源于上古时代,普及于汉代,定型于唐朝初年,盛行于宋朝以后.中秋节是秋季时令习俗的综合,其所包含的节俗因素,大都有古老的渊源.中秋节以月之圆兆人之团圆,为寄托思念故乡,思念亲人之情,祈盼丰收.

  • 基于Python实现简易的植物识别小系统

    导语 "  花草树木 皆有呈名 热爱自然,从认识自然开始 " 现在的植物爱好者,遇到不认得的植物.怎么办呢? 前几天去逛商场,一进商城一一一一门口的花店吸引了我的注意:摆放在店门口的各色鲜花植物花卉真的特别好看! 忍不住进门逛了一圈,发现我真的不认识,种类太多,对花卉的品种了解颇少. 回来之后找到了2款简单好用的植物识别APP一一一伴侣跟形色蛮好用的! 闲着也是闲着:默默用Python编写了一款简单的植物识别系统给大家正好la~ 正文 1)环境安装 本文用到的环境:Python3.7 

  • 基于python编写的微博应用

    本文实例讲述了基于python编写的微博应用,分享给大家供大家参考.具体如下: 在编写自己的微博应用之前,先要到weibo开放平台申请应用的公钥和私钥. 下载python版的SDK,打开example目录,仿照oauthSetTokenUpdate.py进行编码, 复制代码 代码如下: # -*- coding: utf-8 -*- from weibopy.auth import OAuthHandler from weibopy.api import API consumer_key= '应

  • 基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算

    方法一: 结合lambda表达式.函数调用运算符.标准库函数对象.C++11标准新增的标准库function类型,编写一个简单的计算器,可实现简单的加.减.乘.除.取余二元运算.代码如下: #include "pch.h" #include <iostream> #include <functional> #include <map> #include <string> using namespace std; int add(int i

  • 基于python制作简易版学生信息管理系统

    一.前言 本篇博客对于文件操作.字典.列表.匿名函数以及sort()等内置函数进行了系统的整理操作,以设计一个学生信息管理系统的形式展示,具体概念方法等会在代码后进行分析讲述,请读者仔细分析每一处解析,对于基础巩固将会有很大的帮助,其中还有每一块代码的设计思路图,逻辑分析会有一定的提升. 二.需求分析 本程序需要用到os模板首先导入,并命名要存储信息的文件 import os File_Object_Name = 'Student_Inforation.txt' 三.主函数 def Main()

随机推荐