AI-Frage
Übersicht

NoneXBetreff: AI-Frage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versuche gerade ein kleines Airhockey game zu programmieren, habs jetzt fast schon so weit das es richtig Spielbar ist. Mir fehlt noch eine richtige AI. Jetzt weiß ich nicht wie man eine richtige AI macht.
Hatte beim ersten mal einfach xB (x-Koordinate des gegners)=xP (x-Koordinaten des Puks). Leider ergibt sich ja da das Problem das man nicht gewinnen kann. Hab dann ein bisschen im Forum gesucht aber nichts wirklich konkretes gefunden. Nur das sich eine einfache AI mit rnd machen lässt. Jetzt zu meinem Problem: Ich bekomme es einfach nicht hin. Hier der Code: Ganzer Code: BlitzBasic: [AUSKLAPPEN] Graphics 1280,720,16,0 Mein AI-Versuch: BlitzBasic: [AUSKLAPPEN] AI = Rand (1,6) Problem: .Spiel hängt sich auf Vorheriger Versuch: BlitzBasic: [AUSKLAPPEN]
Problem: .funktioniert aber der Gegner hüpft hin und her Wäre sehr nett wenn mir es jemand erklären könnte,wie man das mit der AI hinbekommt ^^ Lg NoneX |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun, es gibt ein Problem, was du nicht bedenkst:
BlitzBasic: [AUSKLAPPEN]
Du übergiebst die Koordinaten des Puks an die des Gegners und rechnest nach was drauf. Dass der Gegner dann springt ist klar. Ich würde dir zu sowas raten: Dem Gegner eine bestimmte Geschwindigkeit zu geben, sagen wir 10. Dann schreibst du (Pseudocode): BlitzBasic: [AUSKLAPPEN] If xP > xB Then xB = xB + SpeedB Dadurch wird die Bewegung des Gegners abhängig von seiner Position neu berechnet. Das sieht besser aus und ist auch fairer dem Spieler gegenüber. Lg, M0rgenstern |
||
NoneX |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke,
hab nun noch eine Frage zur AI. Mit dem Code den du mir beschrieben hast schiesst mein gegner den ball nur gerade zurück (auser er ist zu langsam), Ist es möglich es so zu schreiben das es z.B.: 5 weiter fährt damit es auch manchmal schräg zurück spielt Lg NoneX |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, das ist jetzt nicht mehr schwer.
Da gibt es zwei Möglichkeiten: Entweder, du rechnest immer eine Toleranz drauf: BlitzBasic: [AUSKLAPPEN] If (xP+Rand(0,15)) > xB Then xB = xB + SpeedB Oder du machst es folgendermaßen: Du deklarierst eine Variable, sagen wir Toleranz = 10 und Toleranz2. Dann deklarierst du eine Variable, sagen wir SchlagZufall Vor der Bewegung des Gegners machst du dann folgendes: BlitzBasic: [AUSKLAPPEN] Schlagzufall = Rand(0,1) Bei Möglichkeit 1 ist es wahrscheinlicher, dass er den Ball nie genau anholt und bei Möglichkeit 2 besteht ne 50/50 Chance. Bitte am anfang SeedRnd Millisecs() nicht vergessen (also ganz am Anfang von COde). Kann sein, dass du mit den Werten hantieren musst, dass der SChläger nicht zu weit vom Puk entfernt ist. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group