Spieleprogrammierung
Spieleprogrammierung ist ein Teil der Spieleentwicklung und bezeichnet den Vorgang für die Programmierung eines Computerspiels. Computerspiele werden für die verschiedensten Plattformen wie PCs, Spielkonsolen oder Smartphones entwickelt. Häufig verwendete Programmiersprachen sind dabei C, C++ und Java. Vor allem anspruchsvolle Spiele benötigen einen möglichst direkten und effizienten Zugriff auf die Hardware des Systems, dies gilt insbesondere für die Grafikhardware. Für den PC und mittlerweile auch andere Plattformen wurden spezielle APIs für diesen Zweck entwickelt. Die beiden bekanntesten für den Zugriff auf die Grafikhardware sind DirectX und OpenGL. Da sich diese APIs jedoch nur auf das Notwendigste beschränken, entstanden im Laufe der Zeit viele Programmbibliotheken, wie z. B. Allegro, SDL, SFML, die auf DirectX oder OpenGL aufbauen.
Entwicklungsprozess
Für ein modernes kommerzielles Computerspiel schreiben oft bis zu 30 Programmierer schätzungsweise über eine Million Zeilen Quellcode. Dies erfordert eine gute Projektplanung sowie den Einsatz von Versionsverwaltungssoftware, Bugtrackern, automatisierten Erstellungsprozessen und Spiele-Engines.
Planung
Eine professionelle Spieleprogrammierung richtet sich nach dem Game-Design-Prinzip. Aufgrund dessen werden detailliertere Pläne für die Implementierung der Spielfunktionen erstellt. Die meisten Phasen der Entwicklung werden mehrmals durchlaufen, da sich in allen Phasen immer wieder Änderungen ergeben. Auf solche Änderungen schnell reagieren zu können, ist von besonderer Wichtigkeit für das ganze Projekt.
Umsetzung
Der Quellcode für ein Computerspiel ist im Normalfall nach einem Schichtenmodell aufgebaut. Am unteren Ende stehen die Treiber, sie bieten den direkten Zugriff auf die Hardware. Darüber steht eine hardwarenahe API wie z. B. DirectX oder OpenGL, die vom wohl wichtigsten Element im ganzen Spielprojekt verwendet wird, der darüberliegenden Spiel-Engine, die sich hauptsächlich aus der Grafik-Engine, einer Sound-Engine, einer möglichen Physik-Engine und weiteren Systemen für Kollision, Animation, Steuerung, Netzwerk usw. zusammensetzt und den Kern des Spiels bildet. Eine Spiel-Engine wird meist für mehrere Spiele verwendet und ist deshalb in begrenztem Rahmen universell verwendbar. Als über der Spiel-Engine liegenden Teil kann man das Scripting-System betrachten, das eine Scriptsprache zur Verfügung stellt und Teile der Spiel-Engine verwendet, aber nur in speziellen Bereichen eingesetzt wird. Den Abschluss bildet dann der Quellcode für die Spiele-Logik, der individuell für das jeweilige Computerspiel geschrieben wird.
Zusätzlich werden speziell für die Entwicklung (und ggf. die Erweiterung) von Spielen bestimmte Werkzeuge geschrieben. Diese helfen bei der Erstellung von Elementen, welche im Spiel häufig wiederkehren, aber individuell aufgebaut und angepasst werden müssen, etwa grafische Elemente oder ganze Level. Eine Implementierung auf Programmiersprachen-Ebene ist hier zu aufwendig und unübersichtlich; eigens erzeugte WYSIWYG-Editoren (beispielsweise Level-Editoren) ermöglichen eine einfachere und effektivere Erzeugung der entsprechenden Inhalte.
Test
Die genaue Vorgehensweise beim Testen kann sich von Entwickler zu Entwickler unterscheiden. Seitens Programmierung können aus der Softwareentwicklung bekannte Vorgehensweisen wie Testgetriebene Entwicklung verwendet werden.
Häufig werden zum Testen der Spiele speziell dafür beschäftigte Tester beauftragt, welche sich um die Planung, Koordinierung und Durchführung der Tests kümmern. Im Gegensatz zu den Programmierern, welche beispielsweise mit Hilfe von Modultests die Bestandteile des Spiels einzeln testen können, erhalten die Tester eine gebaute Version des Spiels, welche ohne tiefere Kenntnisse der Interna auf Fehler geprüft wird (siehe Black-Box-Test).
Abhängig von der Art des Spiels, häufig aber wenn ein Mehrspielermodus den Kern des Spiels darstellt, werden Alpha- und Betatests verwendet, bei der Spieler die Möglichkeit erhalten, das Spiel vor Erscheinen bereits zu spielen. Entwickler sind dabei an auftretenden Fehlern oder Problemen interessiert, da diese dann ggf. noch vor Release des Spiels behoben werden können. Zu den möglichen Problemen gehören Fehler im Spiel selbst (siehe Programmfehler), ein unausgewogenes Balancing, welches sich bspw. auf das Game- oder Level-Design zurückführen ließe oder auf eine Überforderung der Hardware durch zu geringe Rechenleistung oder Netzwerkbandbreite. Die Alpha- und Betatestphasen können öffentlich oder geschlossen sein und werden dann entweder als „open“ oder „closed Alpha/Beta“ bezeichnet. Bei einer öffentlichen Testphase haben die Spieler meist während der gesamten Phase die Möglichkeit, daran ohne größere Umstände teilzunehmen, während bei einer geschlossenen Teilnahme meist eine Einladung erforderlich ist, die unter anderem aus Verlosungen heraus vergeben werden kann.
Werkzeuge und Hilfsmittel
Der Quellcode für ein Computerspiel kann mit jedem beliebigen Texteditor geschrieben werden und anschließend mit einem Compiler kompiliert werden. Für einen professionellen und effektiven Arbeitsprozess ist eine integrierte Entwicklungsumgebung, wie MS Visual Studio, Eclipse, Netbeans, Xcode usw., die eine Vielzahl an Hilfsmittel für das Entwickeln von Software bieten, unverzichtbar.
Programmiersprachen
Die wichtigsten Entscheidungsfaktoren für die Wahl der zu verwendenden Programmiersprachen sind die Geschwindigkeit, der Arbeitsaufwand, die Zielplattformen und die Sprachen in den verwendeten APIs und Programmbibliotheken.
Sprache | Stärken | Schwächen |
---|---|---|
Assembler | schnell | fehleranfällig, langsame Entwicklung, schwierig für Anfänger, nicht portierbar |
C | hoher Bekanntheitsgrad, zahlreiche Tools | keine integrierte OO, problematisch für große Projekte oder mehrere Plattformen |
C++ | integrierte OO, meist verwendet, zahlreiche Tools | keine integrierte GC, oder Schutz vor Speicherlecks |
C# | sehr OO, RAD-Sprache, einfach zu verwenden | hoher Speicherverbrauch, dekompilierbar |
Java | sehr OO, einfach zu verwenden, portabel | auf Spielkonsolen generell nicht verfügbar, dekompilierbar |
Eiffel, Smalltalk, Ada etc. | selten verwendet, wenige Spieleentwicklungs-Tools | |
Scriptsprachen wie Lua, Python etc. | oft verwendet für Gameplay-Scripting, aber nicht für den Hauptteil des Spiel-Quellcodes | |
Shadersprachen wie Cg, HLSL, GLSL etc. | nahezu unverzichtbar für die moderne 3D-Spieleprogrammierung, wird aber nicht für den Hauptteil des Spiel-Quellcodes verwendet |
Grafik
Um auf dem jeweiligen Endgerät die notwendigen Zeichenoperationen zur Ausführung zu bringen, welche für die Darstellung des Spielinhalts sorgen, werden Schnittstellen angesprochen. Der Treiber der Grafikkarte oder einer vergleichbaren Einheit mit Grafikprozessor stellt die Funktionalitäten der Grafikhardware dem Betriebssystem zur Verfügung, welche, abhängig vom System, über DirectX oder OpenGL heraus angesprochen werden können. Weiterhin gibt es viele Frameworks, die diese Funktionalitäten und Systemfunktionalitäten abstrahieren und über eine einheitliche Schnittstelle zur Verfügung stellen, wie SFML, SDL, Allegro, XNA, LibGDX, OGRE oder Irrlicht.
Physik
Viele Spiele verwenden intern physikalische Simulationen, welche mehr oder weniger realistisch die Bewegung von Objekten, deren Kollisionen und Verbindungen und diverse andere Dinge berechnen. Bibliotheken, die diese Berechnungen übernehmen, nennen sich Physik-Engine.
Spieleprogrammierung als Hobby
Die meist verwendeten Plattformen für die Hobbyentwicklung sind Betriebssysteme für den PC und für Mobiltelefone, wie Windows, Linux, Android (Betriebssystem) oder iOS, da die Entwicklung für diese Geräte entweder keine Lizenz erfordern oder diese verhältnismäßig einfach und günstig zu erhalten ist. Spielkonsolen sind seltener Ziel von Spielprojekten, da für die Entwicklung, für das Ausführen auf einem Testgerät und/oder für den Vertrieb Entwicklerlizenzen erforderlich sind, welche mit Kosten verbunden sind und häufig nur an Unternehmen, nicht aber an Privatpersonen, vergeben werden. Ausnahmen stellen dabei Xbox Live Indie Games oder Open Source Konsolen wie die Ouya dar, da dort verhältnismäßig einfach Spiele veröffentlicht werden können.
Siehe auch
Weblinks
- Deutschsprachige Community mit Forum und Wiki zum Thema Spieleprogrammierung
- Deutschsprachiges Forum zum Thema Spieleentwicklung und Spieleprogrammierung
- Deutschsprachige Community zum Thema Spieleentwicklung und Spielepräsentation
- Einführung in die Spieleentwicklung und Spieleprogrammierung
- Spiele programmierung lernen - Tipps, Tricks, Links und Artikel zum Thema
- Webbasierte Lernumgebung Spielprogrammierung mit Java (deutsch)