《Python游戏编程入门》注-第4章5

2.3 实现开始游戏的功能

当显示图1所示的游戏启动界面后,根据提示点击“确定”按键,则可以开始游戏。也就是要完成键盘监听的功能,当游戏程序监听到玩家点击了“确定”按键后,开始游戏。

在《Python游戏编程入门注-第4章2》中介绍了通过按键ID和通过按键名两种方法监听玩家按键。在本游戏程序中,使用的是另外一种方法-按键状态来监听玩家按键。

2.3.1 获取按键状态

在while True循环中,通过如图1所示代码获取按键状态。

图1 获取按键状态的代码

其中,pygame.key模块中的get_pressed()函数的作用是获取键盘中所有按键的状态,该函数的返回值是一个布尔类型数据的序列,这些布尔数据表示键盘中所有按键的状态,True表示按下,False表示没有按下。

2.3.2 判断按键是否被按下

在获取了按键信息后,通过如图2所示的代码判断按键是否被按下。

图2 判断按键是否被按下的代码

其中,第28-30行代码判断“Esc”按键是否被按下,当该按键被按下时,keys[K_ESCAPE]的值是True,此时退出pygame以及游戏程序;第32-28行代码判断“回车”按键是否被按下,如果该按键被按下时,keys[K_RETURN]的值是True,第33行代码判断是否是在游戏未开始的时候按下的“回车”按键,如果是,则把游戏开始的表示game_over设置为False,表示游戏已开始;游戏分数score设置为0;seconds表示游戏总时间,因为游戏时间为10秒,所以将其设置为11;第38行是修改自第37行代码,time.clock()函数在Python3.8及以上版本已不再使用,取而代之的是time.perf_counter()函数,该函数的作用是获取当前时间,即游戏开始时间,并将其保存在变量clock_start中。

注意1 需要导入time库。

注意2 变量seconds和clock_start需要在while True循环之外定义,初始值均为0。

相关链接1 time.perf_counter()是python中用于测量高精度性能计数器的函数。它返回一个浮点数,表示从某个未指定的起点开始经过的时间(通常是系统启动后的时间)。这个时间以秒为单位,具有非常高的精度,适合用于测量短时间内的执行时间。使用time.perf_counter()统计程序执行时间非常简单,只需要在代码的开始和结束时分别调用time.perf_counter(),然后计算两者之间的差值即可。

2.4 实现按键状态显示

图2中可以看到,游戏开始之后,如果玩家按下了某个按键,会在游戏界面的右上角显示“<key>”表示按键被按下。实现以上功能的步骤是判断是否有按键被按下,如果有,则在右上角显示“<key>”。

2.4.1 判断是否有按键被按下

在while True循环中,通过如图3所示的代码判断是否有按键被按下。

图3 判断是否有按键被按下的代码

其中,第24-27行代码为之前提到的pygame框架代码,第28-31行代码通过对event.type进行判断,当该值是KEYDOWN时表示有按键被按下,则按键按下标志key_flag的值设置为True;当该值是KEYUP时表示有按键被松开,则按键按下标志key_flag的值设置为False。

注意3 按键按下标志key_flag在while True循环之外定义,初始值设置为False。

2.4.2 显示“<key>”

当有按键被按下后,在while True循环中通过图4所示代码显示“<key>”。

图4 显示“<key>”的代码

2.5 实现游戏功能

游戏的主要功能就是判断用户的按键与指定按键是否相同,如果相同则随机指定并显示下有一个按键,继续判断用户的按键直到游戏时间结束。判断用户的按键及随机产生指定按键的代码如图5所示。

图5 判断用户的按键及随机产生指定按键的代码

从图5中可以看出,首先判断游戏运行时间current是否在指定的时间seconds范围内,如果在范围内,则说明游戏时间还未结束。第49行代码通过time.perf_counter()函数获取当前时间,之后再减去游戏起始时间clock_start得到游戏运行时间current;第50-51行判断如果游戏时间已经超出指定时间,则表示游戏已经结束,将game_over设置为True;第52-55行判断如果游戏还未结束,则继续判断玩家是否正确点击了指定的按键,也就是keys[corrent_answer]是否是True,如果是True则说明玩家点击按键正确,接下来第54行随机产生下一个字母(97-122表示’a’-’z’),最后分数score加1。

注意4 需要导入random库。

2.6 显示倒计时

在游戏进行中,会显示倒计时,如《Python游戏编程入门》注-第4章3》中图2所示。显示倒计时的代码如图6所示。

图6 显示倒计时的代码

其中,game_over是游戏结束的标志,如果游戏没有结束,该标志的值是False,此时通过自定义函数print_text()显示倒计时,seconds是游戏规定的总时间,current是游戏已消耗时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461793.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql中的锁理解

1.共享锁&#xff0c;排他锁&#xff0c;也叫读锁和写锁 共享锁(S锁)(读锁)&#xff1a;事务在读取记录的时候获取共享锁&#xff0c;允许其它事务同时获取共享锁。 排他锁(X锁)(写锁)&#xff1a;事务在修改记录的时候获取排他锁&#xff0c;只允许一个事务获取排他锁&#x…

【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)

目录 1.位图的概念 2.位图的使用方法 定义与创建 设置和清除 位访问和检查 转换为其他格式 3.位图的使用场景 1.快速的查找某个数据是否在一个集合中 2.排序去重 3.求两个集合的交集和并集 4.位图的底层实现 私有成员定义与初始化 set和reset的实现 前面的博客我们…

补齐:相交链表:扣160

梦重新开始的地方 – 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。图示两个链表在节点 c1 开始相交&#xff1a; 示例&#xff1a; 何解&#xff1f; 暴力&…

Python:入门基础

目录 常量和表达式 变量 变量的语法 变量的类型 动态类型特性 注释的使用 输入和输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 常量和表达式 print是Python中的一个内置函数&#xff0c;使用print函数可以将数据打印…

手动搭建koa+ts项目框架(node开发配置环境变量)

文章目录 一、安装所需依赖二、设置package.json三、定义ts &#xff08;可选&#xff09;四、配置环境变量文件五、引入变量文件总结如有启发&#xff0c;可点赞收藏哟~ 一、安装所需依赖 pnpm add dotenv二、设置package.json 先配置脚本设置对应环境变量NODE_ENV {"…

吞吐量最高飙升20倍!破解强化学习训练部署难题

**强化学习&#xff08;RL&#xff09;对大模型复杂推理能力提升有关键作用&#xff0c;然而&#xff0c;RL 复杂的计算流程以及现有系统局限性&#xff0c;也给训练和部署带来了挑战。近日&#xff0c;字节跳动豆包大模型团队与香港大学联合提出 HybridFlow&#xff08;开源项…

Unity 插件编译版本.net 4.0

项目中用到了Google.ProtocolBuffersLite.dll 这个动态链接库&#xff0c;在升级完Unity版本后出现了 ”Unity targets .NET 4.x and is marked as compatible with editor, Editor can only use assemblies targeting .NET 3.5 or lower“ 的问题。 解决方法&#xff1a; 1、…

Cpp二叉搜索树的讲解与实现(21)

文章目录 前言一、二叉搜索树的概念定义特点 二、二叉树的实现基本框架查找插入删除当只有0 ~ 1个孩子的时候当有2个孩子的时候 三、二叉树的应用K模型KV模型 四、二叉树的性能分析总结 前言 这是全新的一个篇章呢&#xff0c;二叉搜索树是我们接下来学习set、map的前提 迈过它…

Elasticsearch —— ES 环境搭建、概念、基本操作、文档操作、SpringBoot继承ES

文章中会用到的文件&#xff0c;如果官网下不了可以在这下 链接: https://pan.baidu.com/s/1SeRdqLo0E0CmaVJdoZs_nQ?pwdxr76 提取码: xr76 一、 ES 环境搭建 注&#xff1a;环境搭建过程中的命令窗口不能关闭&#xff0c;关闭了服务就会关闭&#xff08;除了修改设置后重启的…

第八届御网杯线下赛Pwn方向题解

由于最近比赛有点多&#xff0c;而且赶上招新&#xff0c;导致原本应该及时总结的比赛搁置了&#xff0c;总结来说还是得多练&#xff0c;因为时间很短像这种线下赛&#xff0c;一般只有几个小时&#xff0c;所以思路一定要清晰&#xff0c;我还是经验太少了&#xff0c;导致比…

Ethernet 系列(6)-- 基础学习::OSI Model

&#xff08;写在前面&#xff1a;最近在学习车载以太网的知识&#xff0c;顺便记录一下知识点。&#xff09; OSI&#xff08;Open System Interconnect &#xff09;模型是一种网络通信框架&#xff0c;由国际标准化组织&#xff08;‌ISO&#xff09;在1985年提出&#xff0…

Java 字符流详解

在 Java 的 I/O 体系中&#xff0c;字符流&#xff08;Reader 和 Writer&#xff09;是专门用于处理文本数据的输入输出流。与字节流不同&#xff0c;字符流以字符为单位进行读取和写入&#xff0c;能够更好地处理文本信息&#xff0c;尤其是包含多字节字符&#xff08;如中文&…

Linux 多线程编程

韦东山的例程所谓线程&#xff0c;就是操作系统所能调度的最小单位。普通的进程&#xff0c;只有一个线程在执行对应的逻辑。我们可以通过多线程编程&#xff0c;使一个进程可以去执行多个不同的任务。相比多进程编程而言&#xff0c;线程享有共享资源&#xff0c;即在进程中出…

后端:Spring-1

文章目录 1. 了解 spring(Spring Framework)2. 基于maven搭建Spring框架2.1 纯xml配置方式来实现Spring2.2 注解方式来实现Spring3. Java Config类来实现Spring 2.4 总结 1. 了解 spring(Spring Framework) 传统方式构建spring(指的是Spring Framework)项目&#xff0c;导入依…

【C++动态规划 01背包】2787. 将一个数字表示成幂的和的方案数

本文涉及知识点 C动态规划 C背包问题 LeetCode2787. 将一个数字表示成幂的和的方案数 给你两个 正 整数 n 和 x 。 请你返回将 n 表示成一些 互不相同 正整数的 x 次幂之和的方案数。换句话说&#xff0c;你需要返回互不相同整数 [n1, n2, …, nk] 的集合数目&#xff0c;满…

Python爬虫的京东大冒险:如何高效获取商品详情的秘籍

在这个由代码编织的电商世界里&#xff0c;京东商品详情就像是被锁在高塔中的公主&#xff0c;等待着勇敢的Python爬虫骑士去解救。今天&#xff0c;我们要讲述的是如何成为一名Python爬虫骑士&#xff0c;携带你的代码长矛&#xff0c;穿梭在API的数据森林中&#xff0c;高效获…

SpringBoot【实用篇】- 测试

文章目录 目标&#xff1a;1.加载测试专用属性3.Web环境模拟测试2.加载测试专用配置4.数据层测试回滚5.测试用例数据设定 目标&#xff1a; 加载测试专用属性加载测试专用配置Web环境模拟测试数据层测试回滚测试用例数据设定 1.加载测试专用属性 我们在前面讲配置高级的时候…

vfx特效有多烧钱?云渲染农场减少vfx特效成本

特效制作一直是电影制作中的烧钱大户&#xff0c;尤其是视觉特效&#xff08;VFX&#xff09;的高昂成本让许多项目望而却步。但随着云渲染农场技术的发展&#xff0c;VFX特效的成本得到了有效控制&#xff0c;为电影工业带来了革命性的变化。 在电影工业中&#xff0c;VFX特效…

任何python安装gdal出现的问题

Releases cgohlke/geospatial-wheels GitHubGeospatial library wheels for Python on Windows. Contribute to cgohlke/geospatial-wheels development by creating an account on GitHub.https://github.com/cgohlke/geospatial-wheels/releases 各种乱七八糟的gdal库问题…

tensorflow案例4--人脸识别(损失函数选取,调用VGG16模型以及改进写法)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这个模型结构算上之前的pytorch版本的&#xff0c;算是花了不少时间&#xff0c;但是效果一直没有达到理想情况&#xff0c;主要是验证集和训练集准确率…