Python 如何让两个功能同时激活+;计时器问题

Python 如何让两个功能同时激活+;计时器问题,python,timer,text-based,adventure,Python,Timer,Text Based,Adventure,我正在为一个基于文本的冒险游戏编写一个攻击代码,玩家可以用剑造成伤害。控制台中会显示一个随机数字,玩家必须尽快输入该数字。他们做得越快,造成的伤害就越大。到目前为止,我有: import random import time from threading import Timer def damage(timeAmount, baseDamage): damageTotal = baseDamage - timeAmount def sword(): t = 0

我正在为一个基于文本的冒险游戏编写一个攻击代码,玩家可以用剑造成伤害。控制台中会显示一个随机数字,玩家必须尽快输入该数字。他们做得越快,造成的伤害就越大。到目前为止,我有:

import random
import time
from threading import Timer


def damage(timeAmount, baseDamage):
    damageTotal = baseDamage - timeAmount


def sword():
    t = 0
    timerAmount = 0
    randomNumber = random.randint(0, 1000000)
    print('Type the following as fast as you can: \n' + str(randomNumber))
    swordAttack = input('> ')
    while t == 0:
        timerAmount = timerAmount + 1
        time.sleep(1)
        if swordAttack == randomNumber:
            t = 1
            damage(timerAmount, 10)
            print(timerAmount)


sword()
第一个问题是,我不知道如何让计时器计数,然后在伤害公式中使用最后的时间。线程中的计时器函数只会倒计时,我不知道如何精确地计算它的时间,尽管如果你能用简单的术语向我解释一下,这可能会起作用


第二个问题是,我还需要使其在屏幕上显示输入时计时器立即激活,但当input语句运行时,它会停止代码,直到给出输入。

好,所以我将使用计时器倒计时的方式来尝试。如果你的剑的伤害是10,那么没有必要在“否定”中超过10,它只会是0,所以只要从剑的伤害开始倒数。因此,如果他们在2秒内输入,那么在这种情况下将造成8点伤害。下面是一些我使用倒计时的代码。你所要做的就是将计时器设置为任何剑的伤害

import random
import time
from threading import Timer


def damage(timeAmount, baseDamage):
    damageTotal = baseDamage - timeAmount
    print(format(damageTotal, '.0f'))


def sword():
    user_sword_max_damage = 10
    randomNumber = random.randint(0, 10)
    timeout = user_sword_max_damage
    t = Timer(timeout, print, ['Damage dealt = 0'])
    start_time = time.time()
    t.start()
    while True:
        try:
            prompt = int(input('Enter ' + str(randomNumber) + ' as fast as you can: '))
            if prompt == randomNumber:
                t.cancel()
                final_time = time.time()-start_time
                print(format(final_time, '.0f'))
                damage(final_time, user_sword_max_damage)
                break
            elif prompt != randomNumber:
                continue
        except:
            continue
sword()

如果你以后增加更多的伤害物品,这也可能为你指明正确的方向。我唯一没有添加的部分是,如果时间用完,将damageTotal设置为0的逻辑,您应该能够将其放入while循环中的if语句中(请注意,这是我第一次尝试回答ha,但我希望这会有所帮助)

可能在开始时获取时间-
start=time.time()
,在结束时获取时间-
end=time.time()()
-并计算
end-start
以获得所需的时间。如果必须将
input()
与其他内容一起使用,则必须在单独的线程中运行
input()
或其他内容。