《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)。