Spieleprogrammierung

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung.
UnrealEd, Level-Editor des Unreal Development Kit

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. Die meist verwendete Programmiersprache ist dabei C bzw. C++, da bei der Entwicklung von Spielen vor allem die Geschwindigkeit im Vordergrund steht. 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[Bearbeiten]

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 und automatisierten Erstellungsprozessen.

Planung[Bearbeiten]

Eine professionelle Spieleprogrammierung richtet sich nach dem Game-Design-Dokument. Aufgrund diesem 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[Bearbeiten]

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 begrenzten 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 die 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 noch verschiedene Tools programmiert, die vor allem für die Erstellung von grafischen Elementen vorgesehen sind, wie z. B. ein Level-Editor, mit dem Spielewelten erschaffen werden können.

Test[Bearbeiten]

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 mit Hilfe von bspw. 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[1], welches sich bspw. auf das Game oder Level Design zurückführen ließe oder 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 bspw. aus einer Verlosung heraus vergeben werden könnte.

Werkzeuge und Hilfsmittel[Bearbeiten]

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[Bearbeiten]

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
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

Programmierschnittstellen[Bearbeiten]

Grafik[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]

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 auf veröffentlicht werden können.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Balance (game design) (engl. WP)