专栏首页学无止境Python:游戏:测试打字速度

Python:游戏:测试打字速度

现在写书的人真是一点责任心都没有,最近看了几本书,其中的代码都存在错误。

最近迷恋 Python 游戏,买了《Python游戏编程入门》[美] Jonathan S·Harbour 著 一书来看。

其中第四章:Bomb Catcher游戏中,测试打字速度的程序代码严重有误。

改程序屏幕上随机显示一个字母,按键输入该字母后随机显示下一个,计算平均一分钟可以输入多少个字母,原代码中计算速度的一块有误,附上我修改后的代码

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


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


pygame.init()
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption('Keyboard Demo')
font1 = pygame.font.Font(None, 24)
font2 = pygame.font.Font(None, 200)
white = (255, 255, 255)
yellow = (255, 255, 0)

key_flag = False
correct_answer = 97     # a
seconds = 11
score = 0
speed = 0
clock_start = 0
game_over = True

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == KEYDOWN:
            key_flag = True
        elif event.type == KEYUP:
            key_flag = False

    keys = pygame.key.get_pressed()     # keys 是一个元组,穷举了所有的按键,未按下为 0,按下为 1
    if keys[K_ESCAPE]:
        sys.exit()
    if keys[K_RETURN]:
        if game_over:
            game_over = False
            clock_start = time.time()
            score = 0
            seconds = 11
            speed = 0
            clock = clock_start

    if not game_over:
        current = time.time() - clock_start
        if seconds < current:
            game_over = True
        else:
            if keys[correct_answer]:
                correct_answer = random.randint(97, 122)
                clock_start = time.time()
                score += 1
                speed = 60 * score / (clock_start - clock)

    screen.fill((0, 100, 0))
    print_text(font1, 0, 0, "Let's see how fast you can type!")
    print_text(font1, 0, 20, "Try to keep up for 10 seconds...")

    if key_flag:
        print_text(font1, 500, 0, "<key>")

    if not game_over:
        print_text(font1, 0, 80, "Time: " + str(int(seconds-current)))

    print_text(font1, 0, 100, "Speed: " + str(int(speed)) + " letters/min")

    if game_over:
        print_text(font1, 0, 160, "Press Enter to start...")

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

    pygame.display.update()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python:游戏:扫雷(附源码)

    这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的。

    丹枫无迹
  • 【C#】比较 Random 与 RandomNumberGenerator 生成随机字符串

    生成随机数,第一反应肯定是 Random 类,然而,Random 生成的随机数被称为伪随机数,因为用 Random 生成随机数时,需要用到一个“种子”,而 使用...

    丹枫无迹
  • NumPy 超详细教程(3):ndarray 的内部机理及高级迭代

    在前面的内容中,我们已经详细讲述了 ndarray 的使用,在本章的开始部分,我们来聊一聊 ndarray 的内部机理,以便更好的理解后续的内容。

    丹枫无迹
  • 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

    马三小伙儿
  • win10 装centos7 虚拟机

    https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html

    砸漏
  • Weex 事件传递的那些事儿

    在前两篇文章里面分别谈了Weex如何在Native端初始化的和Weex是如何高效的渲染Native的原生UI的。Native这边还缺一块,那就是Native产生...

    一缕殇流化隐半边冰霜
  • Android自定义View-记录一个简单却又常见的效果实现

    代码 简单列下主要代码,完整代码地址放在了文字末尾。 1.为了更加灵活,我这里提供了很多属性用于用户自己来设置:

    coderZhen
  • python解释NTFS runlist

    root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img

    py3study
  • LeetCode 161. 相隔为 1 的编辑距离(DP/遍历)

    Michael阿明
  • TS

    /* var flag:boolean=true; flag=true; */

    河湾欢儿

扫码关注云+社区

领取腾讯云代金券