2016-05-18 18 views
0

我在pygame中爲我的大學項目創建了一個紙牌遊戲,遊戲的一大方面就是遊戲的AI如何對當前情況做出反應。我有一個函數可以在2個參數中隨機生成一個數字,這就是我希望程序等待的時間。 我的ai中的所有代碼都包含在if語句中,並且一旦被調用,我希望程序等待生成的時間量,然後決定要做什麼。 我原本:代表AI反應時間的計時器

pygame.time.delay(calcAISpeed(AIspeed)) 

這將很好地工作,如果它沒有暫停而AI正在等待程序的其餘部分,與該程序進行交互停止用戶。這意味着我不能使用while循環來創建我的計時器。

解決這個問題的最佳方法是不使用多線程或其他複雜的解決方案?我的項目即將到期,我不想做大的改變。我試過使用pygame.time.Clock函數來比較當前時間和生成的時間,但是一旦操作完成後重新設置時鐘已經證明很麻煩。

感謝您的幫助,我期待您的意見。

回答

0

最簡單的方法是在你的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秒鐘。

就像我說的這是非常基本的,所以你可能不得不改變它以適應你的程序,但它應該做的伎倆。希望這可以幫助你,祝你好運與您的項目:)

+0

太感謝你了,你是一個天賜之物:) – HuntingForIrish