www.codeworx.org/game-dev/Ich will PC-Spiele programmieren: Was jetzt?

Ich will PC-Spiele programmieren: Was jetzt?

Von Daniel Deischl

Welcome...

OK, du willst Spiele programmieren. Du hast aber keine Ahnung was auf dich zu kommt? Dann bist du hier genau richtig! Ich werde dir heute zeigen, was es bedeutet Spiele zu programmieren, was du brauchst und beachten solltest. Du hast dir kein leichtes Hobby ausgesucht.

Teil 1: Let’ s get it on!

Was man benötigt:
1. Zum Programmieren brauchen wir zweierlei Dinge. Da währe erst mal die Entwicklungsumgebung wie Microsofts Visual C++ (6). In einigen Büchern gibt es auch eine Autorenversion, wenn auch mit einigen lizenziellen Einschränkungen – das reicht aber erst mal vollkommen. Übrigens ist Visual C++ 6 die beliebteste Entwicklungsumgebung bei der Spiele- Programmierung, da es überdies ein Haufen Tools enthält, die im Laufe der Entwicklung sehr nützlich sein könnten.
2. Dann brauchen wir noch einen Compiler/Linker. Dieser Macht aus den Befehlen der Programmiersprache (dazu später mehr) binären Code(Nullen/Einsen). Damit kann Windoof – äh Windows aber nicht viel anfangen. Hier kommt dann der Linker ins Spiel. Dieser macht aus unserem binären Code eine ausführbare Datei (*.exe für eng. execution z. dt. Ausführung).
3. Soviel zum eigentlichen Programmierung. Willst du Spiele programmieren, brauchst du noch das DirectX (7) SDK (Software Development Kit).
4. Solltest du nicht mit einem Grafiker zusammenarbeiten (wollen – warum auch immer), brauchst du noch ein Grafikprogramm (2D) und/oder einen Modeller (3D). Die Preise reichen von kostenlos bist 25.000 DM! Das ist aber übermäßig viel. Die meisten professionellen Spieleschmieden benutzen 3D Studio MAX. Ist eigentlich auch zu teuer. Ich denke TrueSpace 4 oder AC3D sind für ihren niedrigen Preis ziemlich gut.
5. So jetzt noch eine Coke und es kann losgehen.

Was bedeutet Programmieren genau:
Programmieren bedeutet, dass du deinem Computer, mit Hilfe von einem Betriebssystem (OS), Befehle erteilst. Das läuft so ab, dass du erst mal einen Quellcode (kurz Code) schreibst. Dieser besteht aus englischsprachigen Befehlen, mit denen du versuchst, Algorithmen zu formulieren. Ein simpler Algorithmus währe beispielsweise die Umrechnung von DM in Euro...hier ein Beispiel in Pseudocode:

 
ES SEI DIE VARIABLE EUROKURS MIT DEM WERT 1,5
ES SEI DIE VARIABLE EINGABE (OHNE EINEN WERT)
LASS DEN ANWENDER EINEN WERT EINGEBEN (DM) UND GEBE DER VARIABLE EINGABE DEN WERT, DER EINGEGEBEN WURDE
DIVIDIERE DEN WERT DURCH DIE VARIABLE EUROKURS
GEBE DAS ERGEBNIS AUS

In (DOS) C++ sähe das so aus:

double Eurokurs = 1.5;
int Eingabe;
cin>>Eingabe; Eingabe = Eingabe / Eurokurs;
cout<<Eingabe;


OK, das ist ein sehr simpler Algorithmus. Jetzt müssten wir diesen Kompilieren, d.h. in Nullen und Einsen umsetzten, und anschließend linken(s.o.).

Das Programmieren lernen:
Die erste – und für viele schwierige Entscheidung, ist die Wahl der zu lernenden Programmiersprache. Ich werde dir ein paar, mehr unterschiedliche, Programmiersprachen vorstellen:

Assembler:
Der Code dieser Programmiersprache ist sehr nah an der binären Maschinensprache (1er & 0er), deshalb auch sehr schwer zu lernen! Dieser ‚Pseudo-Code’ hat aber auch den Vorteil, sehr schnell zu sein.

Basic:
Basic stellt eine sehr einfache, aber auch nicht sehr leistungsfähige Programmiersprache dar. Die Programmiersprache stellt den Gegenpol zu Assembler dar. Einfach zu lernen – der Code ist aber nicht besonders schnell.

C++:
Die beliebteste Sprache unter den Spiele- Programmierern. Meiner Meinung nach ist der Code von C++ besser zu überblicken, besser für große Projekte wie Spiele geeignet und er ist zu guter letzt schnell und logisch.

Jetzt gibt es aber noch viele weitere Programmiersprachen (Delphi, Pascal etc.), die sich aber nicht sooo sehr unterscheiden. Ich würde empfehlen, dir einige Bücher über C++ anzuschauen (Bücherei) und wenn es dir dann sehr schwer fallen sollte, C++ zu verstehen; Lerne Basic bis du das mit den Algorithmen (z.B. das schreiben eines Euro- Rechners) verstanden hast. Dann sollte dir C++ keine großen Probleme machen! Trotzdem werde ich dir am Ende dieses Artikels einige gute Bücher zur Programmierung vorstellen, die mir am besten fürs Programmieren lernen geeignet scheinen.

Die Wahl der API
Als API (Application-Programming-Interface) bezeichnet man einen Satz von Befehlen, die die der Programmiersprache ergänzen. Beispielsweise könnten das die einer Multimedia- API sein, mit der man beispielsweise Spiele schreiben kann. Da es hier um Spiele- Programmierung geht, werde ich die zwei wichtigsten Multimedia- APIs vorstellen; DirectX und OpenGL.

Für viele Programmierer ist Windows in Verbindung mit DirectX die perfekte PC-Spiele-Plattform. Außerdem würde ich jedem DirectX empfehlen, da es (bis jetzt) weiter verbreitet ist und da es mehr Bücher und Internetseiten zum Thema gibt. Ich werde dir auch am Ende des Tutorials einige gute Bücher und Sites zu DirectX vorstellen.

Dann gibt es noch OpenGL. Ich denke OpenGL ist besser bei einem erfahrenen Programmierer aufgehoben, da dessen Vorteile in der Flexibilität der 3D Komponente ist. Und 3D ist wahrlich nicht einfach!

Teil 2: Tipps und ein kleiner Überblick

Der Entwicklungsprozess
So, ich denke du hast jetzt einen Überblick über die Spiele- Programmierung. Aber die Spiele- Programmierung ist einer der letzten Schritte der Spiele- Entwicklung. Es ist sehr wichtig, dass du deine Projekte planst! Wenn du das nicht tust, kann das sehr deprimierend sein. Du sitzt Nacht für Nacht an deinem Computer und hackst Code in dein Keyboard. Nach einiger zeit hast du ein Spiel fertig – und es ist einfach beschissen! Oder viel schlimmer: Dein Code ist irgendwann so unübersichtlich geworden, dass du das Projekt nach 2 Monaten aufgeben musstest – scheiße war’s! Das ist schon vielen (und auch mir) passiert. Deshalb solltest du ein sogenanntes Entwicklungs- und Designskript anfertigen. Das sollte bei größeren Projekten folgendermaßen aussehen:

Das Designskript:
1.
Eine grundsätzliche Beschreibung des Spiels. Welches Genre, was macht dein Spiel einzigartig, wie verläuft die Handlung (nur grob), welche Perspektive(Ego, 3rd Person, Isometrisch), wann verliegt/ gewinnt der Spieler etc.
2. Ausarbeiten der Story. (Man schreibt aber keine Storyline über Nacht!)
3. Nachdem du die Story fertig hast, solltest du dich an die NPCs (die Charaktere in deinem Spiel – falls es diese überhaupt gibt) machen. Jeder dieser NPCs sollte vom anderen in seinem Charakter zu unterscheiden sein und dem Spieler (z.B. durch ein Gespräch) wichtige Informationen liefern.
4. Das Beschreiben und Zeichnen(in meinem Fall Skizzieren =) anderer Objekte im Spiel. Hierzu gehören z.B. Gegner, Raumschiffe etc.
5. Ins Detail gehen: Jetzt solltest du das Gameplay und die Levels, die wiederum die einzelnen Missionen enthalten [...] mit samt den Rätseln, Architekturstil bis zum Verhalten der Gegner etc. beschreiben.

OK, das Design steht. Vielleicht fragst du dich jetzt, warum du das ganze machen solltest. Erst mal solltest du das machen, was du kannst; dazu gehören Grafiken wahrscheinlich nicht. Wenn dein Grafiker dann dein Designskript liest, soll er hinterher auch wissen, wie beispielsweise die Piraten aussehen sollen. Außerdem verhinderst du so, dass die Charaktere nicht ins Spielgeschehen oder dein Spielkonzept passen.

Mein Tipp: Mir persönlich kommen die besten Ideen wenn ich schreibe. Scheue dich nicht, mal dein Designschritt umzuwerfen – aber vorm Entwicklungsprozess!

Wenn das Skript fertig ist, kannst du das Spiel noch mal überblicken und dir und anderen objektiv die Frage stellen: Mach das wirklich Spaß? Wenn nicht kannst du dir überlegen warum. Und nicht erst dann, wenn du das Spiel schon programmiert hast!

Anmerkung: Das mir dem Design- und Entwicklungsskript gilt aber nur für größere Projekte! Nicht das du einen Space- Invaders- Klon schreibst und versuchst, ein 10-seitiges Skript zu schreiben :-)

„Hell, what I’m doin’!“

Wenn du denkst, dass das Spiel dir und anderen Spaß macht, kannst du dich an das Entwicklungsskript machen. Dieses sollte folgendendes enthalten:

1. Der grobe Aufbau des Code. Achte unbedingt auf modularen Aufbau!
2. Festlegen von Datenstrukturen. Hierbei solltest du vor allem die Klassen/ Strukturen beachten.
3. Das Festlegen der wichtigsten Funktionen (Prototypen). Überlege dir was sie machen, wie sie es machen und wie und wo man sie am besten einbindet.
4. Falls du nicht der einzige Programmierer bist, solltest du noch andere, für einen Programmier wichtige, Dinge aufschreiben. Hierzu gehören z.B. Objektinteraktionen.

Soviel zum Entwicklungsskript.

Wenn du das Entwicklungsskript fertig hast, solltest du jetzt eine grobe Vorstellung davon haben, wie dein Code später aussieht. Das Design- und Entwicklungsskriptskript sollte jetzt dir und deinen (zukünftigen) Teammitgliedern genug Informationen liefern, was auf sie zu kommt und was sie (wie) zu tun haben.

Von der ersten Zeile zum Next-Generation-Shooter

Ich werde dir an dieser Stelle noch meine persönliche Vorgehensweise erläutern, die ich bei der Entwicklung eines Spiels anwende:

1. Die Engine schreiben(es gibt auch gute und kostenlose Engines) – Hierzu gehören auch Leveleditor etc...muss aber nicht immer sein!
2. Eine simple Applikation schreiben, die nicht mehr macht, als deine Engine einzubinden und alle benötigten Komponenten von DirectX zu Initialisieren.
3. Eine Art Testlevel erstellen, in dem man sich frei bewegen kann.
4. Objektinteraktionen einbinden. D.h. wenn der Spieler ein Objekt rammt, nimmt er Schaden oder wird ggf. zerstört. Wenn der Spieler zum Beispiel später mit einem NPC reden kann, dann sollte zumindest in diesem Stadium eine Meldung bekommen, dass hier der NPC sprechen würde. Das hat den Vorteil, das später nur noch der Code und der Text eingebunden werden muss. Währenddessen kann der KI- Programmierer das Gegnerverhalten im Testlevel überprüfen und verfeinern. (Wie sich die Gegner verhalten sollen, weis er ja aus dem Designskript!)
5. Zusammensetzten. Der erste Level wird in das Programm eingebunden, sowie das Verhalten der Gegner und NPCs. Außerdem sollten sie jetzt auch Objekte wie Tiere etc. bewegen. Voilà, die Alphaversion! (Als Alphaversion bezeichnet man eine Version deines Spiels, die schon alle Features (Schmankerl) sowie mindestens ein voll spielbares Level enthält. Bei einer Alphaversion spielt es keine Rolle, ob sie bist jetzt alles andere als stabil läuft.)
6. Jetzt geht es an das „Basteln“ der Level, entwerfen (HALT! Sind ja schon entworfen =) und rendern der Videos (Intro, Zwischensequenzen), optimieren des Codes etc. Jetzt hast du eigentlich ein fertiges Spiel – die Betaversion. Nur das heißt nicht zum Spaß Beta...diese Version ist normalerweise voll von Fehlern (Jargon: Bugs). Deshalb beginnt jetzt die letzte Phase – der Betatest oder das Debugging. Hier wird das Spiel nach Fehlern durchsucht, debuggt, wieder durchsucht, wieder debuggt – für das Testspielen werden oft sogar Betatester engagiert! Sollte das Spiel noch endloser „Fehlerausmerzung“ mehrere Stunden stabil (ohne abzustürzen) laufen, nennt man das jetzt die Masterversion – das endgültig fertige Spiel.

Meine Gebote der Spielentwicklung:

Du sollst...
1. ...nie planlos drauflos hacken.
2. ...den Code logisch aufbauen (Funktionsnamen, Module).
3. ...mit den restlichen Programmierern einen einheitlichen Code schreiben. LaMothe: „...I have been programming for over 20 years, and I’m not going to change my programming style for anyone (well, maybe Pamela Anderson).“
4. ...den Code viel kommentieren – vor allem bei unübersichtlichen Stellen.
5. ...nie Skriptsprachen, die Programmiersprachen wie C/C++ ersetzen sollen, lernen. Nein! Das machen nur Weicheier *joke*.
6. ...auch mal eine Pause machen.
7. ...dich auf das spezialisieren, was du kannst!
8. ...nicht mit deinem Spiel übertreiben (Next-Generation-Shooter).
9. ...Visual C++ (6) und DirectX (7) benutzen.
10. ...alles lesen, was dir in die Finger kommt.
11. ...dich mit anderen Entwicklern zusammenschließen.
12. ...dir klar machen, dass es ein langer Weg bis zu einem fertigen Spiel ist.
13. ...auf die Meinung deiner Freunde/Mitarbeiter hören!
14. ...zu wichtigen Szenetreffs gehen.
15. ...niemals aufgeben...

Gute Bücher zur Programmiergrundlagen und Spieleentwicklung:

Game Design: Die Geheimnisse der Profis:
Hier werden grundsätzliche Dinge zum Spieldesign besprochen – der Großteil des Buches ist aber mit Interviews „der Elite“ zu allen möglichen Themen wie Leveldesign, Grafik, Programmierung etc. vollgestopft. Außerdem hat das Buch haufenweise I-Net Adressen. Deutsch

DirectX 7 Programmierung in 21 Tagen:
Deckt die wichtigsten Bestanteile von DirectX verständlich ab. Deutsch

Tricks of the Windows Game Programming Gurus:
Diesen Wälzer sollte jeder – aber auch jeder (und wehe nicht =) schon mal gelesen haben! Der „Meister“ LaMothe deckt hier die wichtigsten 2D Grundlagen zimperlichst ab. Außerdem gibt’s auch was zu DInput (inkl. ForceFeedback), DSound und DMusic. Als währ das nicht genug, gibt’s noch einen Anhang mit Mathematik zur Spieleentwicklung und auf den zwei CDs mit Visual C++ (Autorenversion) auch noch 2 eBooks zur 3D- Programmierung. Englisch

C++ Programmierung lernen: anfangen, anwenden, verstehen:
Meiner Meinung nach ein sehr gut verständliches Buch zu C++. Deckt die wichtigsten und nötigen Dinge die man wissen sollte ab. Deutsch

Im WWW
www.games-net.de
www.game-dev.de
www.game-dev.net
www.german-games-connection.de
www.untergrund-spiele.de

Solltest du noch Fragen haben, schreib mir ein eMail.

Daniel Deischl
daniel-deischl@gmx.de
www.daniel-deischl.de

Copyright © 2000 by Daniel Deischl, Nirwana GD