Für mich bestand die erste Herausforderung bei der Entwicklung eines Videospiels darin, die grundlegende Struktur hinter dem Spiel zu verstehen. Obwohl ich in der Vergangenheit viele Spiele gespielt hatte, habe ich mich nie gefragt, wie sie tatsächlich funktionieren. Ich habe es einfach als selbstverständlich hingenommen. Deshalb möchte ich zunächst erklären, wie ein Spiel tatsächlich funktioniert, wobei es verschiedene Aspekte zu beachten gibt:
Game-Loops
Wenn man ein Spiel spielt, passiert im Grunde genommen Folgendes: Es gibt zwei Schleifenfunktionen,
die die gleichen Anweisungen immer wieder wiederholen, bis man das Spiel beendet.
Die erste Funktion ist für die gesamte Logik des Spiels verantwortlich. Hier werden die Positionen
des Spielers, der Gegner und der Geschosse berechnet, Kollisionen überprüft, die Gesundheit des Spielers
und der Gegner angepasst und so weiter.
Die zweite Funktion wird ausgeführt, nachdem die gesamte Logik berechnet wurde, und ist dafür verantwortlich,
alle Elemente auf dem Bildschirm anzuzeigen . Dazu gibt es zwei Buffer: den front buffer
und den back-buffer . Der front buffer enthält die Elemente die derzeit auf dem Bildschirm zu sehen sind.
Der Hintergrundpuffer ist der Ort, an dem alle Elemente nacheinander gezeichnet werden.
Nachdem alle Elemente auf den back buffer gezeichnet wurden, werden die beiden Puffer ausgetauscht.
Der Vorteil dieses Prozesses besteht darin, dass das neue Bild erst gezeigt wird, nachdem alles vollständig gezeichnet wurde,
anstatt dass alle Elemente nacheinander auf den Bildschirm gezeichnet werden.
Game Engine
Die Game Engine ist die wichtigste Software, die beim Erstellen eines Spiels verwendet wird, und dient als
Abstraktion von den Low-Level-Funktionen des Betriebssystems.
Man kann sich das Ganze als eine große Bibliothek vorstellen, die Funktionen bereitstellt, um Elemente leicht
auf dem Bildschirm darzustellen, Benutzereingaben zu lesen und zu verarbeiten, Audio zu handhaben, sich um die
Speicherverwaltung zu kümmern und vieles mehr.
Beliebte Game Engines sind zum Beispiel Unity, Godot oder die Unreal Engine.
Für dieses Projekt hat unser Gruppenmitglied Mika Herrmann seine eigene Game Engine von Grund auf entwickelt und
dabei verschiedene Bibliotheken wie OpenGL oder SDL verwendet. Mehr über seinen Beitrag kannst du
hier erfahren.
Du kannst dir jedoch vorstellen, dass dies die Entwicklung für mich etwas schwieriger gemacht hat, da es keine
Ressourcen im Internet gab. Ich musste Mikas Code verstehen und engen Kontakt zu ihm halten, um in der Lage zu sein,
das Spiel umzusetzen.
Objekt orientierte Programmierung (OOP)
Der letzte Teil, der den Großteil meiner Zeit in Anspruch genommen hat, war die objektorientierte Programmierung (OOP).
Alles, was im Spiel zu sehen ist, wird mithilfe von Klassen realisiert. Der Spieler, Gegner, Geschosse, die Spielwelt...
sind alle selbst definierte Klassen, die oft aus kleineren Unterklassen bestehen.
Was all diese Klassen gemeinsam haben, sind mehrere Methoden (onInit, onLoop, onRender, onClose), die entweder in den
beiden Haupt-Schleifen des Spiels aufgerufen werden oder wenn das Spiel geöffnet oder geschlossen wird.
Weitere Informationen zu den Hauptklassen findest du hier:
Spieler,
Gegner und
Schusssystem