打字小游戏
在上一节课的学习中,我们编写了一个打字小游戏,代码如下
import random
import time
game_rand = []
note = "abcdefghijklmopqrstuvwxyz"
print(note)
#输入命令开始游戏
while True:
UserInputChange = input('请输入g开始游戏')
if UserInputChange == 'g':
print("输入正确!开始游戏!")
note = "abcdefghijklmopqrstuvwxyz" #随机抽取13个字符
some = random.sample(note , 13)
my_str =''.join(some)
start_time =time.time() #记录打字时间
input_str = input(my_str+'\n\n')
end_time = time.time()
if input_str == my_str:
print('输入正确')
execution_time = round((end_time - start_time)/13,3)
game_rand.append(execution_time)
game_rand.sort()
# print('当前时间为:',execution_time)
# print('历史记录最快为:',min(game_rand))
if game_rand[0] == execution_time:
print('您创造了新的记录!','平均用时',execution_time,'秒!')
else:
print('最快记录平均用时',game_rand[0],'秒')
else:
print('输入错误,正确的是',my_str)
else:
print("您输入有误")
上面代码展示的是面向过程的编程,在学习了函数、类有关的知识后,我们尝试使用面向对象的思想来改写这个小游戏代码。
为了方便存储游戏数据,还需要使用json库来创建文档存储数据,先导入必要的库,定义一些需要使用的变量
import json
import time
import random
key = True #控制游戏开关
game_rand = [] #游戏排名
game_record = None #本次用时
note = "abcdefghijklmopqrstuvwxyz" #字符库
key_num = 13 #每次游戏出现需要打出的字符数量
首先用json库来创建储存游戏数据的文件
def json_record(game_record,game_rand):
try:
with open("./record.json","r",encoding="utf-8") as f:
game_rand = json.load(f)
except FileNotFoundError:
game_rand = []
with open("./record.json","w",encoding="utf-8") as f:
json.dump(game_rand,f)
game_rand.append(game_record)
with open("./record.json","w",encoding="utf-8") as f:
json.dump(game_rand,f)
return game_rand
再建一个函数来对比每一次的时间和最快纪录
def fast_data(game_rand):
_ = []
for i in game_rand:
_.append(i['time'])
fast_time = _.index(min(_))
return f"最快记录:{game_rand[fast_time]['date']},平均每字符:{game_rand[fast_time]['time']}秒!"
最终用一个函数来装这个游戏的主体
def run(note,key_num,game_rand):
UserInputChange = input('输入g开始游戏,输入break退出游戏')
if UserInputChange == 'g':
print("输入正确!开始游戏!")
some = note_random(note,key_num)
start_time =time.time() #记录打字时间
input_str = input(some+'\n\n')
end_time = time.time()
execution_time = round((end_time - start_time)/13,3)
if input_str == some:
date_ = datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d %H:%M:%S')
game_record = {
"date":date_,
"key":some,
"time":execution_time
}
game_rand = json_record(game_record,game_rand)
print('本次成绩:',execution_time,'秒')
print(fast_data(game_rand))
else:
print('输入错误,正确的是:',some)
return True
elif UserInputChange == 'break':
return False
想要玩这个小游戏,再用一个循环,就可以自行控制游戏进行与否
while key:
key = run(note,key_num,game_rand)