代表 AI 反应时间的计时器

Timer to represent AI reaction times

我正在 pygame 为我的大学项目制作纸牌游戏,游戏的一个重要方面是游戏的 AI 如何对当前情况做出反应。我有一个函数可以在 2 个参数内随机生成一个数字,这就是我希望程序等待的时间。 我的 ai 上的所有代码都包含在一个 if 语句中,一旦调用,我希望程序等待生成的时间量,然后决定要做什么。 原来我有:

pygame.time.delay(calcAISpeed(AIspeed))

如果它没有在 AI 等待时暂停程序的其余部分,阻止用户与程序交互,这会很好地工作。这意味着我也不能使用 while 循环来创建我的计时器。

在不采用多线程或其他复杂解决方案的情况下解决此问题的最佳方法是什么?我的项目即将到期,我不想进行大量更改。我试过使用 pygame.time.Clock 函数将当前时间与生成的时间进行比较,但事实证明一旦执行操作后重置时钟很麻烦。

感谢您的帮助,期待您的意见。

解决这个问题的最简单方法是在你的 AI 中有一个名为 "wait" 的变量,并将其设置为一个随机数(当然,它必须根据你的程序速度进行调整......我将在下面的代码中解释。)。然后在您的更新函数中有一个条件等待查看等待数是否为零或以下,如果不是,则从中减去一定的时间。下面是一组基本代码来解释这个...

class AI(object):
def __init__(self):
    #put the stuff you want in your ai in here
    self.currentwait = 100
    #^^^ All you need is this variable defined somewhere
    #If you want a static number as your wait time add this variable
    self.wait = 100 #Your number here

def updateAI(self):
    #If the wait number is less than zero then do stuff
    if self.currentwait <= 0:
        #Do your AI stuff here

    else:
        #Based on your game's tick speed and how long you want
        #your AI to wait you can change the amount removed from
        #your "current wait" variable
        self.currentwait -= 100 #Your number here

为了让您了解上面发生的事情,您有一个名为 currentwait 的变量。此变量描述程序必须等待的剩余时间。如果此数字大于 0,则还有时间等待,因此不会执行任何操作。然而,时间将从该变量中减去,因此每次报价都需要等待的时间更少。您可以使用时钟节拍率来控制此速率。例如,如果您的时钟速率设置为 60,那么您可以通过将 currentwait 设置为 60 并在每个滴答中减去 1 直到数字达到零来让程序等待 1 秒。

正如我所说,这是非常基础的,因此您可能需要稍微更改它以适合您的程序,但它应该可以解决问题。希望这对您有所帮助,祝您项目顺利:)

另一种选择是在事件队列上创建一个定时器事件并在事件循环中监听它:How can I detect if the user has double-clicked in pygame?