我在pygame中为我的大学项目创建了一个纸牌游戏,游戏的一个重要方面是游戏的AI如何对当前的情况作出反应。我有一个函数可以在2个参数中随机生成一个数字,这就是我希望程序等待的时间。 我的ai上的所有代码都包含在if语句中,一旦调用,我希望程序等待生成的时间,然后决定该怎么做。 原来我有:
pygame.time.delay(calcAISpeed(AIspeed))
如果AI在等待时没有暂停其余程序,阻止用户与程序交互,这将很有效。这意味着我不能使用while循环来创建我的计时器。
在不进入多线程或其他复杂解决方案的情况下,解决此问题的最佳方法是什么?我的项目即将到期,我不想做出大规模的改变。我已经尝试使用pygame.time.Clock函数来比较当前时间与生成的时间,但是一旦执行了操作就重置了时钟已经证明很麻烦。
感谢您的帮助,我期待您的意见。
答案 0 :(得分:0)
最简单的方法就是在AI中设置一个变量,称为“等待”并将其设置为随机数(当然它必须调整到你的程序速度......我会解释在下面的代码中。)。然后在您的更新函数中有一个条件,等待查看该等待数是零还是低于,如果没有从中减去一定的时间。下面是一组基本代码来解释这个......
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并使每个tick减1来使程序等待1秒,直到该数字达到零。
就像我说这是非常基本的,所以你可能需要改变它以适应你的程序,但它应该做的伎俩。希望这可以帮助您,并祝您的项目好运:))
答案 1 :(得分:0)
另一个选项是在事件队列上创建一个计时器事件,并在事件循环中监听它:How can I detect if the user has double-clicked in pygame?