© StonePictures/Shutterstock.com
Classic Games Reloaded

Neuronale Netzwerke spielen Tennis (Pong)


In diesem Artikel werden wir uns mit den Einsatzmöglichkeiten von diversen neuronalen Netzen im Rahmen des Spieleklassikers Pong auseinandersetzen und verschiedene Methoden evaluieren, mit deren Hilfe wir diese Netzwerke trainieren können. In diesem Zusammenhang richten wir unser Augenmerk einerseits auf die Steuerung der Schläger und andererseits auf die Wahrnehmung von bewegten und ruhenden Objekten innerhalb der Spielewelt.

Codebeispiel und Listings zum Download

Achtung: Das Beispielprojekt und die Listings zu diesem Artikel finden Sie in unserem GitHub Repository: https://github.com/EntwicklerMagazin/Entwickler-Magazin. Dort stehen auch die Codes zu den vorherigen Teilen der Serie bereit.

Der Autor stellt die Programmbeispiele außerdem unter www.graphics-and-physics-framework.spieleprogrammierung.net bereit.

Ungeachtet der Tatsache, dass es sich beim Spieleklassiker Pong bezüglich der Grafik und der Spielmechanik so ziemlich um das am einfachsten gestrickte Computerspiel handelt, besitzt es auch heutzutage noch zweifelsohne einen gewissen Unterhaltungswert. Gibt man sich, so wie in Abbildung 1 gezeigt, mit einer minimalistischen Grafik zufrieden, lässt sich besagtes Spiel beispielsweise in Form einer simplen Windows-Konsolenanwendung implementieren, die ohne zusätzliche Grafikbibliotheken lauffähig ist.

rudolph_spieleklassiker_1.tif_fmt1.jpgAbb. 1: Pong (Screenshot)

Ein einfacher Pong-Klon, der ohne großartigen Schnickschnack auskommt, kann selbst von einem Hobbyprogrammierer im Handumdrehen fertiggestellt werden. Auch die künstliche Intelligenz (KI), die für die Bewegungssteuerung eines der Schläger verantwortlich ist, lässt sich, wie nachfolgend demonstriert wird, mit Hilfe einiger weniger Source-Code-Zeilen implementieren:

  • Schläger in Richtung des Spielballs mitbewegen:

    PaddleVelocityX += PaddleAccelerationValue * (PlayBallPosX - PaddlePosX);
  • Geschwindigkeit begrenzen, mit der sich ein Schläger bewegen lässt:

    PaddleVelocityX = min(MaxAIPlayerPaddleVelocityX, PaddleVelocityX); PaddleVelocityX = max(MinAIPlayerPaddleVelocityX, PaddleVelocityX);
  • Bewegung des Schlägers ausklingen lassen:

    PaddleVelocityX *= PaddleDecelerationValue;
  • Neue Position des Schlägers berechnen:

    PaddlePosX += PaddleVelocityX;

Ein zweites Verfahren, mit dessen Hilfe sich die optimale Bewegungsrichtung eines Schlägers ermitteln lässt, können Sie Abbildung 2 entnehmen.

rudolph_spieleklassiker_2.tif_fmt1.jpgAbb. 2: Optimale Bewegungsrichtung des Schlägers ermitteln

Hierzu benötigen wir einerseits den Geschwindigkeitsvektor (v) des Spielballs und anderer...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang