如何用tim降低变量值

2024-10-02 08:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我制作的一个游戏的代码,在第9-13行,我试图使饥饿变量每180秒减少10,但它不起作用。在

import threading
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("           Welcome to my game")
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")

health = 100
stamina = 100
hunger = 100
def hungerdecrease(h):
    global hunger
    threading.Timer(180,hungerdecrease).start()
    h -= 10

hungerdecrease(hunger)

while  health > 0 and stamina >0 and hunger >0:
    if  hunger <50:
        print("You are hungry.")
    if  stamina <10:
        print("You are feeling exhausted.")
    if  health <50:
        print("You are unhealthy.")
print("You are dead")

Tags: and代码importyou游戏ifareprint
1条回答
网友
1楼 · 发布于 2024-10-02 08:27:28
  • 首先,不需要传递值,因为只需传递一个副本。把变量变成全局变量。在
  • 然后,您的while循环需要一些被动延迟,或者您正在使用100%活动CPU循环。在
  • 必须使用thread.Lock来防止对health变量的并发访问
  • 另一个问题:线程需要停止重新配置,否则进程无法退出。当health < 0时,我停止重新填充线程

计时器设置为1的最小完整可验证工作示例:

import threading,time,sys

hunger = 100
stamina = 100
health = 100

lock = threading.Lock()

def hungerdecrease():
    global hunger
    if hunger > 0:
        # no rearm when dead
        threading.Timer(1,hungerdecrease).start()  # rearm timer
        lock.acquire()
        hunger -= 10
        lock.release()

threading.Timer(1,hungerdecrease).start()

lock.acquire()

while  health > 0 and stamina >0 and hunger >0:
    lock.release()
    time.sleep(0.5)  # so CPU isn't 100%
    if  hunger <50:
        print("You are hungry.")
    if  stamina <10:
        print("You are feeling exhausted.")
    if  health <50:
        print("You are unhealthy.")
    lock.acquire()
print("You are dead")

相关问题 更多 >

    热门问题