我在为大学项目使用pygame创建一张卡牌游戏,游戏的一个重要方面是AI如何对当前情况做出反应。我有一个函数可以随机生成两个参数之间的数字,我希望程序等待这个生成的时间长度。我的AI代码全部包含在一个if语句中,一旦被调用,我希望程序等待生成的时间,然后决定接下来做什么。最初我使用的是:
pygame.time.delay(calcAISpeed(AIspeed))
如果不是在AI等待时暂停了程序的其他部分,阻止用户与程序互动,这将是一个很好的解决方案。这意味着我不能使用while循环来创建我的计时器。
在不涉及多线程或其他复杂解决方案的情况下,绕过这个问题的更好方法是什么?我的项目即将到期,我不想做大幅度的更改。我尝试使用pygame.time.Clock函数来比较当前时间和生成的时间,但是一旦操作完成后重置时钟证明是麻烦的。
感谢您的帮助,我期待您的意见。
回答:
解决这个问题的简单方法是在您的AI中添加一个名为“wait”的变量,并将其设置为一个随机数(当然,您需要根据程序速度进行调整…我将在下面的代码中解释)。然后在您的更新函数中添加一个条件,检查这个等待数是否为零或更低,如果不是,则从中减去一定的时间。下面是一段基本代码来解释这个方法…
class AI(object):def __init__(self): #在这里放入您想要的AI内容 self.currentwait = 100 #^^^ 您只需要在这里定义这个变量 #如果您想要一个静态的等待时间,请添加这个变量 self.wait = 100 #在这里输入您的数字def updateAI(self): #如果等待数小于或等于零,则执行操作 if self.currentwait <= 0: #在这里执行您的AI操作 else: #根据您的游戏tick速度和您希望AI等待的时间 #您可以更改从“current wait”变量中减去的数量 self.currentwait -= 100 #在这里输入您的数字
为了让您了解上面的情况,您有一个名为currentwait的变量。这个变量描述了程序还需要等待的时间。如果这个数字大于0,则仍有等待时间,因此不会执行任何操作。然而,时间会从这个变量中减去,因此每次tick等待的时间都会减少。您可以通过使用时钟tick率来控制这个速率。例如,如果您的时钟速率设置为60,那么您可以通过将currentwait设置为60,并在每次tick时减去1,直到数字达到零,使程序等待1秒钟。
正如我所说,这非常基础,因此您可能需要稍作调整以适应您的程序,但它应该能解决问题。希望这对您有帮助,祝您的项目好运 🙂