下面我们一起用pygame编写一个打字测速游戏

这是一个很实用的有趣的小游戏:

开始之前先来学习几个小函数:

1、 ord(ch)

python内置函数,传入一个字符,返回字符的ascii码

2、chr(num)

python内置函数,传入一个十进制或十六进制,返回ascii码对应的字符

3、os.path.getsize(filename)

传入文件路径,返回文件大小,返回0为空文件

4、pygame.key.get_pressed()

返回一个记录按键事件的字典,字典中的键为按键类型,字典中的值为bool中的True或者False、

例如:

keys = pygame.key.get_pressed()if keys[K_RETURN]:print("按了回车键")

下面是我们的代码

我们将全部代码写在多个.py文件中,最后通过主程序引入各个子程序,这样做可以让我们编写程序逻辑更清晰,有助于修改调整程序。

游戏主程序

import pygame
import sys
import time
from random import randintfrom settings import Setting
from displayboard import Displayboard
import functions as funpygame.init()my_settings = Setting()screen = pygame.display.set_mode((my_settings.screen_width, my_settings.screen_high))
pygame.display.set_caption("Test Your Typing")dis_board = Displayboard(my_settings, screen)#标志变量
letter_ascii = randint(97, 122)
letter = chr(letter_ascii - 32)
game_active = False
scores = 0
speed = 0
timing = False
remaining_time = my_settings.limited_time
fastest_speed = int (fun.read_fastest_speed(my_settings.filename))while True:'''游戏的主循环'''for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:pygame.quit()sys.exit()keys = pygame.key.get_pressed()if keys[pygame.K_RETURN] and not game_active:scores = 0remaining_time = my_settings.limited_timegame_active = Truetiming = True#开始计时if timing:start_time = time.perf_counter()timing = False#填充界面
    screen.fill(my_settings.BLUE)#显示文本图像
    dis_board.display_speed_text(speed)dis_board.display_fastest_text(fastest_speed)#游戏还未开始时执行的操作if not game_active:pygame.mouse.set_visible(True)dis_board.display_top_text()dis_board.display_start_text()#游戏进行时执行的操作if game_active:pygame.mouse.set_visible(False)dis_board.display_letter_text(letter)dis_board.display_remaining_time_text(remaining_time)if event.type == pygame.KEYDOWN:dis_board.display_typing_text()if event.key == letter_ascii:scores += 1letter_ascii = randint(97, 122)letter = chr(letter_ascii - 32)speed = scores * 3current_time = time.perf_counter()remaining_time = int (my_settings.limited_time - (current_time - start_time))if remaining_time < 0:game_active = Falseif speed >= fastest_speed:fastest_speed = speedfun.write_fastest_speed(speed, my_settings.filename)        pygame.display.flip()

View Code

存放游戏设置的程序

class Setting():'''存放游戏中的设置'''def __init__(self):#屏幕尺寸self.screen_width = 700self.screen_high = 550#字体大小self.s_font_size = 24self.m_font_size = 35self.l_font_size = 200#按钮尺寸self.button_width = 100self.button_high = 35#测试时间self.limited_time = 20#颜色self.YELLOW    = (255, 255,   0)self.WHITE     = (255, 255, 255)self.BLACK     = (  0,   0,   0)self.RED       = (255,   0,   0)self.GREEN     = (  0, 255,   0)self.DARKGREEN = (  0, 155,   0)self.DARKGRAY  = ( 40,  40,  40)self.OLIVE     = (128, 128,   0)self.BLUE      = (  0,   0, 255)self.NAVYBLUE  = (  0,   0, 128)#位置self.top_text_position = (20, 20)self.speed_text_position = (20, 100)#文本内容self.top_text = "Try to keep up " + str(self.limited_time) + " seconds!"self.start_text = "Please Enter To Start!"#文件名self.filename = r'flies\speed.txt'

View Code

存放主程序函数的程序

import osdef read_fastest_speed(speed_file):file_size = os.path.getsize(speed_file)if file_size == 0:return 0else:with open(speed_file) as speed_file:lines = speed_file.readlines()return lines[0]def write_fastest_speed(speed, speed_file):with open(speed_file) as file:file.write(str(speed))

View Code

显示文本的程序

import pygameclass Displayboard():'''展示程序中的文本'''def __init__(self, my_settings, screen):self.screen = screenself.my_settings = my_settingsself.screen_rect = screen.get_rect()#获取字体对象self.s_font = pygame.font.Font(r'fonts\freesansbold.ttf', my_settings.s_font_size)self.m_font = pygame.font.Font(r'fonts\freesansbold.ttf', my_settings.m_font_size)self.l_font = pygame.font.Font(r'fonts\freesansbold.ttf', my_settings.l_font_size)#获取文本图片self.top_text_image = self.s_font.render(my_settings.top_text, True, my_settings.YELLOW)self.typing_flag_image = self.s_font.render("typing!", True, my_settings.DARKGRAY)self.start_text_image = self.m_font.render(my_settings.start_text, True, my_settings.GREEN, my_settings.OLIVE)#获取surface的rectself.start_image_rect = self.start_text_image.get_rect()self.start_image_rect.center = self.screen_rect.centerself.typing_image_rect = self.typing_flag_image.get_rect()self.typing_image_rect.right = self.screen_rect.right - 20self.typing_image_rect.top = 20#显示各个文本的函数def display_top_text(self):self.screen.blit(self.top_text_image, self.my_settings.top_text_position)def display_typing_text(self):self.screen.blit(self.typing_flag_image, self.typing_image_rect)def display_start_text(self):self.screen.blit(self.start_text_image, self.start_image_rect)def display_speed_text(self, speed):speed_text_image = self.s_font.render("Current Speed: " + str(speed) + " letters/min", True, self.my_settings.YELLOW)speed_text_rect = speed_text_image.get_rect()speed_text_rect.centery = self.screen_rect.centery / 2speed_text_rect.right = self.screen_rect.right - 20self.screen.blit(speed_text_image, speed_text_rect)def display_letter_text(self, letter):letter_text_image = self.l_font.render(letter, True, self.my_settings.RED)letter_rect = letter_text_image.get_rect()letter_rect.centerx = self.screen_rect.centerxletter_rect.centery = self.screen_rect.bottom * 2 / 3self.screen.blit(letter_text_image, letter_rect)def display_remaining_time_text(self, remaining_time):remaining_time_image = self.s_font.render("Remaining Time: " + str(remaining_time), True, self.my_settings.OLIVE)remaining_time_rect = remaining_time_image.get_rect()remaining_time_rect.top = self.screen_rect.top + 20remaining_time_rect.centerx = self.screen_rect.centerxself.screen.blit(remaining_time_image, remaining_time_rect)def display_fastest_text(self, fastest_speed):fastest_speed_image = self.s_font.render("Fastest Speed: " + str(fastest_speed),True, self.my_settings.YELLOW)fastest_speed_rect = fastest_speed_image.get_rect()fastest_speed_rect.centery = self.screen_rect.centery / 2fastest_speed_rect.left = 20self.screen.blit(fastest_speed_image, fastest_speed_rect)

View Code

转载于:https://www.cnblogs.com/huwt/p/10347785.html

【pygame游戏编程】第四篇-----打字测速游戏相关推荐

  1. python打字测速_【pygame游戏编程】第四篇-----打字测速游戏

    importpygameclassDisplayboard():'''展示程序中的文本''' def __init__(self, my_settings, screen): self.screen= ...

  2. DirectX5.0最新游戏编程指南 DirectDraw篇 四、DirectDraw高级特性 (转)

    DirectX5.0最新游戏编程指南 DirectDraw篇 四.DirectDraw高级特性 (转)[@more@] 四.DirectDraw高级特性 1.直接内存访问DMA   有些显示设备能够在 ...

  3. linux 脚本编写 -eq,关于shell脚本基础编程第四篇

    shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...

  4. java swing游戏编程高仿金山打字教程-拯救苹果

    原文:java swing游戏编程高仿金山打字教程-拯救苹果 源代码下载地址:http://www.zuidaima.com/share/1786650901515264.htm 这几天学习了一下ja ...

  5. 计算机打字测速,电脑的打字测速软件分享

    对于电脑工作人员来说,打字是我们每天都会接触的,作为网站编辑来说,每天就是打字,打字,打字,因此,打字速度一定不能慢,不然就会大大的影响工作效率.下面是学习啦小编为大家整理的关于电脑的打字测速软件分享 ...

  6. 计算机打字测速,5款打字测速软件分享,打字练习、测速两不误

    对于电脑办公人员来说,打字是我们每天都会接触的,像小编我对于打字是印象颇深的,作为网站编辑来说,每天就是打字,打字,打字,因此,打字速度一定不能慢,否则,就会大大的影响工作效率.对于打字速度慢的小伙伴 ...

  7. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

  8. Python游戏编程(四)Hangman

    Hangman是一个双人游戏,通常用纸和铅笔来玩.一个玩家想好一个单词,然在纸上为单词的每个字母画一个空格.然后第二个玩家猜测这个单词中可能包含的字母. 如果第二个玩家猜测对了,第一个玩家就在正确的空 ...

  9. 如何制作一款HTML5 RPG游戏引擎——第四篇,情景对话

    今天我们来实现情景对话.这是一个重要的功能,没有它,游戏将变得索然无味.所以我们不得不来完成它. 但是要知道,使用对话可不是一件简单的事,因为它内部的东西很多,比如说人物头像,人物名称,对话内容... ...

  10. 打字_盲打训练/打字训练网站(updating)/打字测速网站

    文章目录 why touch-typing? overview Sitting posture for typing 小拇指还是比较辛苦的,需要负责的键最多 训练网站: site0: [www.typ ...

最新文章

  1. 用树莓派的方式打开《Bad Apple!!》原来是这样子的
  2. 执行超时已过期。完成操作之前已超时或服务器未响应。_OMG! 云服务器 CPU 100%了!肿么办?...
  3. OpenCASCADE:形状愈合之形状自定义
  4. Angular 应用 bootstrapModule 映射的 app Component 的初始化逻辑
  5. leetcode459. 重复的子字符串(KMP)
  6. mac securecrt程序无响应_Adobe庆祝Photoshop问世30周年 为Mac和iPad版本提供新功能
  7. 设置iis支持wap服务
  8. 转:完全卸载Oracle方法
  9. 二维\三维绘图AutoCAD 2022 for Mac
  10. Matlab DIP(瓦)ch8图像压缩练习
  11. [leetcode]187. Repeated DNA Sequences寻找DNA中重复出现的子串
  12. WMS——新能源汽车减速机组装工厂WMS案例
  13. 利用数据细分目标客户群
  14. java 解压assets文件,android 读取assets下文件或者 java读取本地文件
  15. windows7打不开html文件格式,mht是什么文件?Win7打不开mht格式文件的解决办法
  16. 1209磊磊的随机数
  17. JS输入框统计文字数量,并过滤拼音时的统计
  18. nginx 配置静态网页
  19. C++基础---三目运算符
  20. 华为防火墙telnet配置

热门文章

  1. php该怎么下载文件,php怎么实现下载文件?
  2. 4200有linux版本么,如何检查Linux版本
  3. awg710 matlab,利用任意信号发生器模拟高速光驱信号
  4. Linux chapter 3
  5. java sqlite 密码保护_密码保护SQLite数据库 . 可能吗?
  6. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第4节 模拟BS服务器案例_1_模拟BS服务器分析...
  7. vue实用组件——表格
  8. Maven运行时异常java.lang.UnsupportedClassVersionError的解决方案
  9. bzoj 2957 楼房重建 分块
  10. [转]访问 OData 服务 (WCF Data Services)