python学习日记3——打字小游戏

本文介绍了一种将面向过程的打字小游戏转化为面向对象的方式,利用Python的json库来存储和管理游戏数据,包括游戏排名和用时记录。通过函数实现游戏逻辑和数据操作,展示了面向对象编程在游戏开发中的应用。
摘要由CSDN通过智能技术生成

打字小游戏

在上一节课的学习中,我们编写了一个打字小游戏,代码如下

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)
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值