Ich fange also an, Java und OpenGL zu lernen, während ich LWJGL benutze. Zu Beginn schreibe ich einen Klon des Atari Pong. Ich habe den Spielbildschirm und die Kollisionserkennung korrekt eingerichtet und das ganze Spiel funktioniert größtenteils. Wenn es ein Spiel für 2 Spieler wäre, würde ich es jetzt machen, aber da ich vorhabe, dies als Einzelspielerspiel zu machen Ich muss mir eine einfache KI ausdenken, um den zweiten Spieler zu kontrollieren.
Zu wissen, wo der Ball schlagen wird, scheint ziemlich trivial, und eine KI zu erstellen, die immer auf den Ball trifft, scheint eine einfache Sache zu sein, aber ich möchte, dass das Spiel gewonnen werden kann, daher kann ich die IA nicht immer zum Erfolg führen Ball.
Hier ist meine Frage, wie ich dies codieren soll, um der KI menschenähnliche Unvollkommenheiten hinzuzufügen. Sollte ich nach dem Zufallsprinzip entscheiden, ob die KI an einem bestimmten Punkt versagt? Oder gibt es eine klügere (oder einfach nur offensichtliche) Sache, die mir hier fehlt?
Vielen Dank.
Antworten:
Meine bevorzugte unvollkommene Pong-KI ist brutal einfach, aber man kann ein paar ziemlich nette KI-Fehler machen.
Unsichtbarer Ball AI
KI-Setup : Wenn der Ball von Ihrem Paddel reflektiert wird, wissen Sie, wo er ist und wie schnell er ist. Bringe an diesem Punkt einen unsichtbaren Ball hervor, aber mit einer höheren Geschwindigkeit. Es wird dort landen, wo der sichtbare Ball hingeht. Lassen Sie die KI in jedem Frame auf die Position des unsichtbaren Balls zugehen. Halten Sie den unsichtbaren Ball an, sobald er die Seite der KI erreicht, und bewegen Sie dort das Paddel.
Ergebnisse : Die KI scheint zu versuchen, den Weg des Balls vorherzusagen. Angenommen, der Spieler hat den Ball in einem steilen Winkel reflektiert, sodass er von einer Wand abprallt. Die KI wird den Ball ein Stück weit verfolgen und dann - langsamer als der Ball - nicht schnell genug zurückfinden. Sie haben die KI ausgetrickst und es sieht aus menschlicher Sicht ziemlich logisch aus. Sie können sehen, wie der Computer versucht, die Richtung des Balls vorherzusagen, und dann - oh, es hat gefehlt, es war zu langsam, und Sie haben einen Punkt gewonnen.
Dies ist deutlich besser als das Einfügen von Zufälligkeiten, da die KI dadurch relativ intelligent aussieht. Ein würdiger Gegner. Außerdem kann die KI nach genau den gleichen Regeln wie der Mensch spielen, was für den Spieler besser aussieht und Ihre Arbeit erleichtert.
Einstellungen : Sie können auch die Geschwindigkeit des unsichtbaren Balls anpassen, da dadurch festgelegt wird, wie weit die KI im Voraus plant. Je schneller der unsichtbare Ball ist, desto länger muss sich das Paddel bewegen, um zu blocken, und desto besser muss der Spieler zielen.
quelle
Die Pong-Spiele, die ich gespielt habe, scheinen sich wie folgt zu verhalten: Das KI-gesteuerte Paddel weiß, wo der Ball schlagen wird, aber es ist begrenzt, wie schnell es diese Position erreichen kann. So fehlt es manchmal. Ich denke, das ist der naheliegendste Weg, das zu tun.
quelle
Als ich auf meinem TI83 einen ach so tollen Fast-Pacman-Klon erstellt habe? Rechner, das größte Problem, auf das ich stieß, war, dass die "Geister" viel zu schnell waren. Ich musste sie irgendwie verlangsamen. Also habe ich eine große alte Sünde (cos (tan (x-Koordinate)) hineingelegt. Einfachere Ebenen würden diese Berechnung einige Male durchführen, und schwierigere Ebenen würden nur eine der Operationen ausführen.
Der Punkt ist, REAKTIONSZEIT. Ermitteln Sie, was eine typische menschliche Reaktionszeit ist, und fügen Sie 10 ms hinzu. Verwenden Sie das als Ausgangspunkt. Wenn die Levels härter werden, entfernen Sie die Zeit aus der Reaktionszeit ... was
Thread.sleep(time);
für die KI einfach sein kann . Warten Sie so lange, bis sich die KI in Bewegung setzt.Sie können auch steuern, wie schnell sich das Paddel bewegt, oder, wenn Sie WIRKLICH kompliziert werden möchten, bestimmen, wo der Ball auf unterschiedlichen Informationsgraden basiert ... sagen wir nur 2 Pixel statt eines Vektors. Fügen Sie den Wänden Winkelmodifikatoren hinzu, um ein gewisses Maß an Zufälligkeit hinzuzufügen, wodurch die KI gezwungen wird, eine Neuberechnung durchzuführen.
quelle
sin(cos(tan(x)))
?Wenn Sie einfach das Paddel verlangsamen, verfehlt der Computer fast immer, wenn Sie den Ball in einem spitzen Winkel schlagen (dh wenn Sie sich viel auf und ab bewegen, anstatt direkt auf die andere Seite), da sich der Ball auf und ab bewegt schneller als das Paddel ausgleichen kann.
Stattdessen würde ich mit der Geschwindigkeit des Paddels und dem Punkt, an dem die KI reagiert, spielen. Beispielsweise:
Eine andere Sache zu ändern ist, wie die KI reagiert. Sie haben eine Strategie hervorgehoben, bei der sich das Paddel immer an die Position bewegt, an der sich der Ball befinden wird. Eine Person kann das nicht immer tun. Es ist wahrscheinlicher, dass sie dem Ball auf und ab folgen, ohne zu wissen, wo genau der Ball sein wird, wenn er zu ihnen kommt, aufgrund all der Sprünge.
Eine menschlichere Reaktionsmethode ist es daher, sich immer auf den Ball zuzubewegen. Wenn sich der Ball zum Beispiel nach oben bewegt, bewegt sich das Paddel nach oben. Wenn das Paddel schnell genug ist, kann es auf das Abprallen von oben und unten reagieren. Wenn das Paddel nicht schnell genug ist, wird es überkompensiert, indem es sich nach oben bewegt, wenn sich der Ball nach oben bewegt. Wenn es jedoch springt, kann sich das Paddel möglicherweise nicht schnell genug nach unten bewegen.
Schließlich können Sie auch mit der Paddelgröße spielen, um den Schwierigkeitsgrad zu erhöhen oder zu verringern.
quelle
Ein zu berücksichtigender Faktor ist die Zufälligkeit. Menschliche Spieler haben immer ein gewisses Maß an Variation in ihrem Spiel. Wenn Ihre KI also menschlich wirken soll, möchten Sie auch Variation in ihrem Spiel haben.
Sie können Bereiche einrichten für:
Dann kann die KI bei jedem Treffer des Gegners einen Wert innerhalb dieser Bereiche auswählen und darauf basierend ihre Entscheidungen (und Bewegungen) treffen. Für leichtere KI-Gegner können Sie diese Reichweiten alle ziemlich schlecht machen, aber Sie können auch große Reichweiten haben, um der KI ein paar "Glücksschüsse" zu geben. Für schwierigere Gegner können Sie diese Bereiche verschärfen und sie alle in den "guten" Bereich versetzen.
quelle
Ich werde eine allgemeinere Lösung vorschlagen, die nicht nur für Pong spezifisch ist. Ich glaube, das kann auf jedes Spiel angewendet werden - nicht nur auf Pong. Du willst ein menschliches Verhalten, oder? Damit ein Mensch das Gefühl hat, ein Mensch zu sein ... und daher im weiteren Sinne auf einen Sieg hoffen kann. Also, was machst du?
Beobachte einen Menschen! Wie kann ein Spieler bei Pong verlieren? Nun, wenn wir zwei Pong-Spieler sehen, ist das ganz offensichtlich. Normalerweise liegt der Verlust daran, dass der Ball einfach zu schnell ist und die Reaktionszeit des Spielers verzögert wurde. Das sind zwei Parameter, von denen einer einstellbar ist. Das andere ist die Fähigkeit des Spielers, die richtige Richtung einzuschlagen. Sie haben also eine Fehlerfrequenz und eine Reaktionsfrequenz - beide können je nach Schwierigkeitsgrad eingestellt werden.
Eine einfache KI hätte eine höhere Eingangsverzögerung und eine größere Tendenz, zufällige Fehler zu machen - wobei eine schwierigere KI so abgestimmt wäre, dass diese Parameter schwierig wären.
Dies kann auf nahezu jedes Spiel angewendet werden - auch auf ein Tic Tac Toe-Spiel oder komplexere Modelle. Dieser Ansatz funktioniert in komplizierteren Szenarien, ist jedoch ausreichend, wenn die Anzahl der Parameter und der Umfang der Spiele gering ist.
quelle
Hier ist eine Liste einiger Optionen, von denen einige bereits behandelt wurden:
quelle
Ich habe auch einen kleinen Pong-Klon gemacht (in LUA).
Meine KI ist sehr einfach, aber es ist nicht so schlimm, imho.
Ich überprüfe nur die y-Position des Balls und wenn ich niedriger bin, bewege ich das Paddel nach unten, wenn höher, bewege ich das Paddel nach oben.
Zur Feineinstellung des Schwierigkeitsgrades vergrößere oder verkleinere ich dann den Abstand zum Ball, von dem aus sich das Computerpaddel zu bewegen beginnt.
quelle