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

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

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

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

  1. import sys
  2. import random
  3. import time
  4. import pygame
  5. from pygame.locals import *
  6.  
  7. def print_text(font, x, y, text, color=(255, 255, 255)):
  8. imgText = font.render(text, True, color)
  9. screen.blit(imgText, (x, y))
  10.  
  11. pygame.init()
  12. screen = pygame.display.set_mode((600, 500))
  13. pygame.display.set_caption('Keyboard Demo')
  14. font1 = pygame.font.Font(None, 24)
  15. font2 = pygame.font.Font(None, 200)
  16. white = (255, 255, 255)
  17. yellow = (255, 255, 0)
  18.  
  19. key_flag = False
  20. correct_answer = 97 # a
  21. seconds = 11
  22. score = 0
  23. speed = 0
  24. clock_start = 0
  25. game_over = True
  26.  
  27. while True:
  28. for event in pygame.event.get():
  29. if event.type == QUIT:
  30. sys.exit()
  31. elif event.type == KEYDOWN:
  32. key_flag = True
  33. elif event.type == KEYUP:
  34. key_flag = False
  35.  
  36. keys = pygame.key.get_pressed() # keys 是一个元组,穷举了所有的按键,未按下为 0,按下为 1
  37. if keys[K_ESCAPE]:
  38. sys.exit()
  39. if keys[K_RETURN]:
  40. if game_over:
  41. game_over = False
  42. clock_start = time.time()
  43. score = 0
  44. seconds = 11
  45. speed = 0
  46. clock = clock_start
  47.  
  48. if not game_over:
  49. current = time.time() - clock_start
  50. if seconds < current:
  51. game_over = True
  52. else:
  53. if keys[correct_answer]:
  54. correct_answer = random.randint(97, 122)
  55. clock_start = time.time()
  56. score += 1
  57. speed = 60 * score / (clock_start - clock)
  58.  
  59. screen.fill((0, 100, 0))
  60. print_text(font1, 0, 0, "Let's see how fast you can type!")
  61. print_text(font1, 0, 20, "Try to keep up for 10 seconds...")
  62.  
  63. if key_flag:
  64. print_text(font1, 500, 0, "<key>")
  65.  
  66. if not game_over:
  67. print_text(font1, 0, 80, "Time: " + str(int(seconds-current)))
  68.  
  69. print_text(font1, 0, 100, "Speed: " + str(int(speed)) + " letters/min")
  70.  
  71. if game_over:
  72. print_text(font1, 0, 160, "Press Enter to start...")
  73.  
  74. print_text(font2, 0, 240, chr(correct_answer-32), yellow)
  75.  
  76. pygame.display.update()

Python:游戏:测试打字速度的更多相关文章

  1. Python 游戏之旅(Pygame)

    Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚.基于这样一个设想,所有需要的游戏功能和理念 ...

  2. 打字速度单位WPM、KPM定义与计算方法

    国际通行的打字速度单位是WPM,用来量度打字速度的快慢.另外还有相关的KPM.CPM.KPH等打字速度单位,下面一一介绍. ----WPM------------------------------- ...

  3. Java or Python?测试开发工程师如何选择合适的编程语言?

    很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对 ...

  4. Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...

  5. Python游戏编程入门 中文pdf扫描版|网盘下载内附地址提取码|

    Python是一种解释型.面向对象.动态数据类型的程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Python开发精彩游戏所需的[]为重要的该你那.本书不 ...

  6. Ratatype - 在线打字教程,提高打字速度

    Ratatype 是一个在线的打字教程网站,帮助人们提高键盘输入速度.开始掌握你的技能,挑战你的朋友或得到一个打字的证书.如果打字慢会浪费你宝贵的时间.如果你的打字速度提高30%,您可以每天节省20分 ...

  7. 老司机带你用vagrant打造一站式python开发测试环境

      前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python ...

  8. Python游戏编程入门

    <Python游戏编程入门>这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现.并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏pygame游戏库 ...

  9. python 游戏 —— 汉诺塔(Hanoita)

    python 游戏 —— 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

随机推荐

  1. 30分钟,让你彻底明白Promise原理

    前言 前一阵子记录了promise的一些常规用法,这篇文章再深入一个层次,来分析分析promise的这种规则机制是如何实现的.ps:本文适合已经对promise的用法有所了解的人阅读,如果对其用法还不 ...

  2. go 结构体

    结构体声明 type Employee struct { ID int Name string Address string DoB time.Time Position string Salary ...

  3. Debug命令详解

    Debug在学习汇编的过程中,担任着一个非常重要的角色,是一个极其重要的调试工具,所以学会它是必须的. 命令格式 功能说明 A [地址] 输入汇编指令 C [范围] 起始地址 对由“范围”指定的区域与 ...

  4. C语言可变参数

    前段时候在实现利用redis进行的一个数据库比对的功能,稍微去分析了一下redis里面的源代码,然后发现其中的发送命令接口声明如下: void *redisCommand(redisConnect * ...

  5. 学习--->更新集合/内存/深浅拷贝

     一.计算机基础 1..软件(应用程序) 2.解释器/编译器 - 解释型语言:将代码每一行传递给计算机一行,常用编程语言python,PHP,Ruby. - 编译型语言:将代码完全执行完后会形成一个文 ...

  6. pip离线安装依赖包

    pip安装离线本地包 导出本地已有的依赖包 pip freeze > requirements.txt 将依赖包下载到本地 # 下载到当前目录,指定pip源 pip download -r re ...

  7. vue 学习

    1.安装vue.js 学习链接: https://cn.vuejs.org/v2/guide/ vue官方文档 vscode 软件框架 https://doc.vux.li/zh-CN/ vux文档

  8. [微信小程序]在应用地图时,如何设置满屏(高度)

    微信小程序在做地图功能时 用常规的办法height:100%:来设置高度来占满屏幕是不行的 它不会生效 应该改用单位vh 例如 height:100vh 这样就可以是地图占满整个屏幕高度

  9. MVC编程模型

    MVC 编程模型 MVC 是三个 ASP.NET 开发模型之一. MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计: Model(模型 ...

  10. 微信小程序开发-tabbar组件

    "tabBar": { "backgroundColor": "#303133", "color": "#ff ...