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

15 个边玩游戏边学编程的网站 前言经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对?比方说,你有没有想过,可以通过打游戏来学编程?今天我想跟大家分享几个网站,教你如何通过边打游戏边学编程!1、Coding Games一边玩游戏,一边挑战编程难题。Coding games 支持包括 PHP、C、JavaScript 在内的 20 多种编程语言。用户界面功能强大,可以定制。例如,你可以选择你的代码编辑器的风格:Emacs、Vim、Classic。如果你想提升编程技能,玩 Coding . 阅读详情
5847426-dddee19f06c82e27.jpg
成语接龙

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

接龙规则

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

游戏演示

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

5847426-45e4a4f506eba211.gif
游戏展示

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

数据库信息

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


5847426-8ae36da7a14e190a.png
数据库信息

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

登陆排行

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


5847426-0515f61caa499460.png
挑战者记录

创建用户排名表:

CREATE TABLE rank (
    name  VARCHAR (50) NOT NULL,
    round_num INT      NOT NULL
);

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

游戏界面

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

5847426-b9feadc6fabe54ed.png
游戏界面

成语判断

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

拼音识别

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

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

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1 ,user-scalable=no">
    <title>清风python</title>
    <link rel="icon" href="{{ url_for('static',filename='favicon.ico') }}">
    <link rel="stylesheet" href="{{ url_for('static',filename='css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ url_for('static',filename='css/main.css') }}">
    <script src="{{ url_for('static',filename='js/jquery.min.js') }}"></script>
</head>
<body>

<div class="container container-small">
    <div class="content">
        <div class="header">
            成语接龙
        </div>
        <div class="block-info">
            {% block contents %}
            {% endblock %}
        </div>
    </div>
    <div class="footer">
        ©2019-欢迎关注我的公众号:<a href="https://www.jianshu.com/u/d23fd5012bed">清风Python</a>
    </div>
</div>

</body>
</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整体代码如下:

import sqlite3
from flask import Flask, render_template, request, g, session, redirect, url_for, jsonify
import random
from pypinyin import pinyin

app = Flask(__name__)
DATABASE = 'static/db/database.db'
app.secret_key = 'Breeze Python'


def connect_db():
    return sqlite3.connect(DATABASE)


@app.before_request
def before_request():
    g.db = connect_db()


@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        g.db.close()


def query_db(query, args=(), one=True):
    cur = g.db.execute(query, args)
    rv = [dict((cur.description[idx][0], value)
               for idx, value in enumerate(row)) for row in cur.fetchall()]
    if not query.startswith('select'):
        g.db.commit()
    return (rv[0] if rv else None) if one else rv


@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        user = request.form.get('name')
        session['user'] = user
        session['round'] = 1
        return redirect(url_for('game'))
    rank_list = query_db('select * from rank order by round_num desc limit 5',one=False)
    print(rank_list)
    return render_template('login.html', rank_list=rank_list)


@app.route('/game')
def game():
    if not session.get('user'):
        return redirect(url_for('index'))
    id = random.randint(1, 30000)
    idiom = query_db('select * from idiom where id = ?',
                     [id])
    return render_template('game.html', user=session.get('user'), idiom=idiom)


@app.route('/more/<user_idiom>')
def more(user_idiom):
    speak_list = pinyin(user_idiom)
    print(speak_list[0][-1])
    idiom_speak = '  '.join(map(lambda x: x[0], speak_list))
    if query_db('select * from idiom where speak = ?',
                [idiom_speak]):
        new_idiom = query_db("select * from idiom where speak like ('%s%%')" % speak_list[-1][0])
        session['round'] = session.get('round') + 1
        print({'code': 200, 'round': session.get('round'), 'info': new_idiom})
        return jsonify({'code': 200, 'round': session.get('round') + 1, 'info': new_idiom})
    else:
        query_db('replace into rank (name,round_num) values (?,?)',
                 [session.get('user'), session.get('round')])
        return jsonify({'code': 404, 'error': "挑战结束:用户输入的成语是自己编的吧!", 'url': request.host_url})
手机搭建项目

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

代码clone

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

pipenv导入

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

5847426-5b15c0657f2eff19.png
image.png

5847426-ae58a011f9a80cc2.png
image.png
5847426-7bb11241d6b9ca20.png
image.png
The End

今天的Flask项目开发成语接龙游戏的文章,公众号清风Python回复成语接龙,自动获取代码的百度网盘地址。如果你觉得不错,希望能动动手指转发给你身边的朋友们。

利用Pygame开发游戏学习Python(入门) 为什么学习python游戏开发?以游戏为突破口,学习python。 使用工具: 1、Anaconda:管理各种库,如果其中找不到再利用pip安装。自带的Jupyter Notebook更是数据分析,简单调试的不二首道。 2、pycharm:复杂项目、大型项目开发利器。 3、sublime:看别人源码时用,支持N多格式。 学习基础: 1、因为有一定的基础,所以简单... 阅读详情

相关推荐

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 320

边玩边学,30个Python小游戏(含源码)

大家好,我是小F~经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对?比方说,你有没有想过,可以通过打游戏来学编程?今天我想跟大家分享30个Python小游戏,教你如何通过边打游戏边学编程!相关文件及代码都已上传,公众号回复【游戏】即可获取。接下来就一起来看看吧~1、飞机大战 源码分享:importrandom importpygame fr...

法纳斯特 4万+

3D Slicer中Auto3DSeg和TotalSegmentator等自动分割插件总是安装失败,怎么办?教你两招

TotalSegmentator, MONAI auto3Dseg,这些工具因分割器官多,准确性高,备受关注。同时,这些自动分割工具被集成在了3D slicer平台,非常方便临床医生做手术规划。详细了解这些工具看之前的教程👇-------- 简单概述 --------其中,MONAIAuto3DSeg扩展附带数十种针对特定临床用例的预训练分割模型,这些模型旨在快速运行,几分钟内即可在任何普通计算机上运行,无需 GPU,甚至在笔记本电脑上。

zzjlhlcd的博客 1698

玩十个游戏学会python,老师评价这是编程天才,教学十年没遇到过

这个人从未学过编程,但由于热衷于游戏,于是在玩了十个小游戏后,就学会了python编程,他的老师说,也许是因为他在这方面太有天赋吧!首先这十个游戏是来自某份教程,而且是那种在这份教程中,没有冗长枯燥的理论,一切都是以趣味为前提,一切都用游戏带python学习者深入其中,换句话说,那么这到底是什么游戏呢?这份教程,每个知识点,都对应了一个游戏,总共十个,而只要学会这十个知识点,python基础就基本上学完了()。...

m0_59163425的博客 779

Springer期刊LaTeX模板中参考文献格式选择与编译错误的快速修复指南

本文针对Springer期刊LaTeX模板中参考文献编译后显示问号的常见问题,提供了快速修复指南。核心在于正确选择并配置与期刊匹配的参考文献格式文件(.bst),并执行标准的四步编译流程。文章详细解释了问题根源,并给出了从查找正确.bst文件到修改代码、执行编译的完整解决方案,帮助作者高效解决投稿中的技术障碍。

weixin_29266007的博客 402

EtherCAT主站SOEM -- 18 --Qt-Soem通过CSV模式(周期同步速度模式)控制一个电机转圈圈

以上就是 EtherCAT主站SOEM – 18 --Qt-Soem通过CSV模式(周期同步速度模式)控制一个电机转圈圈 的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 1212

一边玩游戏一边学Python编程,他的方法值得借鉴,附赠游戏和教程

喜欢玩游戏吗?愿意挑战自带BUG的游戏吗?愿意玩一个游戏学一个Python知识点吗?别急,方法就在下面。 它的名字叫《Python编程初学者指南》,每一个知识点都会有一个游戏,玩好一个游戏,也就学会了一个Python知识点,当然这是基础的Python知识点,非常适合想要学习Python基础的同学。(附赠内容在底部) 举一个栗子: 第二个知识点,类型、变量以及简单I/O,附带Useless Trivia程序最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以价位@76245951

每日分享程序员技巧 470

23、资产分散化与有效前沿:投资组合优化的核心策略

本文深入探讨了现代投资组合理论的核心概念,包括分散投资的重要性、均值-方差优化框架以及有效前沿的构建与应用。通过案例分析和数学模型,阐述了如何通过科学方法降低投资组合风险并实现最优风险收益权衡。文章还介绍了实际应用中的求解方法与决策流程,为投资者提供系统的投资组合优化指导。

cc789的博客 114

利用Python进行游戏脚本编程,不愧是最强的脚本语言!

使用脚本语言可以更加快速地开发游戏逻辑,而不必担心由于 C++ 程序员的粗心大意所造成的后果。使用已有的脚本语言可以节省开发新型自定义语言的时间和开销,并且这些语言通常要比自己创造的语言更加的强大。Python 对于游戏脚本语言来说是一种不错的选择,它很强大,容易嵌入使用,能够无缝地使用 C/C++ 进行扩展,包含很多脚本语言所具有的高级特性,并且它可以用来实现自...

Pythoncxy的博客 4987

SST专题(2-5)MMC-SST 输入级的环流抑制

本文研究了模块化多电平换流器(MMC)的数学模型及其环流抑制控制方法。首先建立了MMC等效电路模型,推导了桥臂电流方程和虚拟电动势表达式,提出通过控制桥臂电压修正量来调节内部电流而不影响外部特性。针对MMC特有的二倍频负序环流问题,设计了基于负序旋转坐标变换的环流抑制控制器(CCSC),将时变环流转换为直流量进行控制。通过比例-积分调节和电压前馈补偿,生成内部不平衡压降参考值,最终形成包含功率控制和环流抑制的整体控制结构。仿真结果表明该方法能有效抑制内部环流,同时保持系统稳定运行。

嵌入式老牛的博客 537

【数据集6】全球人工不透水面积GAIA(清华数据)

全球人工不透水面GAIA简介及其应用

WW、forever的博客 3803

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

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤真者,精诚之至也,不精不诚,不能动人。成语接龙今天难得下班早,不用做公司...

pdcfighting的博客 878

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是基于StarNet的YOLOv11轻量化改进方法研究。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 5987

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

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

weixin_39661129的博客 859

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

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

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

weixin_39605326的博客 183

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

weixin_39862847的博客 542

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

通过构建游戏学习 Python(一)

2018 年 9 月,我正在教一些学生使用 Python 进行游戏编程和自动化。然后,我意识到是时候创建一本书,不仅提供关于使用 Python 进行游戏编程丰富内容的信息,还展示如何制作和部署模仿真实世界著名游戏(如 Flappy Bird 和 Angry Birds)的游戏。我希望为你提供成为真正的 Python 游戏开发人员所需的所有基本要素和原语。这本书不是你通常的传统 Python 理论书籍;我们的方法将尽可能地实用。

龙哥盟 718

python成语接龙源代码,基于Tkinter,带成语解释

python成语接龙源代码,基于Tkinter,带成语解释,接龙规则接出上一个成语最后一字相同或近音的成语即可。

Python代码大全 1735

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

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

测试开发自动化 1728

python编的著名游戏制作人是_Python实现经典游戏:谁是卧底

谁是卧底也是深受很多人喜欢的游戏,起码要三人以上才能玩,大致分为几个阶段:1.分配平民词语和卧底词语--->2.玩家依次发言--->3.根据发言投票认为谁是卧底--->4.得到票数最多的玩家出局--->5.出局玩家刚好是卧底则平民胜利,如果出局玩家是平民则被冤死并继续第2步,当剩下的平民只有1个时卧底胜利。特殊情况是,出现两名或以上的玩家票数相同,则相同票数的玩家重新发言,然后全体针对这几个玩家投...

weixin_39958019的博客 354

四大游戏编程网站,边玩游戏,边学Python,拒绝枯燥快乐编程

前言 学习编程虽然对有些人来说是件乐事,但是对大多数人来说仍然是一件比较枯燥困难的事情。当然,面临这样困惑的人,并不是只有你一个,所以,这世界上就出现了许多寓教于乐的通过游戏的形式来教你编程的网站。让你快乐学习编程 CodinGame 这是一个需要编程一个 AI 机器人,然后由它来解决各种面临的问题的有趣游戏。支持各种编程语言。 支持各种编程语言。 网站: https://www.codinga...

weixin_41334453的博客 3889

9岁玩转Python,11岁创作游戏,学python从娃娃抓起!!!

近日,一份上海幼升小孩子的简历,吸引了不少关注。“比不过一个五岁小孩”,成为了网友评论中的一大热门关键句。而在河南省漯河市,也有一位05后“程序员”,在别人还在学习拼音时,他已经开始玩转Python,在11岁时独立创作了一款小游戏。他是怎么学习的?又是如何走上编程之路的? 学编程从娃娃抓起,11岁用Pyhton创作游戏 我们都知道Python容易学,但是就是不知道如何去学,去哪里找资料,机器学习,...

浩天的博客 4384

边玩游戏边学Python,原来编程如此有趣!

编程这种东西 如果没有个优秀的老师教你 想要真正入门成长非常困难   终于有个编程课程让我眼前一亮 一边打游戏,一边学编程   What? 是不是猛的一听有点意思 其实真的是这么回事啦 www.pypypy.cn 看到这个域名有没有想入非非 一股py之气喷涌而出 网站用微信登陆之后 我们就能看到这样的关卡界面   没有我们平时学习的 一节课一节课的排列方式 这里...

zhusongziye的博客 2454

有趣的游戏编程学习网站

最近从码农有道上看到几款不错的游戏编程网站: Coding Games 一边玩游戏,一边挑战编程难题。Coding games 支持包括 PHP、C、JavaScript 在内的 20 多种编程语言。用户界面功能强大,可以定制。 例如,你可以选择你的代码编辑器的风格:Emacs、Vim、Classic。 如果你想提升编程技能,玩 Coding games 是一种有趣的途径。 网址:www.codi...

Allen_ww的博客 1456
上一篇: 面试官问我Python日历模块,我直接用Flask开发Web版日历应用给他
下一篇: python编译&反编译,你不知道的心机与陷阱
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值