Pygame实战之检测按键正确的小游戏

 更新时间:2021年12月15日 08:55:11   作者:我的天才女友  
这篇文章主要为大家介绍了利用Pygame模块实现的检测按键正确的小游戏:每个字母有10秒的按键时间,如果按对,则随机产生新的字符,一共60s,如果时间到了,则游戏结束。快来跟随小编一起学习一下吧

游戏功能

游戏开始,屏幕随机显示一个字符,按 Enter 游戏开始,每个字母有10秒的按键时间,如果按对,则随机产生新的字符,一共60s,如果时间到了,则游戏结束。

引入包,初始化配置信息

import sys, random, time, pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("打字速度")

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    screen.fill((255, 192, 128))

    pygame.display.update()

初始化游戏提示信息

首先设置两种字体,然后封装一个屏幕上写字的函数,写出提示。

white = 255, 255, 255

font1 = pygame.font.SysFont("方正粗黑宋简体", 24)
font2 = pygame.font.SysFont("方正粗黑宋简体", 200)

def print_text(font, x, y, text, color=white):
    img_text = font.render(text, True, color)
    screen.blit(img_text, (x, y))
while True:
	---
	print_text(font1, 0, 0, "看看你的速度有多快")
	print_text(font1, 0, 30, "请在10秒内尝试")
	---

显示随机的字母

使用 ASCII 字符表,键盘上默认输入的是小写,97 - 122,然后我们使用chr() 函数减去32,就可以得到对应的大写字母,将其写在窗口上

# 随机的字母
correct_answer = random.randint(97, 122)
while True:
	---
	print_text(font2, 0, 240, chr(correct_answer - 32), (255, 255, 0))
	---

设置游戏的属性

# 是否按键
key_flag = False
# 游戏是否开始 默认是结束的
game_over = True
# 随机的字母
correct_answer = random.randint(97, 122)
# 分数
score = 0
# 开始时间
clock_start = 0
# 读秒倒计时
seconds = 11

根据用户的按键改变对应的属性,如果游戏重新开始,重置对应的属性。

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            key_flag = True
        elif event.type == KEYUP:
            key_flag = False
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        sys.exit()
    if keys[K_RETURN]:
        if game_over:
            game_over = False
            score = 0
            clock_start = time.perf_counter()
            seconds = 11

使用 time.perf_counter() 获取程序运行到当前的时间,计算差值,实现在屏幕上的倒计时,并根据时间结束游戏或者重新开始

	current = time.perf_counter() - clock_start

    if seconds - current < 0:
        game_over = True
    elif current <= 10:
        if keys[correct_answer]:
            correct_answer = random.randint(97, 122)
            score += 1
            clock_start = time.perf_counter()
    if not game_over:
        print_text(font1, 0, 80, "Time: " + str(int(seconds - current)))
        print_text(font1, 500, 40,  str(int(time.perf_counter())))

完整代码 

import sys, random, time, pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("打字速度")
font1 = pygame.font.SysFont("方正粗黑宋简体", 24)
font2 = pygame.font.SysFont("方正粗黑宋简体", 200)
white = 255, 255, 255
yellow = 255, 255, 0
# 是否按键
key_flag = False
# 游戏是否开始 默认是结束的
game_over = True
# 随机的字母
correct_answer = random.randint(97, 122)
# 分数
score = 0
# 开始时间
clock_start = 0
# 读秒倒计时
seconds = 11


def print_text(font, x, y, text, color=white):
    img_text = font.render(text, True, color)
    screen.blit(img_text, (x, y))


while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            key_flag = True
        elif event.type == KEYUP:
            key_flag = False
    keys = pygame.key.get_pressed()
    if keys[K_ESCAPE]:
        sys.exit()
    if keys[K_RETURN]:
        if game_over:
            game_over = False
            score = 0
            clock_start = time.perf_counter()
            seconds = 11

    screen.fill((0, 100, 0))
    current = time.perf_counter() - clock_start
    print_text(font1, 0, 0, "看看你的速度有多快")
    print_text(font1, 0, 30, "请在10秒内尝试")

    if seconds - current < 0:
        game_over = True
    elif current <= 10:
        if keys[correct_answer]:
            correct_answer = random.randint(97, 122)
            score += 1
            clock_start = time.perf_counter()
    # 如果按键了
    if key_flag:
        print_text(font1, 500, 0, "按键了")

    if not game_over:
        print_text(font1, 0, 80, "Time: " + str(int(seconds - current)))
        print_text(font1, 500, 40,  str(int(time.perf_counter())))

    print_text(font1, 0, 100, "分数: " + str(score))

    if game_over:
        print_text(font1, 0, 160, "请按enter开始游戏...")

    print_text(font2, 0, 240, chr(correct_answer - 32), yellow)

    pygame.display.update() 

以上就是Pygame实战之检测按键正确的小游戏的详细内容,更多关于Pygame按键正确游戏的资料请关注脚本之家其它相关文章!

相关文章

  • 手把手教你用322行Python代码编写贪吃蛇游戏

    手把手教你用322行Python代码编写贪吃蛇游戏

    最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法,下面这篇文章主要给大家介绍了关于如何用322行Python代码编写贪吃蛇游戏的相关资料,需要的朋友可以参考下
    2023-02-02
  • Python中暂存上传图片的方法

    Python中暂存上传图片的方法

    这篇文章主要介绍了Python中暂存上传图片的方法,本文使用cStringIO模块实现暂存功能,本文给出简单使用示例,需要的朋友可以参考下
    2015-02-02
  • Django解决CORS跨域问题的方案

    Django解决CORS跨域问题的方案

    Cross-Origin Resource Sharing(CORS) 跨域问题,在前后端后离项目,selenium , playweight 自动化测试代码中经常遇到,本文给大家介绍了Django解决CORS跨域问题的方案,文中有详细的代码讲解,需要的朋友可以参考下
    2024-03-03
  • python中关于os.path.pardir的一些坑

    python中关于os.path.pardir的一些坑

    这篇文章主要介绍了python中关于os.path.pardir的一些坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • 如何测试Python网站的访问速度,并且优化Python网站的性能

    如何测试Python网站的访问速度,并且优化Python网站的性能

    本文使用网络工具和Python测速库进行测试Python网站的访问速度,通过优化代码性能和优化服务器性能以及优化数据库性能等有针对性地优化Python网站的性能
    2024-01-01
  • PyCharm+Qt Designer+PyUIC安装配置教程详解

    PyCharm+Qt Designer+PyUIC安装配置教程详解

    这篇文章主要介绍了PyCharm+Qt Designer+PyUIC安装配置教程详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • python3对拉勾数据进行可视化分析的方法详解

    python3对拉勾数据进行可视化分析的方法详解

    这篇文章主要给大家介绍了关于python3对拉勾数据进行可视化分析的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python3具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • python实现凯撒密码

    python实现凯撒密码

    这篇文章主要为大家详细介绍了python实现凯撒密码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • python多线程性能测试之快速mock数据

    python多线程性能测试之快速mock数据

    这篇文章主要为大家介绍了python多线程性能测试之快速mock数据,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python ini文件常用操作方法解析

    Python ini文件常用操作方法解析

    这篇文章主要介绍了Python ini文件常用操作方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论