当前位置: 首页 > article >正文

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

在《Python游戏编程入门》的第4章随书代码“KeyboardDemo.py”中,介绍了一个简单的按键游戏。

1 游戏介绍

玩家需要根据游戏的提示在10秒钟内按下相应按键,游戏会计算出玩家按键的速度。游戏启动界面如图1所示。

图1 游戏启动界面

此时,按下“回车”按键,游戏开始,如图2所示。

图2 游戏开始

从图2中可以看出,游戏过程中,会显示倒计时和实时的按键速度。

注意1 “KeyboardDemo.py”源代码可以在《python游戏编程入门注-第2章1》中提到的地址中下载。

注意2 “KeyboardDemo.py”文件的位置是“python游戏编程入门->code->code->chap04”。

注意3 原始代码在Python3.8及以上版本中会报错,需要把代码中的“time.clock()”改为“time.perf_counter()”。

2 游戏编写

2.1 搭建框架

首先搭建pygame游戏框架,如图3所示。

图3 pygame游戏框架代码

2.2 实现游戏启动界面

游戏启动界面如图1所示,可以将其分为上、中、下三部分;上半部分是提示信息;中间部分显示实时按键速度和游戏开始提示;下半部分显示玩家要点击的按键。

2.2.1 定义显示信息的函数

通过自定义函数print_text()在指定位置显示指定信息,代码如图4所示。

图4 print_text()函数代码

其中,参数font指定了显示信息的字体;参数x和y指定了显示信息的位置;参数text指定了显示信息的内容;参数color指定了显示信息的颜色,默认为白色。

相关链接1 print_text()函数的详细说明,请参考《python游戏编程入门注-第2章1》。

2.2.2 定义字体

从图1中可以看出,游戏的启动界面包含了两种字体,如图5所示代码进行定义。

图5 定义字体

其中,font1用来显示上部和中部较小字体的信息;font2用来显示下部的较大字体。

2.2.3 显示上半部分的提示信息

显示上半部分的提示信息的代码如图6所示。

图6 显示上半部分的提示信息的代码

从图6中可以看出,调用了自定义函数print_text()来显示信息。

注意4 图6所示代码在while True循环中,并且要位于screen.fill()代码之后。

2.2.4 显示中间部分的实时按键速度和游戏开始提示

显示实时按键速度和游戏开始提示的代码如图7所示。

图7 显示实时按键速度和游戏开始提示的代码

注意5 图7所示代码在while True循环中,并且要位于screen.fill()代码之后。

其中,第32行代码调用print_text()显示按键实时速度;第33-34行代码通过if语句判断游戏是否结束的标志game_over,如果该表示是True,则说明游戏结束或者说游戏还没有开始,则调用print_text()显示游戏开始的提示。表示按键实时速度的变量是speed,该变量与实时分数score有关(每次按键正确,score加1分),因为游戏的时间是10秒钟,而按键实时速度的单位是“letters/min”,即每分钟的按键数,所以speed与score的关系如图8所示。

图8 speed与score的关系

注意6 图8所示代码在while True循环中。

变量score和game_over的定义在while True循环之外,如图9所示。

图9 变量score和game_over的定义

2.2.5 显示下半部分玩家要点击的按键

显示下半部分玩家要点击的按键的代码如图10所示。

图10 显示下半部分玩家要点击的按键的代码

注意7 图10所示代码在while True循环中。

其中,变量correct_answer表示要点击按键对应的ASCII码;yellow表示黄色;以上两个变量在while True循环之外定义,如图11所示。

图11 变量correct_answer和yellow的定义代码

相关链接2 图11中correct_answer的初始值是97,表示小写“a”的ASCII码,而图10中correct_answer-32的含义是显示大写的“A”。也就是说,用大写字母来显示玩家要点击的按键,而实际上玩家点击小写字母按键即可(代码中比较的是correct_answer)。


http://www.kler.cn/a/372861.html

相关文章:

  • vue的路由的两种模式 hash与history 详细讲解
  • zabbix 6.0 监控clickhouse(单机)
  • 信息安全数学基础(35)同态和同构
  • 企业新闻及产品宣传稿怎么写?有哪些商业财经类报纸杂志或媒体发布?
  • 开源趣味艺术画板Paint Board
  • 6977 树的统计
  • Scala 的trait
  • 钉钉平台开发小程序
  • Linux 常用命令二
  • 空间音频技术
  • 计算机视觉常用数据集Foggy Cityscapes的介绍、下载、转为YOLO格式进行训练
  • WinUI AOT 发布
  • 输电线路云台变焦视频监控装置在智能识别和数据安全方面有哪些具体的优势和措施?
  • 【设计模式系列】代理模式(八)
  • python爬虫抓取豆瓣数据教程
  • redis:基本全局命令-键管理(1)
  • 同WiFi网络情况下,多个手机怎么实现不同城市的IP
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附源代码可复制
  • yocto 下基于SDK的 tcpdump 移植
  • 爬虫利器playwright
  • ts:常见的内置数学方法(Math)
  • Java项目练习——学生管理系统
  • MR30分布式IO:石化行业的智能化革新
  • IIC学习总结
  • CodeS:构建用于文本到 SQL 的开源语言模型
  • list类模拟实现