学富五车的你,敢来迎战Python开发的成语接龙游戏吗?

还在怕成语接龙你玩不过别人嘛!今天教大家用Python做一个成语接龙的小游戏!!! 相关文件 关注小编,私信小编领取源码哟!!当然别忘了一键三连哟!! 开发工具 Python版本:3.6.4 相关模块: pyqt5模块; 以及一些python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可。 原理介绍 大家应该都了解成语接龙这个小游戏的游戏规则吧(不了解的建议面壁思过几天图片): 首先,我去网上找了下别人整理好的现成的成语数据: 大概有两万多条,看起来足够我们玩的了。现在,我们需要做的就是写一个函数来读取这个文本文件里的成语数据了,这个很简单: ' 阅读详情

成语接龙

今天难得下班早,不用做公司的末班车,和同事乘公交回家。中途上来几个学生,相互在玩着成语接龙游戏。说是成语,但词汇却真是不堪入耳。
6月高考的前一天,我发布的一篇文章,决战高考,帮你秒变成语之王。

当时只是把网站的成语爬下来保存到数据库中,文末提到有机会了抽时间拿这些数据搞点事情,那么今天就来搞事情吧。用3W+的成语数据库,开发一款成语接龙的小游戏。

接龙规则

成语接龙是中华民族传统的文字游戏。它不仅有着悠久的历史和广泛的社会基础,同时还是体现我国文字、文化、文明的一个缩影,是老少皆宜的民间文化娱乐活动。
成语接龙规则多样,大家一般熟知的是采用成语字头与字尾相连不断延伸的方法进行接龙;用四个字成语的最后一个字与下一句成语的第一个相同的字【音同就可以】,首尾相接不断延伸,形成长龙。

游戏演示

说了这么多,让我们来先睹为快,让我来挑战一局接龙比赛吧:

游戏展示

既然是游戏,就得来个排名才有意思啊!之前测试了几轮数据,这次我们使用一个Neo的新用户来进行游戏,随便接龙了几次,然后我编了一个 “蝉鸣鸟叫”的成语结束这次演示,不然像我这种学富五车的有为青年,好好答不来个几十轮的哪里能结束啊,哈哈…可以看到游戏结束后退回到首页,并进行了挑战排序。还好没几个号,不然排不到前五都看不到效果了…

数据库信息

先来看看我们的数据库信息:



数据库表idiom分为id,name,speak,meaning,example,hot 几个字段,hot是当时搜索的网站热词排行,跟咱们没有太大关系…主要是name和speak字段。

登陆排行

为了能增强可玩性,我们在每次开场前,允许用户随机输入一个名字。在挑战过程中,针对用户坚持的接龙次数进行排名。


创建用户排名表:
1CREATE TABLE rank (
2    name  VARCHAR (50) NOT NULL,
3    round_num INT      NOT NULL
4);

这里为什么不设置主键呢?主要是排名取前5,用户使用一个名字多次参战,如果犀利的话包揽前5看这也很帅气啊,清一色的都是我,想想都觉得自我满足感爆棚。

游戏界面

首先映入眼帘的是ROUND 1的接龙次数显示,有没有儿时拳皇对打的感觉…
为了帮助大家在玩游戏的同时能学习成语知识,也避免有些生僻字不认识,所以在界面中显示了成语、注音、解释和示例,当然示例不是每个成语都有,网站有啥我就展示啥呗…


成语判断

首先必须是四字的成语,用户输入非四字的成语会弹出警示栏,其次用户填写完成语后,会将成语在数据库中进行检索,如果是成语则进行接龙后返回电脑的匹配结果,进行第二轮的基隆,如果数据库中无此成语会弹出游戏结束的提示“挑战结束:用户输入的成语是自己编的吧!”,返回登陆页,并将用户的挑战结果入库rank表进行排行。
这里需要注意,成语接龙的收尾字可以不一样但音必须相同,包括声调哦!

拼音识别

数据库中的成语我们存在拼音了,但用户输入的是汉字,我们如何进行拼音转化呢?这里需要使用到python的一个模块pypinyin。针对这个模块的使用,之前写过一篇文章Python为文档批量注音(生僻字歌词为例),喜欢的朋友可以去看看。用法很简单,但我们需要做到和数据库中相对应才行。

1from pypinyin import pinyin
2pinyin('唇枪舌剑')
3# output:
4[['chún'], ['qiāng'], ['shé'], ['jiàn']]
5# 此处为一个嵌套列表,我们需要转化为数据库中的格式
6'  '.join(map(lambda x: x[0], pinyin('唇枪舌剑')))
7# output:
8'chún  qiāng  shé  jiàn'

Jinjia2模板

大家看到不管是用户登录还是游戏界面,外框内容基本一致,基于这种场景使用Jinjia2的模板继承是个很不错的选择:
layout.html主要负责整体框架及相关css和js的引入工作,使用Bootstrap+Jquery分分钟搞定。

 1<!DOCTYPE html>
 2<html lang="en">
 3<head>
 4    <meta charset="UTF-8">
 5    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6    <meta name="viewport" content="width=device-width, initial-scale=1 ,user-scalable=no">
 7    <title>清风python</title>
 8    <link rel="icon" href="{{ url_for('static',filename='favicon.ico') }}">
 9    <link rel="stylesheet" href="{{ url_for('static',filename='css/bootstrap.min.css') }}">
10    <link rel="stylesheet" href="{{ url_for('static',filename='css/main.css') }}">
11    <script src="{{ url_for('static',filename='js/jquery.min.js') }}"></script>
12</head>
13<body>
14
15<div class="container container-small">
16    <div class="content">
17        <div class="header">
18            成语接龙
19        </div>
20        <div class="block-info">
21            {% block contents %}
22            {% endblock %}
23        </div>
24    </div>
25    <div class="footer">
26        ©2019-欢迎关注我的公众号:<a href="https://www.jianshu.com/u/d23fd5012bed">清风Python</a>
27    </div>
28</div>
29
30</body>
31</html>

login.html涉及到挑战者排行和用户名提交与页面跳转
game.html主要负责成语接龙游戏的监控与AJAX数据的后台刷新。
由于篇幅有限就不再这里赘述了,代码文末会给出。

Flask装饰器

首先,我们的游戏涉及到SQLite数据库的交互,所以在每次请求前,需要建立数据库,请求结束后需要释放连接。此时我们需要使用到两个装饰器,@app.before_request和@app.teardown_request,before_request见名知意就是在请求访问前调动该装饰器,那么为什么不用对应的@app.after_request呢?因为即便用户代码在执行过程中,出现任何错误,也可以通过@app.teardown_request装饰器最终释放数据库连接,但@app.after_request可不行…
Flask整体代码如下:

 1import sqlite3
 2from flask import Flask, render_template, request, g, session, redirect, url_for, jsonify
 3import random
 4from pypinyin import pinyin
 5
 6app = Flask(__name__)
 7DATABASE = 'static/db/database.db'
 8app.secret_key = 'Breeze Python'
 9
10
11def connect_db():
12    return sqlite3.connect(DATABASE)
13
14
15@app.before_request
16def before_request():
17    g.db = connect_db()
18
19
20@app.teardown_request
21def teardown_request(exception):
22    if hasattr(g, 'db'):
23        g.db.close()
24
25
26def query_db(query, args=(), one=True):
27    cur = g.db.execute(query, args)
28    rv = [dict((cur.description[idx][0], value)
29               for idx, value in enumerate(row)) for row in cur.fetchall()]
30    if not query.startswith('select'):
31        g.db.commit()
32    return (rv[0] if rv else None) if one else rv
33
34
35@app.route('/', methods=['GET', 'POST'])
36def index():
37    if request.method == 'POST':
38        user = request.form.get('name')
39        session['user'] = user
40        session['round'] = 1
41        return redirect(url_for('game'))
42    rank_list = query_db('select * from rank order by round_num desc limit 5',one=False)
43    print(rank_list)
44    return render_template('login.html', rank_list=rank_list)
45
46
47@app.route('/game')
48def game():
49    if not session.get('user'):
50        return redirect(url_for('index'))
51    id = random.randint(1, 30000)
52    idiom = query_db('select * from idiom where id = ?',
53                     [id])
54    return render_template('game.html', user=session.get('user'), idiom=idiom)
55
56
57@app.route('/more/<user_idiom>')
58def more(user_idiom):
59    speak_list = pinyin(user_idiom)
60    print(speak_list[0][-1])
61    idiom_speak = '  '.join(map(lambda x: x[0], speak_list))
62    if query_db('select * from idiom where speak = ?',
63                [idiom_speak]):
64        new_idiom = query_db("select * from idiom where speak like ('%s%%')" % speak_list[-1][0])
65        session['round'] = session.get('round') + 1
66        print({'code': 200, 'round': session.get('round'), 'info': new_idiom})
67        return jsonify({'code': 200, 'round': session.get('round') + 1, 'info': new_idiom})
68    else:
69        query_db('replace into rank (name,round_num) values (?,?)',
70                 [session.get('user'), session.get('round')])
71        return jsonify({'code': 404, 'error': "挑战结束:用户输入的成语是自己编的吧!", 'url': request.host_url})
手机搭建项目

搭建好的游戏网站,我们可以在局域网内共享, 但日常想进行练手,如果能使用手机运行我们的网站岂不是更爽?
之前写过一篇将安卓手机打造成你的python全栈开发利器,通过这种方式我们就能把python程序在手机端完美运行了,来试试看吧!

代码我已经上传到了我的git仓库,手机登陆Termux直接clone下载即可:
git clone https://github.com/BreezePython/IdiomsGame.git

进入clone好的代码路径,之后输入pipenv install创建虚拟环境并下载依赖的模块
键入pipenv shell 进入虚拟环境
通过flask run运行我们的Flask app程序…


公众号回复成语接龙,即可获取完整代码。

—— 推 荐 阅 读 ——

我用Python找到了隔壁蹭网妹子的QQ号

王一博、肖战  谁的颜值更高,Python告诉你

就这么简单!20行Python代码爬取腾讯视频

觉得不错就点一下“在看”吧 

用python实现词语接龙游戏 用python实现词语接龙游戏 最近,3岁多的女儿很喜欢玩词语接龙。想一想,这个游戏可以通过刚学的python在电脑上实现。 首先是要整理词语库,最好不要太生僻的词语,要够多,才能经得起比赛。经过上网一番查找,选择了了语料库在线http://corpus.zhonghuayuwen.org下的现代汉语语料库词频表。进行简单的整理,去掉了单字,形成了cword.txt文件,共约1万多个词语,对付小朋... 阅读详情

相关推荐

用python实现词语接龙游戏的代码及词库文件

用python实现词语接龙游戏的代码及词库文件,python环境下解压执行即可。

通过游戏编程学Python(番外篇)— 乱序成语、猜单词

通过游戏编程学Python 通过游戏编程学Python(5)— 猜成语(下) 通过游戏编程学Python(4)— 猜成语(上) 通过游戏编程学Python(3)— 赌大小 文章目录通过游戏编程学Python前言一、知识点二、猜成语小游戏的扩展1. 玩法简介2. 游戏流程3. 程序代码3. 代码简析三、知识点1. Python自带的IDLE2. txt文本文件的读取readlines()方法with open() as ...3. r字符串与f字符串r字符串f字符串4. 列表生成式字符串的strip()方法

问哥还能打 1644

PYTHON成语接龙代码

PYTHON成语接龙代码/只要你装了PYTHON就可以运行。本质是从文本导入数据,然后利用循环遍历来完成成语接龙/注释很详细,适合新手学习使用

用Python 做成语接龙,超简单,有语音,过年和孩子玩

用Python 做成语接龙,超简单,有语音,过年和孩子玩

hq606的博客 1835

pygame做的诗词填空游戏(python2和python3都支持)

诗词填空的python源程序,用pygame开发,有100以上关卡,第一关比较简单,要填的词比较少,后面的关卡难度比较高,要填的词比较多。

python DEA: 基于非径向距离NDDF的Malmquist-Luenberger 指数及其分解

点赞发Nature 关注中Science Malmquist-Lenberger指数(ML指数)是距离函数与DEA计算中常用的指数,ML指数可以进一步分解为技术进步technological progress和效率改善effeciency change. 技术进步常被当做增长模型中的全要素生产率,用到许多计量经济研究中,探讨影响技术进步的环境变量。这里我分享一个考虑非期望产出下的NDDF方法计算ML指数。 该ML指数为global ML(区别于sequential ML) import numpy as

Cmmmmm丶的博客 5297

python成语接龙小游戏,成语大全版,无限流接龙成语

python成语接龙小游戏,成语大全版,无限流接龙成语

HQC66666的博客 1741

解放双手!利用海康VM全局脚本+通讯管理打造自动化视觉控制系统

本文深入探讨了如何利用海康VisionMaster(VM)的全局脚本和通讯管理功能,打造高效自动化视觉控制系统。通过全局变量实现数据共享与动态调整,结合多协议通讯管理,提升系统响应速度与智能化水平,适用于工业4.0环境下的复杂视觉检测与决策场景。

weixin_28720573的博客 424

【python】Python成语接龙游戏[1-3难度均有](源码+数据)【独一无二】

👉博__主👈:米码收割机👉技__能👈:C++/Python语言👉公众号👈:测试开发自动化【获取源码+商业合作】👉荣__誉👈:阿里云博客专家博主、51CTO技术博主👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。

测试开发自动化 1728

R语言实战:GEO单细胞数据下载与自动化整理全流程(附代码)

本文详细介绍了使用R语言从GEO数据库下载scRNA-seq数据并实现自动化整理的完整流程。通过GEOquery和Seurat等工具包,读者可以高效获取单细胞RNA测序数据,完成从原始数据下载到预处理的全过程,最终生成可直接用于分析的Seurat对象。文章包含完整代码示例,特别适合生物信息学研究者处理单细胞数据。

weixin_29061821的博客 427

RexUniNLU零样本通用自然语言理解:nlp_deberta_rex-uninlu_chinese-base模型实战解析

本文深入解析了RexUniNLU零样本通用自然语言理解模型(nlp_deberta_rex-uninlu_chinese-base)的实战应用。通过详细的环境配置、模型加载及实战案例,展示了该模型在零样本场景下的强大能力,如实体识别和复杂关系抽取,显著提升NLP任务效率。

weixin_29088655的博客 251

Python自制成语接龙小游戏

作者:小小明 Python自制成语接龙小游戏 在 https://github.com/pwxcoo/chinese-xinhua 项目中可以下载到中华成语的语料库,该项目收录包括 14032 条歇后语,16142 个汉字,264434 个词语,31648 个成语。 结构如下: chinese-xinhua/ | +- data/ <-- 数据文件夹 | | | +- idiom.json <-- 成语 | | | +- word.json <-- 汉字 | | | +- .

小小明-代码实体的专栏 3万+

PD3.0详解 第六章 协议层—数据消息之—VDM

PD3.0的VDM 很多对PD3.0协议了解不是很深入的同学可能对VDM有一些陌生,因为这个VDM是较为次要,只不过相对沟通电源的协议来讲VDM是次要,但从PD3.0协议的角度来说,这个也是非常重要的,是必须要非常明白的了解这个东西,所以今天大师匈就分享一下这部分的重要知识点。 VDM (vendor define message) VDM是什么意思呢,就是原厂定义的消息,比如PD快充芯片的原厂定义的一些自己独立的message。但是呢这部分也有规定的一些标准的字段。 另外我们要很清楚PD协议的数据分为几类

大师匈的博客 1万+

学富五车的你,敢迎战Python开发的成语接龙游戏吗?

成语接龙 今天难得下班早,不用做公司的末班车,和同事乘公交回家。中途上来几个学生,相互在玩着成语接龙游戏。说是成语,但词汇却真是不堪入耳。 6月高考的前一天,我发布的一篇文章,决战高考,帮你秒变成语之王,当时只是吧网站的成语爬下来保存到数据库中,文末提到有机会了抽时间拿这些数据搞点事情,那么今天就来搞事情吧。用3W+的成语数据库,开发一款成语接龙的小游戏。 接龙规则 ...

清风Python 790

RK3568平台开发系列讲解(项目篇)手写数字识别

📢 本篇章带大家基于飞桨(PaddlePaddle),完成一个简单的手写数字识别任务。

内核笔记 1182

用 CL_ABAP_ZIP 在 ABAP 里打包任意文件:从前端多选到 ZIP 交付的一条龙实践

本文介绍了在SAP ABAP中实现文件打包交付的完整解决方案。文章首先区分了ZIP和GZIP的不同用途:ZIP用于多文件归档,GZIP用于单数据流压缩。核心流程包括四个步骤:文件选择、二进制上传、内存打包和ZIP输出,并提供了关键对象与函数的速查表。针对实际项目中常见的乱码、大文件处理等问题给出了解决方案,最后展示了一个完整的可运行示例代码,涵盖了从文件选择到下载的全流程实现。该方案适用于财务、质量、运维等多种业务场景,能够有效解决多文件交付的最后一公里问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

python安装方法_Python如何批量更新已安装的库,为你介绍六种方法!

众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade xxx 命令,或者简写成pip install -U xxx 。如果有多个库,可以依次写在 xxx 后面,以空格间隔。那么,如何简单优雅地批量更新系统中全部已安装的库呢?接下来我们直奔主题,带大家学习几种方法/骚操作吧!方法一:pip list 结合 Linux 命令pip list 命令可以查询已...

weixin_39661129的博客 859

HBase骚操作之数据加载方式BulkLoad

本文研究了一种HBase BulkLoad的入库方式,该方式利用HBase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。该方式配合MapReduce完成,高效便捷,而且不占用Region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对Hbase节点的写入压力。HBase BulkLoad对于异构数据源的合并及大量数据一次性导入具有重要指导意义,相比HBase Put操作在性能上具有较高的优势

石榴姐yyds 7789

python多进程_代码详解Python多线程、多进程、协程

一、前言很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬取速度。本文就通过代码讲解如何使用多进程、多线程、协程来提升爬取速度。注意:我们不深入介绍理论和原理,一切都在代码中。二、同步首先我们写一个简化的爬虫,对各个功能细分,有意识进行函数式编程。下面代码的目的是访问300次百度页面并返回状态码,其中parse_1函数可以设定循环次数,每次循环将当前...

weixin_39605326的博客 183

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

c++输出小数点后几位_python格式化输出:%s和format()用法比较

1、python格式化输出历史起源python2.5之前,我们使用的是老式格式化输出:%s。从python3.0开始起(python2.6同期发布),同时支持两个版本的格式化,多出来的一个新版本就是利用format()函数,进行格式化输出。2、为什么要学习python3支持的新式格式化输出呢?虽然老式的语法,兼容性很好,但是它的功能很少,很难完成复杂的任务,而format()函数进行格式...

weixin_39862847的博客 542

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

python中成语接龙游戏_Python实现成语接龙

这是一篇用Python实现成语接龙小游戏的具体开发教程。Python实现这个功能非常容易,以下分为两个版本,一个是简易版,能够实现基本的功能。还有一个是拓展版,是在简易版上进行拓展,功能更为复杂且完善。这个可以应用在很多方面,比如说聊天机器人,而且还可以结合itchat这个Python的微信接口玩出花样等等。下面放实例:开发环境:WindowsPython版本:3.x外置模块准备:无文件准备:成语...

weixin_39629947的博客 3803

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

我用Python写了一个成语接龙的游戏,并把它部署到了手机上

我用Python写了一个成语接龙的游戏,并把它部署到了手机上 成语大全数据 6月高考的前一天,我发布的一篇文章,决战高考,帮你秒变成语之王,当时只是把 http://chengyu.haoshiwen.org/ 网站的3W+条成语爬下来保存到数据库中。 成语数据库 文末提到有机会抽时间拿这些数据搞点事情,但这事儿一直就这么放着了。 image.png 今天我们就来用3W+的...

清风Python 1598

Python基础,猜成语小游戏

猜成语 闲的无事,无聊的写bug,突然觉得可以随便写个猜成语小游戏,正好可以解闷 Python随机库,random random是Python的随机库,有这样几个简单的用法 在使用random前要用import关键字导入 import random print(random.random()) print(random.randint(1,100)) print(random.choice([1,...

realmels的博客 3612

python成语接龙代码_python——成语接龙小游戏

小试牛刀的简易成语接龙。思路——1、网上下载成语字典的txt版本2、通过python进行处理得到格式化的成语,并整理成字典(python字典查找速度快)3、python程序,查找 用户输入的最后一个字和字典里首字一致的,放入列表,并通过random进行随机选择,然后输出字典整理部分:转换成字典file = open(r'D:\Desktop\zidian.txt').readlines()f= o...

weixin_39978276的博客 996

python编写成语接龙

接收从键盘输入成语,并连接成长龙;检查成语收尾字 tmp="" i=1 while True: idiom = input("请输入第" + str(i) + "个成语:") if idiom == "": print("Game Over!") print(tmp) break else: if tmp == "": tmp=idiom i+=1 elif

xiaohu123_的博客 1782
上一篇: Python 工匠:让函数返回结果的技巧
下一篇: 精选编程书,等你来拿!
菜鸟学Python
博客等级 码龄9年 8063粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值