2016-05-18 13 views
0

Ich erstelle ein Kartenspiel in pygame für mein College-Projekt, und ein großer Aspekt des Spiels ist, wie die KI des Spiels auf die aktuelle Situation reagiert. Ich habe eine Funktion, um zufällig eine Zahl innerhalb von 2 Parametern zu erzeugen, und so lange möchte ich das Programm warten. Der gesamte Code auf meinem Ai ist in einer If-Anweisung enthalten, und sobald ich angerufen habe, möchte ich, dass das Programm die generierte Menge an Zeit wartet, und dann seine Entscheidung treffen, was zu tun ist. Ursprünglich hatte ich:Timer um AI Reaktionszeiten darzustellen

pygame.time.delay(calcAISpeed(AIspeed)) 

Diese gut funktionieren würde, wenn es nicht den Rest des Programms, während der KI wartet Pause hat, den Benutzer zu stoppen mit dem Programm interagieren. Das bedeutet, dass ich keine while-Schleifen verwenden kann, um meinen Timer zu erstellen.

Was ist der beste Weg, um dies zu umgehen, ohne in Multi-Threading oder andere komplexe Lösungen zu gehen? Mein Projekt ist in Kürze fällig und ich möchte keine massiven Änderungen vornehmen. Ich habe versucht, pygame.time.Clock-Funktionen zu verwenden, um die aktuelle Zeit mit der generierten Uhr zu vergleichen, aber das Zurücksetzen der Uhr, nachdem die Operation ausgeführt wurde, hat sich als problematisch erwiesen.

Danke für die Hilfe und ich freue mich auf Ihre Eingabe.

Antwort

0

Der einfachste Weg wäre, eine Variable in der KI zu haben, die etwas wie "warten" heißt und auf eine zufällige Zahl setzt (natürlich muss sie auf Ihre Programmgeschwindigkeit angepasst werden ... ich werde erklären Sie im folgenden Code.). Dann haben Sie in Ihrer Update-Funktion eine Bedingung, die wartet, um zu sehen, ob diese Wartezahl Null oder unter ist, und wenn nicht eine bestimmte Zeit davon abziehen. Unten finden Sie eine Reihe von grundlegenden Code ist dies zu erklären ...

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 

Sie eine Vorstellung davon zu geben, was oben los ist, haben Sie eine Variable mit dem Namen currentwait. Diese Variable beschreibt die Zeit, die das Programm warten muss. Wenn diese Zahl größer als 0 ist, muss noch gewartet werden, damit nichts ausgeführt wird. Die Zeit wird jedoch von dieser Variable abgezogen, so dass bei jedem Tick weniger Zeit zum Warten ist. Sie können diese Rate mithilfe der Taktfrequenz steuern. Wenn Sie zum Beispiel die Taktrate auf 60 eingestellt haben, können Sie das Programm 1 Sekunde warten lassen, indem Sie currentwait auf 60 setzen und 1 jedes Häkchen abziehen, bis die Zahl Null erreicht.

Wie ich schon sagte, das ist sehr einfach, so dass Sie es wahrscheinlich ändern müssen, um Ihr Programm leicht anzupassen, aber es sollte den Trick machen. Hoffe, das hilft Ihnen und viel Glück mit Ihrem Projekt :)

+0

Thank you so viel, du bist ein Gott seiend :) – HuntingForIrish

Verwandte Themen