Spieleprogrammierung
# Spieleprogrammierung

Spieleprogrammierung bezeichnet den Vorgang für die Programmierung eines Computerspiels und ist Teil der Spieleentwicklung. In den meisten Fällen kommt eine bereits existierende Spiel-Engine (kurz „Engine“) zum Einsatz. Bedeutende Ausnahmen sind z. B. Minecraft und Starbound.

Der wichtigste Faktor für die Auswahl der zur Anwendung kommende(n) Programmiersprache(n) ist meistens die Engine selbst, da die Integration mit dem bestehenden Code der Engine erheblich erschwert werden würde, wenn der neue, spiel-spezifische Code nicht in (einer) der primär unterstützen Sprache(n) geschrieben werden würde. Viele Engines bieten zudem (oftmals spezialisierte) Skriptsprachen und Drag-and-Drop-Baukastensysteme an, um die Entwicklung der Spiellogik einfacher und mit weniger Expertise als bei der Verwendung einer mächtigeren Allzweck-Programmiersprache möglich zu machen.

## 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 größtenteils 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 mithilfe 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 dem offiziellen 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 vergeben werden kann.

## Werkzeuge und Hilfsmittel

Prinzipiell kommen bei der Spieleprogrammierung die gleichen Werkzeuge wie bei der sonstigen Softwareentwicklung zum Einsatz. Engines bieten allerdings oftmals eine eigene IDE an, die zusätzlich zur Programmierung selbst weitere Aufgaben der Spielentwicklung integriert. Zusätzlich kommen, je nach Engine, spezialisierte Skriptsprachen zum Einsatz, insbesondere für die Spiellogik.

## 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. Eine Ausnahme stellt dabei Xbox Live Indie Games dar, da dort verhältnismäßig einfach Spiele veröffentlicht werden können.

