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 wars! 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 Im 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 Im 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 gibts auch was zu DInput
(inkl. ForceFeedback), DSound und DMusic. Als währ das nicht genug, gibts
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