Python:游戏:测试打字速度

发布时间:2019-03-06 17:04:56编辑:auto阅读(1966)

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

    最近迷恋 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()

     

关键字