Spiele programmieren lernen

Aus Spieleprogrammierer-Wiki
Wechseln zu: Navigation, Suche

Bitte beachte, dass dieser Artikel noch unvollständig ist! Hilf mit, ihn fertigzustellen.
Näheres dazu findest du ggf. auf der Diskussionsseite. Wenn du der Meinung bist, dass der Artikel vollständig ist, kannst du diesen Hinweis entfernen.


Inhaltsverzeichnis

Was braucht es, um Spieleprogrammierer zu werden?

Du hast dir das Ziel gesetzt, eigene Spiele zu programmieren. Eines sollte dir von Anfang an klar sein: Der Weg bis zum ersten eigenen Spiel ist kein leichter. Zunächst einmal solltest du in der Lage sein, dir fremde Themenbereiche selbstständig zu erarbeiten. Du wirst sehr viel lesen müssen und nicht immer jemanden haben, der dir sagt, was du als nächstes tun sollst. Auch um englischsprachige Texte kommst du ab einem gewissen Punkt nicht mehr herum, also solltest du diese Sprache beherrschen. Wenn du noch nie programmiert hast, wird der Anfang schwierig werden. Darum ist es wichtig, dass du nicht aufgibst, auch wenn es nur in kleinen Schritten voran geht.

Wir haben alle einmal an dem Punkt angefangen, an dem du nun stehst. Jedoch hast du das große Glück, dass ein schneller und günstiger Internetzugang heute eine Selbstverständlichkeit ist. Dir steht mit dem Internet eine enorme Informationssammlung zur Verfügung, die dir auf fast jede nur denkbare Frage eine Antwort liefern kann. So zum Beispiel auch dieses Wiki. Natürlich kann es nicht alle Fragen beantworten und für alle Probleme eine Lösung parat haben. Aus diesem Grund solltest du wissen, wie man eine Suchmaschine richtig benutzt, um gezielt nach Informationen zu suchen. Die meisten Fragen lassen sich durch Suchen beantworten — man muss nur wissen, wonach man suchen muss.

Als Programmierer und insbesondere als Spieleprogrammierer sollte man mit der Mathematik nicht auf dem Kriegsfuß stehen. (3D-)Grafik, Physiksimulation und künstliche Intelligenz beinhalten fast ausschließlich rein mathematische Fragestellungen, und auch außerhalb dieser Themengebiete wirst du immer wieder einfachere Formeln aufstellen und berechnen müssen. Logisches Denken und Abstraktion sind weitere Fähigkeiten, die dir bei der Spieleprogrammierung sehr nützlich sein werden. Oft musst du ein großes Problem in kleinere Teilprobleme zerlegen, die für sich genommen einfacher zu lösen sind. Viele Probleme sind auf den ersten Blick unterschiedlich, aber wenn du sie genauer betrachtest, erkennst du vielleicht eine Ähnlichkeit zu einem anderen Problem, dessen Lösung du bereits kennst. Aber keine Sorge: solche Dinge lernst du mit der Zeit, wenn du genügend Erfahrung gesammelt hast.

Der nächste wichtige Punkt bei der Entwicklung eigener Spiele ist natürlich Kreativität. Niemand möchte den eintausendsten Tetris-Klon spielen. Hier hilft es, wenn du selbst möglichst viele verschiedene Arten von Spielen spielst. Du solltest dabei mit der Zeit ein Gefühl dafür entwickeln, welche Elemente eines Spiels dazu beitragen, dass es Spaß macht. Wenn du solche Elemente in einer noch nicht zu oft gesehenen Art und Weise kombinierst und deinem Spiel etwas Persönliches gibst, was es von allen anderen Spielen abhebt und es einzigartig macht, dann hast du das Ziel erreicht. Nun bist du als Programmierer vielleicht nicht begabt im Zeichnen oder Musizieren, und trotzdem benötigt dein Spiel Grafiken, Soundeffekte und Musik. Hier bietet sich die Zusammenarbeit mit Grafikern und Musikern an, womit wir gleich beim nächsten Punkt angelangt wären: Teamfähigkeit. Insbesondere bei größeren Projekten, wo auch die Programmierung von mehr als nur einer Person umgesetzt wird, muss das Team gut funktionieren, damit am Ende des Tages ein gutes Spiel produziert werden kann (aber um daran zu denken ist es noch zu früh).

Wir hoffen, dass dich diese Einführung nicht zu sehr entmutigt hat. Also, weiter geht's!

Was ist ein realistisches Ziel?

Unsere eigene Erfahrung und auch zahlreiche Diskussionen im Forum haben uns gelehrt, dass Anfänger vor allem einen Fehler begehen: nämlich sich unrealistische Ziele zu setzen. Erstens in Bezug auf die Zeit, die man benötigt, um so viel zu lernen, dass man ein eigenes Spiel auf die Beine stellen kann. Zweitens in Bezug auf die Qualität und den Umfang der Spiele, die man erwartet programmieren zu können. Mit der Realität konfrontiert zu werden ist mit Frustration verbunden, die bei so manchem dazu führt, dass er völlig aufgibt. Darum möchten wir dich so früh wie möglich davor warnen. Bitte nimm diese Empfehlungen ernst.

Die Wahl der Programmiersprache

Um eigene Spiele programmieren zu können, musst du selbstverständlich zunächst Programmieren lernen. Es gibt auch Programme, mit denen man ein Spiel ohne großen Programmieraufwand entwickeln kann. Auf diese wollen wir jedoch hier nicht näher eingehen, da sie den Entwickler meist stark einschränken. Wer sein Spiel wirklich selbst programmiert, hat maximale Freiheit bei der Umsetzung seiner Ideen (was aber auch mit mehr Arbeit verbunden ist).

Wer sich vornimmt Programmieren zu lernen, der muss sich zuerst für eine Programmiersprache entscheiden. In dieser Sprache werden die Programme vom Programmierer geschrieben (Quellcode), bevor sie in eine für den Computer ausführbare Form übersetzt werden. Heute existiert eine schier unüberschaubare Anzahl von Programmiersprachen, und sie unterscheiden sich teilweise sehr stark voneinander. Für uns als Spieleprogrammierer ist jedoch glücklicherweise nur eine relativ kleine Gruppe von Sprachen interessant.

Wir wollen uns die unserer Meinung nach wichtigsten dieser in Frage kommenden Sprachen etwas näher ansehen, und zwar unter folgenden Aspekten:

Komfort und Einsteigerfreundlichkeit
Die Menge an Quellcode, die man in den verschiedenen Programmiersprachen tippen muss, um gewisse Berechnungen/Algorithmen auszuführen, variiert stark. Was in der einen Sprache mit 10 Zeilen Code erledigt ist, benötigt in der anderen Sprache möglicherweise 50 Zeilen Code. Auch bieten einige Sprachen bestimmte Komfortfunktionen, die andere nicht bieten. Komfortablere Programmiersprachen erleichtern dem Programmierer die Arbeit, was aber nicht selten auch zu langsameren Programmen führt. Der Prozess, der ein Stück Quellcode in ein ausführbares Programm verwandelt, ist auch von Sprache zu Sprache unterschiedlich kompliziert und fehleranfällig.
Häufig sind die komfortableren Programmiersprachen für Einsteiger leichter zu erlernen, da mit ihnen viele "alltägliche" Aufgaben ohne viel Aufwand gelöst werden können und es weniger Fallstricke gibt, über die man stolpern kann.
Verfügbarkeit von Werkzeugen und Bibliotheken
Wer ein Spiel programmiert, der muss nicht das Rad neu erfinden. Für die wichtigsten Aufgabenbereiche wie 2D-/3D-Grafik, Audio, Netzwerk oder die Abfrage von Eingabegeräten wie Maus, Tastatur oder Joystick gibt es schon vorgefertigte Bibliotheken. Diese Bibliotheken bindet man einfach in sein Programm ein und erspart sich damit eine Menge Arbeit. Die Wahl der Programmiersprache sollte auch das Angebot solcher Bibliotheken berücksichtigen. Glücklicherweise sind einige der besonders bekannten Bibliotheken auch für mehrere Sprachen verfügbar.
Neben Bibliotheken benötigt man zum Programmieren auch gute Werkzeuge/Tools. Das wichtigste Werkzeug ist eine Entwicklungsumgebung. Dabei handelt es sich im Prinzip um einen Text-Editor, der speziell für die Bearbeitung von Quellcode in der entsprechenden Sprache ausgelegt ist. Eine gute Entwicklungsumgebung unterstützt den Programmierer durch Autovervollständigung beim Tippen, Anzeigen von Informationen über Objekte im Quellcode, bei der Projektverwaltung und bei der Fehlersuche (Debugging).
Effizienz
Eine schnelle Ausführung des Programms ist für viele Spiele sehr wichtig, da sie 3D-Grafik, Sound, Physik oder künstliche Intelligenz in Echtzeit berechnen müssen und dadurch einen Computer an die Grenzen seiner Leistungsfähigkeit bringen. Für Hobby-Spieleprogrammierer spielt dieser Aspekt normalerweise eine untergeordnete Rolle, da ihre Spiele tendenziell einfacher gehalten sind.

Außerdem findest du zu jeder Programmiersprache ein kleines Stück Quellcode als Beispiel. Dies soll dir nur einen ersten Eindruck der jeweiligen Programmiersprache vermitteln. Es sollte dir jedoch klar sein, dass ein so kleiner Quellcode-Abschnitt nicht repräsentativ für eine ganze Sprache sein kann.

C++

In der Programmiersprache C++ (ausgesprochen "C Plus Plus") werden fast alle professionellen/kommerziellen Spiele programmiert. Der Grund dafür ist, dass C++ die Programmierung sehr schneller Programme auf einer niedrigen Ebene erlaubt. Letzteres bedeutet, dass es nicht viel "zwischen" dem Programm und der Hardware des Computers gibt. Entsprechend rudimentär und fehleranfällig ist diese Sprache in vielen Bereichen, was sie nicht zur am einfachsten zu erlernenden Programmiersprache macht. Da C++ in der Spieleprogrammierung sehr weit verbreitet ist, hat man hier jedoch die größte Auswahl an Bibliotheken. Weiterhin gibt es genügend Werkzeuge/Entwicklungsumgebungen.

/************************************************
 * Dies ist ein einfaches C++-Beispielprogramm. *
 ************************************************/
 
// Benötigte Bibliothek einbinden.
#include <iostream>
 
// Die folgende Funktion berechnet n!, die Fakultät von n.
int fak(int n) {
    // Signalisiere einen Fehler, wenn n negativ ist.
    if(n < 0) throw std::domain_error("Fakultät für negative Zahlen ist nicht definiert!");
    
    if(n == 0) return 1;        // 0! = 1
    else return n * fak(n - 1); // Rekursion: n! = n * (n - 1)!
}
 
// Die Hauptfunktion "main":
// Hier startet das eigentliche Programm.
int main() {
    // Begrüßung
    std::cout << "Hallo Spieleprogrammierer!" << std::endl;
    std::cout << "Gib eine Zahl ein! ";
    
    // Zahl einlesen.
    int zahl;
    std::cin >> zahl;
    
    // Quadrat der Zahl ausgeben.
    std::cout << "Das Quadrat von " << zahl << " ist: " << (zahl * zahl) << std::endl;
 
    try {
        // Fakultät der Zahl ausgeben.
        std::cout << "Die Fakultät von " << zahl << " ist: " << fak(zahl) << std::endl;
    }
    catch(const std::exception& e) {
        // Ein Fehler ist aufgetreten. Gib die Fehlermeldung aus.
        std::cout << "Fehler: " << e.what() << std::endl;
    }
    
    return 0;   // Ende des Programms
}

C#

C# (ausgesprochen "C Sharp") ist mit C++ verwandt und erlaubt ein komfortableres Programmieren. Das Angebot an Bibliotheken und Werkzeugen ist nicht so umfangreich wie das für C++, was auch daran liegt, dass die Sprache viel jünger ist. Die erreichbare Geschwindigkeit reicht zwar nicht an die von C++-Programmen heran, sollte jedoch auch für ambitioniertere Spieleprojekte kein Problem darstellen.

Java

Java ist C# sehr ähnlich. Für die Spieleprogrammierung auf dem PC ist diese Sprache jedoch nicht ganz so attraktiv, da es weniger Bibliotheken gibt. Möchtest du jedoch Spiele für Android-Smartphones entwickeln, so führt kein Weg an Java vorbei, da Android-Apps in dieser Sprache programmiert werden.

Python

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge