Spiele programmieren lernen

Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
[gesichtete Version][gesichtete Version]
(Erste Schritte in Richtung Spiel)
(SDL Dokulink korrigiert, da dieser zu einer nicht existenten Seite verbindet (dasselbe wie bei korrigierten Allegrolinks))
 
(41 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Baustelle}}
 
[[Kategorie:Tutorial]]
 
[[Kategorie:Für Einsteiger]]
 
[[Kategorie:C++]]
 
[[Kategorie:C-Sharp]]
 
[[Kategorie:Java]]
 
[[Kategorie:Python]]
 
 
 
Dieser Artikel soll dir dabei helfen einen ersten Überblick darüber zu gewinnen, was auf dich zukommt, wenn du Spiele programmieren lernen möchtest. Er richtet sich speziell an Anfänger, die noch keine Erfahrung mit der Programmierung haben. Bitte lies diesen Artikel sehr sorgfältig durch, und nimm die Tipps und Empfehlungen ernst. Sie sind nicht einfach aus der Luft gegriffen, sondern basieren auf langjähriger Erfahrung.
 
Dieser Artikel soll dir dabei helfen einen ersten Überblick darüber zu gewinnen, was auf dich zukommt, wenn du Spiele programmieren lernen möchtest. Er richtet sich speziell an Anfänger, die noch keine Erfahrung mit der Programmierung haben. Bitte lies diesen Artikel sehr sorgfältig durch, und nimm die Tipps und Empfehlungen ernst. Sie sind nicht einfach aus der Luft gegriffen, sondern basieren auf langjähriger Erfahrung.
  
Zeile 27: Zeile 19:
 
Unsere eigenen Erfahrungen 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. Dann mit der Realität konfrontiert zu werden ist mit Frustration verbunden, die dazu führen kann, dass man völlig aufgibt. Darum möchten wir dich so früh wie möglich davor warnen. ''Bitte nimm diese Empfehlungen ernst.''
 
Unsere eigenen Erfahrungen 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. Dann mit der Realität konfrontiert zu werden ist mit Frustration verbunden, die dazu führen kann, dass man völlig aufgibt. Darum möchten wir dich so früh wie möglich davor warnen. ''Bitte nimm diese Empfehlungen ernst.''
  
Du hast vielleicht schon eine konkrete Idee für dein Spiel. Erfahrungsgemäß ist diese erste Idee sehr aufwändig umzusetzen und übersteigt die Fähigkeiten eines Anfängers bei weitem. Typische Ideen für erste Spiele, die mit an Sicherheit grenzender Wahrscheinlichkeit ''fehlschlagen'', beinhalten atemberaubende 3D-Grafik, riesige dynamische Welten oder (Massively) Multiplayer. Wenn deine Idee auch in diese Kategorie fällt oder du Spiele programmieren möchtest, die mit einem aktuellen Topseller-Titel vergleichbar sind, dann vergiss die Idee für die ersten Jahre. Wirklich. Solche Spiele werden von großen Teams professioneller Spieleentwickler umgesetzt, die jahrelange Erfahrung mitbringen und jeden Tag mindestens 8 Stunden mit der Entwicklung verbringen. Trotz eines großen Teams beanspruchen Spiele wie "World of Warcraft", "Half-Life 2" oder "GTA" mindestens ein Jahr Entwicklungszeit. Umgerechnet auf einen einzigen unerfahrenen Entwickler würde dieser sein ganzes Leben an einem solchen Spiel programmieren. Und wer wird in 60 Jahren noch ein Spiel spielen, das für einen Computer aus der heutigen Zeit geschrieben wurde?
+
Du hast vielleicht schon eine konkrete Idee für dein Spiel. Erfahrungsgemäß ist diese erste Idee sehr aufwändig umzusetzen und übersteigt die Fähigkeiten eines Anfängers bei weitem. Typische Ideen für erste Spiele, die mit an Sicherheit grenzender Wahrscheinlichkeit ''fehlschlagen'', beinhalten atemberaubende 3D-Grafik, riesige dynamische Welten oder (Massively) Multiplayer. Wenn deine Idee auch in diese Kategorie fällt oder du Spiele programmieren möchtest, die mit einem aktuellen Topseller-Titel vergleichbar sind, dann vergiss die Idee für die ersten Jahre. Wirklich. Solche Spiele werden von großen Teams professioneller Spieleentwickler umgesetzt, die jahrelange Erfahrung mitbringen und jeden Tag mindestens 8 Stunden mit der Entwicklung verbringen. Trotz eines großen Teams beanspruchen Spiele wie "World of Warcraft", "Half-Life 2" oder "GTA" etwa fünf Jahre Entwicklungszeit. Selbst Projekte mit kleineren Budgets sind oft zwei bis drei Jahre in Entwicklung. Umgerechnet auf einen einzigen unerfahrenen Entwickler würde dieser sein ganzes Leben an einem solchen Spiel programmieren. Und wer wird in 60 Jahren noch ein Spiel spielen, das für einen Computer aus der heutigen Zeit geschrieben wurde?
  
Also, einen Schritt zurück: Ein gutes Spiel muss gar nicht so aufwändig sein wie die zuvor genannten Spiele. Hast du nicht schon einmal Stunden mit kurzweiligen Flash-Spielen verbracht? Das Gute daran ist: Solche Spiele programmieren normalerweise nur sehr kleine Teams, vielleicht sogar nur ein einzelner Entwickler, und oft nur in der Freizeit. Was du dir also als erstes Zwischenziel vornehmen solltest, ist ein sehr einfach gehaltenes kleines Spiel zu programmieren, das vor allem Spaß macht. Der Spaß am Spiel ist das Wichtigste, nicht die Grafik. Wenn du dich als einzelner Entwickler mit den großen Spielestudios messen willst, wirst du immer verlieren. Also setze dir ein Ziel, das du auch erreichen kannst. Natürlich ist es jetzt schwer für dich zu beurteilen, was realistisch ist. Darum solltest du dir anschauen, wie die ersten Spielprojekte anderer Mitstreiter aussahen. Eine Suche nach ''"my first game"'' mit der Suchmaschine deiner Wahl sollte dir genügend Beispiele liefern, an denen du dich orientieren kannst.
+
Also, einen Schritt zurück: Ein gutes Spiel muss gar nicht so aufwändig sein wie die zuvor genannten Spiele. Hast du nicht schon einmal Stunden mit kurzweiligen Flash-Spielen verbracht? Das Gute daran ist: Solche Spiele programmieren normalerweise nur sehr kleine Teams, vielleicht sogar nur ein einzelner Entwickler, und oft nur in der Freizeit. Was du dir also als erstes Zwischenziel vornehmen solltest, ist ein sehr einfach gehaltenes kleines Spiel zu programmieren, das vor allem Spaß macht. Der Spaß am Spiel ist das Wichtigste, nicht die Grafik. Wenn du dich als einzelner Entwickler mit den großen Spielestudios messen willst, wirst du immer verlieren. Also setze dir ein Ziel, das du auch erreichen kannst. Natürlich ist es jetzt schwer für dich zu beurteilen, was realistisch ist. Darum solltest du dir anschauen, wie die ersten Spielprojekte anderer Mitstreiter aussahen. Eine Suche nach ''"my first game"'' mit der Suchmaschine deiner Wahl sollte dir genügend Beispiele liefern, an denen du dich orientieren kannst. Eine weitere Möglichkeit für realistische Ziele sind Spiele, die bei Contests ("Programmierwettbewerben") mit beschränkter Zeit entstehen, wie z. B. dem Ludum Dare oder dem Devmania Overnight Contest. Geht die Entwicklung eines Spiels parallel zum Lernprozess eines Anfänger, sollte aber auch hier mit Entwicklungszeiten von mehreren Monaten gerechnet werden.
  
 
== Die Wahl der Programmiersprache ==
 
== Die Wahl der Programmiersprache ==
Zeile 48: Zeile 40:
  
 
; Effizienz
 
; 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.
+
: 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 können. Für Hobby-Spieleprogrammierer spielt dieser Aspekt normalerweise eine untergeordnete Rolle, da ihre Spiele tendenziell einfacher gehalten sind. Außerdem geht mit höherer Leistungsfähigkeit einer Sprache meistens auch eine Nähe zum zugrunde liegenden Computer-System einher. Die dadurch erhöhte Komplexität kann dafür sorgen, dass Programmierfehler leichter entstehen und schwieriger gefunden werden können. Als Spieleentwickler gilt es also eine für das Vorhaben angemessene Balance zwischen Effizienz und Produktivität zu finden.
  
 
=== C++ ===
 
=== C++ ===
Zeile 66: Zeile 58:
 
 
 
if(n == 0) return 1; // 0! = 1
 
if(n == 0) return 1; // 0! = 1
else return n * fak(n - 1); // Rekursion: n! = n * (n - 1)!
+
else return n * fakultaet(n - 1); // Rekursion: n! = n * (n - 1)!
 
}
 
}
  
Zeile 100: Zeile 92:
 
[[Datei:Screenshot Visual Studio 2008 CSharp.png|thumb|right|Screenshot der Entwicklungsumgebung ''Microsoft Visual Studio 2008'' mit einem C#-Projekt.]]
 
[[Datei:Screenshot Visual Studio 2008 CSharp.png|thumb|right|Screenshot der Entwicklungsumgebung ''Microsoft Visual Studio 2008'' mit einem C#-Projekt.]]
  
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. Wenn du eine Xbox besitzt und für diese eigene Spiele programmieren möchtest, dann solltest du C# lernen.
+
C# (ausgesprochen "C Sharp") ist mit C++ verwandt und erlaubt ein komfortableres Programmieren. Es handelt sich bei C# um eine ".NET-Sprache" (wenn du irgendwo etwas von .NET liest, dann ist damit unter Anderem auch C# gemeint). 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. Wenn du eine Xbox besitzt und für diese eigene Spiele programmieren möchtest, dann solltest du C# lernen. Zudem ist C# die Programmiersprache der Wahl für die Spieleentwicklungsumgebung ("Engine") [http://unity3d.com/ Unity], die man ambitionierten Anfängern oft empfiehlt.
  
 
<sourcecode lang="csharp">
 
<sourcecode lang="csharp">
Zeile 127: Zeile 119:
 
             {
 
             {
 
                 // Fakultät der Zahl ausgeben.
 
                 // Fakultät der Zahl ausgeben.
                 Console.WriteLine("Die Fakultät von {0} ist: {1}", zahl, Fakultät(zahl));
+
                 Console.WriteLine("Die Fakultät von {0} ist: {1}", zahl, fakultät(zahl));
 
             }
 
             }
 
             catch (Exception e)
 
             catch (Exception e)
Zeile 137: Zeile 129:
  
 
         // Die folgende Funktion berechnet n!, die Fakultät von n.
 
         // Die folgende Funktion berechnet n!, die Fakultät von n.
         private static int Fakultät(int n)
+
         private static int fakultät(int n)
 
         {
 
         {
 
             // Signalisiere einen Fehler, wenn n negativ ist.
 
             // Signalisiere einen Fehler, wenn n negativ ist.
Zeile 143: Zeile 135:
  
 
             if (n == 0) return 1;              // 0! = 1
 
             if (n == 0) return 1;              // 0! = 1
             else return n * Fakultät(n - 1);    // Rekursion: n! = n * (n - 1)!
+
             else return n * fakultät(n - 1);    // Rekursion: n! = n * (n - 1)!
 
         }
 
         }
 
     }
 
     }
Zeile 153: Zeile 145:
 
[[Datei:Screenshot Eclipse Java.png|thumb|right|Screenshot der Entwicklungsumgebung ''Eclipse'' mit einem Java-Projekt.]]
 
[[Datei:Screenshot Eclipse Java.png|thumb|right|Screenshot der Entwicklungsumgebung ''Eclipse'' mit einem Java-Projekt.]]
  
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 für Android-Smartphones deine eigenen Apps oder Spiele programmieren? Dann führt kein Weg an Java vorbei, da Android-Apps fast ausschließlich in dieser Sprache programmiert werden. Ansonsten solltest du eher auf C# setzen.
+
Die schon etwas ältere Programmiersprache Java hat C# maßgeblich beeinflusst. Die beiden Sprachen sind sich daher recht ähnlich. Während Java für die Entwicklung von betrieblichen Anwendungen sehr populär geworden ist, kann man die Sprache bezüglich Spieleentwicklung für den PC eher als Außenseiter bezeichnen. Möchtest du jedoch für Android-Smartphones deine eigenen Apps oder Spiele programmieren, dann führt kaum ein Weg an Java vorbei, da Android-Apps fast ausschließlich in dieser Sprache programmiert werden.
  
 
<sourcecode lang="java" tab="4">
 
<sourcecode lang="java" tab="4">
Zeile 201: Zeile 193:
 
[[Datei:Screenshot IDLE.png|thumb|right|Screenshot der minimalistischen Entwicklungsumgebung ''IDLE'' für Python.]]
 
[[Datei:Screenshot IDLE.png|thumb|right|Screenshot der minimalistischen Entwicklungsumgebung ''IDLE'' für Python.]]
  
Python unterscheidet sich stark von den bisher gezeigten Sprachen, nicht nur äußerlich. Diese Sprache ist sehr komfortabel, und die Programme kommen mit relativ wenig Quellcode aus. Dafür sind sie allerdings tendenziell langsam. Auf Grund seiner Unkompliziertheit ist Python für Anfänger als erste Programmiersprache sehr attraktiv. Werkzeuge sind in genügender Menge verfügbar so wie auch Bibliotheken, um Spiele zu programmieren.
+
Python unterscheidet sich nicht nur äußerlich stark von den bisher gezeigten Sprachen. Ein großer Unterschied besteht darin, dass Python [http://de.wikipedia.org/wiki/Dynamische_Typisierung dynamische Typisierung] und [http://de.wikipedia.org/wiki/Duck-Typing Duck-Typing] verwendet. Insbesondere durch die dynamische Typisierung sind Python-Programme tendenziell langsamer als solche, die in C++, C# oder Java geschrieben sind (vermutlich kannst du mit diesen technischen Details noch nicht viel anfangen, aber falls es dich interessiert, kannst du die oben verlinkten Seiten durchlesen). Python-Programme kommen dafür jedoch mit relativ wenig Quellcode aus. Aufgrund seiner Unkompliziertheit ist Python für Anfänger als erste Programmiersprache sehr attraktiv. Werkzeuge und Bibliotheken zur Spieleprogrammierung sind in genügender Menge verfügbar.
  
 
<sourcecode lang="python">
 
<sourcecode lang="python">
Zeile 207: Zeile 199:
  
 
def fakultaet(n):
 
def fakultaet(n):
 
 
     # Signalisiere einen Fehler, wenn n negativ ist.
 
     # Signalisiere einen Fehler, wenn n negativ ist.
 
     if n < 0: raise ValueError("n darf nicht negativ sein!")
 
     if n < 0: raise ValueError("n darf nicht negativ sein!")
 
+
     elif n == 0: return 1             # 0! = 1
     if n == 0: return 1               # 0! = 1
+
 
     else: return n * fakultaet(n - 1) # Rekursion: n! = n * (n - 1)!
 
     else: return n * fakultaet(n - 1) # Rekursion: n! = n * (n - 1)!
 
  
 
# Hier startet das eigentliche Programm.
 
# Hier startet das eigentliche Programm.
 
 
print("Hallo Spieleprogrammierer!") # Begrüßung
 
print("Hallo Spieleprogrammierer!") # Begrüßung
 
zahl = input("Gib eine Zahl ein: ") # Zahl einlesen.
 
zahl = input("Gib eine Zahl ein: ") # Zahl einlesen.
Zeile 240: Zeile 228:
 
* Plane genügend Zeit ein, und versuche deine Motivation aufrecht zu erhalten. Hetze dich nicht! Um das Programmieren zu erlernen, solltest du – je nach deinen schon vorhandenen Kenntnissen und der Menge an Zeit pro Tag, die du dafür aufbringen möchtest – mit bis zu einem Jahr rechnen.
 
* Plane genügend Zeit ein, und versuche deine Motivation aufrecht zu erhalten. Hetze dich nicht! Um das Programmieren zu erlernen, solltest du – je nach deinen schon vorhandenen Kenntnissen und der Menge an Zeit pro Tag, die du dafür aufbringen möchtest – mit bis zu einem Jahr rechnen.
  
* Stelle sicher, dass du die Inhalte eines Kapitels wirklich verstanden hast, bevor du weiterliest. Oft liest man etwas, was einem logisch und sinnvoll erscheint, aber man ist später nicht in der Lage die Inhalte zu reproduzieren oder anzuwenden. Es geht hier nicht darum, ein Buch oder ein Tutorial einfach nur möglichst schnell von vorne bis hinten durchzulesen. Das bringt dir nichts.
+
* Stelle sicher, dass du die Inhalte eines Kapitels wirklich verstanden hast. Oft liest man etwas, was einem logisch und sinnvoll erscheint, aber man ist später nicht in der Lage, die Inhalte zu reproduzieren oder anzuwenden. Du solltest dich aber nicht auf ein Thema versteifen. Wenn du eine Nacht darüber geschlafen hast und immer noch Probleme hast, kannst du ruhig weiter lernen. Versuche später aber unbedingt nochmal es zu verstehen. Viele Themen erfordern Gefühl für das Programmieren, das du aber nur durch Übung bekommst. Zur Not helfen Erklärungen aus anderen Tutorials und Büchern. Oder du stellst eine Frage in einem Programmierforum (z.B. in einem [http://www.spieleprogrammierer.de/3-spieleentwicklung-und-programmierung/ dieser Foren]). Versuche nicht, ein Buch oder ein Tutorial einfach nur möglichst schnell von vorne bis hinten durchzulesen. Das bringt dir nichts.
  
 
* Bearbeite eventuell angebotene Übungsaufgaben, und vergleiche sie ggf. mit den vom Autor vorgeschlagenen Lösungen.
 
* Bearbeite eventuell angebotene Übungsaufgaben, und vergleiche sie ggf. mit den vom Autor vorgeschlagenen Lösungen.
Zeile 252: Zeile 240:
 
<xh4>C++-Bücher</xh4>
 
<xh4>C++-Bücher</xh4>
  
* [http://www.amazon.de/C-f%C3%BCr-Spieleprogrammierer-Heiko-Kalista/dp/3446421408/ref=zg_bs_166045031_1 "C++ für Spieleprogrammierer" von Heiko Kalista]: Dieses Buch vermittelt die wichtigsten Grundlagen der Programmiersprache C++ und richtet sich dabei speziell an angehende Spieleprogrammierer. Im Buch wird nach der Vermittlung der C++-Grundlagen ein einfaches 2D-Spiel Schritt für Schritt entwickelt. Am Ende erhält der Leser noch einige Tipps, wie er nach der Lektüre dieses Buches weitermachen sollte, und wie er die Angebote des Internets wie Communitys/Foren richtig nutzen kann.
+
* {{Amazon|3446446443|"C++ für Spieleprogrammierer" von Heiko Kalista}}: Dieses Buch vermittelt die wichtigsten Grundlagen der Programmiersprache C++ und richtet sich dabei speziell an angehende Spieleprogrammierer. Im Buch wird nach der Vermittlung der C++-Grundlagen ein einfaches 2D-Spiel Schritt für Schritt entwickelt. Am Ende erhält der Leser noch einige Tipps, wie er nach der Lektüre dieses Buches weitermachen sollte, und wie er die Angebote des Internets wie Communitys/Foren richtig nutzen kann.
 
+
* [http://www.amazon.de/Zero2Hero-C-Dirk-Louis/dp/3827245818/ref=sr_1_11?s=books&ie=UTF8&qid=1316988541&sr=1-11 "From Zero2Hero: C++" von Dirk Louis]: Am Anfang steht die Frage, was eigentlich ein Programm ist, und wie der Rechner mit Daten und Zahlen umgeht. Anschließend wird der Leser Schritt für Schritt an die Programmiersprache C++ herangeführt. Dieses Buch geht ausführlicher auf C++ ein als das von Heiko Kalista, deckt andererseits aber keine Spieleprogrammierung ab.
+
  
 
<xh4>C++-Tutorials</xh4>
 
<xh4>C++-Tutorials</xh4>
Zeile 268: Zeile 254:
 
<xh4>C#-Bücher</xh4>
 
<xh4>C#-Bücher</xh4>
  
* [http://www.amazon.de/Einstieg-Visual-2010-Editions-Computing/dp/3836216116/ref=sr_1_1?s=books&ie=UTF8&qid=1318147498&sr=1-1 "Einstieg in Visual C# 2010" von Thomas Theis]: Der Leser erlernt auf mehr als 450 Seiten den Umgang mit der Programmiersprache C# und Windows Forms, mit dem man grafische Windows-Anwendungen entwickeln kann.
+
* {{Amazon|3836228149|"Einstieg in Visual C# 2013: Ideal für Programmieranfänger geeignet" von Thomas Theis}}: Der Leser erlernt auf 580 Seiten den Umgang mit der Programmiersprache C# und der Windows Presentation Foundation (WPF), mit dem man grafische Windows-Anwendungen entwickeln kann.
  
 
<xh4>C#-Tutorials</xh4>
 
<xh4>C#-Tutorials</xh4>
Zeile 280: Zeile 266:
 
<xh4>Java-Bücher</xh4>
 
<xh4>Java-Bücher</xh4>
  
* [http://www.amazon.de/Java-von-Kopf-bis-Fu%C3%9F/dp/3897214482/ref=sr_1_1?s=books&ie=UTF8&qid=1319653375&sr=1-1 "Java von Kopf bis Fuß" von Kathy Sierra und Bert Bates]: Dieses Buch ist einfach anders als das gewöhnliche Einsteigerbuch. Durch ein neues Konzept der Wissensvermittlung wird der Leser auf gut 700 Seiten auf unterhaltsame und abwechslungsreiche Weise an die Programmierung in Java herangeführt.
+
* {{Amazon|3836228629|"Programmieren lernen mit Java: Aktuell zu Java 8 - Keine Vorkenntnisse erforderlich" von Hans-Peter Habelitz}}: Dieses Buch richtet sich an Einsteiger ohne jegliche Programmiererfahrung. Im Buch gibt es viele Übungsaufgaben sowie Musterlösungen.
 +
 
 +
* [http://openbook.galileocomputing.de/javainsel/ "Java ist auch eine Insel" von Christian Ullenboom]: Ein populäres, auch kostenlos online lesbares Buch für Java-Einsteiger und Fortgeschrittene gleichermaßen. Neben der Behandlung der Sprache Java gibt es kompakte Einführungen in Spezialthemen.
  
 
<xh4>Java-Tutorials</xh4>
 
<xh4>Java-Tutorials</xh4>
  
 
* [http://www.gailer-net.de/tutorials/java5/ "Bradley Kjells interaktives Java Tutorial" (übersetzt von Heinrich Gailer)]: Ein ausführliches Tutorial, das bei der Erklärung der grundlegenden Funktionsweise eines Computers/Prozessors beginnt und dann einen guten Einstieg in die Programmierung mit Java bietet. Zu jedem Kapitel gibt es ein Quiz, Programmieraufgaben oder einen Test.
 
* [http://www.gailer-net.de/tutorials/java5/ "Bradley Kjells interaktives Java Tutorial" (übersetzt von Heinrich Gailer)]: Ein ausführliches Tutorial, das bei der Erklärung der grundlegenden Funktionsweise eines Computers/Prozessors beginnt und dann einen guten Einstieg in die Programmierung mit Java bietet. Zu jedem Kapitel gibt es ein Quiz, Programmieraufgaben oder einen Test.
 +
 +
* [http://www.programmierkurs-java.de/ "Programmierkurs Java" von Dr.-Ing. Dietrich Boles]: Ein kostenloser Online-Kurs für Java. Die Materialien stammen ursprünglich aus der Lehrveranstaltung "Programmierkurs Java", die seit vielen Jahren von Dr.-Ing. Dietrich Boles am Department für Informatik der Universität Oldenburg durchgeführt wird.
  
 
=== Lektüre für Python ===
 
=== Lektüre für Python ===
Zeile 290: Zeile 280:
 
<xh4>Python-Bücher</xh4>
 
<xh4>Python-Bücher</xh4>
  
* [http://www.amazon.de/Einstieg-Python-Programmieranf%C3%A4nger-geeignet-Computing/dp/3836217384/ref=sr_1_1?s=books&ie=UTF8&qid=1319655271&sr=1-1 "Einstieg in Python" von Thomas Theis]: Ein relativ kompaktes Buch für Einsteiger, das die Grundlagen, aber auch fortgeschrittene Themen wie Benutzeroberflächen und Datenbanken unter Python abdeckt.
+
* {{Amazon|3836228610|"Einstieg in Python: Ideal für Programmieranfänger geeignet" von Thomas Theis}}: Ein relativ kompaktes Buch für Einsteiger, das die Grundlagen, aber auch fortgeschrittene Themen wie Benutzeroberflächen und Datenbanken unter Python abdeckt.
  
 
<xh4>Python-Tutorials</xh4>
 
<xh4>Python-Tutorials</xh4>
  
* [http://docs.python.org/tutorial/ "The Python Tutorial"]: Das offizielle, sehr umfangreiche Python-Tutorial. Eine nicht ganz vollständige [http://python.net/~gherman/publications/tut-de/online/tut/ deutsche Übersetzung] ist ebenfalls vorhanden.
+
* [http://docs.python.org/tutorial/ "The Python Tutorial"]: Das offizielle, sehr umfangreiche Python-Tutorial.
  
* [http://www.tutorialspoint.com/python/ Python-Tutorial auf Tutorials Point]: Englischsprachiges Tutorial, das die wichtigsten Grundlagen von Python abdeckt.
+
* [https://py-tutorial-de.readthedocs.org/de/python-3.3/ "Das Python-Tutorial"]: Eine deutsche Übersetzung des offiziellen Python-Tutorials.
  
 
== Auswahl einer passenden Bibliothek ==
 
== Auswahl einer passenden Bibliothek ==
Zeile 315: Zeile 305:
 
* [http://www.sfml-dev.org/tutorials/ Tutorials]
 
* [http://www.sfml-dev.org/tutorials/ Tutorials]
 
* [http://www.sfml-dev.org/documentation/ Dokumentation]
 
* [http://www.sfml-dev.org/documentation/ Dokumentation]
 +
* [https://www.spieleprogrammierer.de/wiki/SFML_Einsteiger-Tipps SFML Einsteiger-Tipps]
 
|-
 
|-
 
| [http://www.libsdl.org/ SDL] (Simple DirectMedia Layer) || C++, C#, Java, Python || Eine Bibliothek, die grundlegende Funktionalität wie Grafikausgabe, Audio, Eingabe und Netzwerk bereitstellt. ||
 
| [http://www.libsdl.org/ SDL] (Simple DirectMedia Layer) || C++, C#, Java, Python || Eine Bibliothek, die grundlegende Funktionalität wie Grafikausgabe, Audio, Eingabe und Netzwerk bereitstellt. ||
 
* [[SDL-Tutorial]]
 
* [[SDL-Tutorial]]
 
* [http://wiki.libsdl.org/moin.cgi/SDL1.2Tutorials Weitere Tutorials]
 
* [http://wiki.libsdl.org/moin.cgi/SDL1.2Tutorials Weitere Tutorials]
* [http://www.libsdl.org/cgi/docwiki.cgi Dokumentation]
+
* [http://wiki.libsdl.org/FrontPage Dokumentation]
 
|-
 
|-
 
| [http://pygame.org/ Pygame] || Python || Pygame basiert auf SDL, bietet aber noch zusätzliche Funktionalität. ||
 
| [http://pygame.org/ Pygame] || Python || Pygame basiert auf SDL, bietet aber noch zusätzliche Funktionalität. ||
Zeile 326: Zeile 317:
 
|-
 
|-
 
| [http://alleg.sourceforge.net/ Allegro] || C++, C#, Python || Eine robuste Bibliothek für die Spieleprogrammierung, die noch aus der MS-DOS-Zeit stammt, aber mittlerweile stark modernisiert wurde. ||
 
| [http://alleg.sourceforge.net/ Allegro] || C++, C#, Python || Eine robuste Bibliothek für die Spieleprogrammierung, die noch aus der MS-DOS-Zeit stammt, aber mittlerweile stark modernisiert wurde. ||
* [http://alleg.sourceforge.net/docs.html Tutorials]
+
* [https://liballeg.org/docs.html Tutorials]
* [http://alleg.sourceforge.net/api.html Dokumentation]
+
* [https://liballeg.org/a5docs/trunk/ Dokumentation]
 
|-
 
|-
| [http://msdn.microsoft.com/en-us/aa937791.aspx XNA] || C# || XNA ist eine umfangreiche Bibliothek für C#, mit der man sowohl PC- als auch Xbox-Spiele programmieren kann. ||
+
| [http://msdn.microsoft.com/en-us/aa937791.aspx XNA] || C# || XNA ist eine umfangreiche Bibliothek für C#, mit der man sowohl PC- und Windows Phone 7- als auch Xbox-Spiele programmieren kann. ||
 
* [http://msdn.microsoft.com/en-us/bb188199 Tutorials und Video-Tutorials]
 
* [http://msdn.microsoft.com/en-us/bb188199 Tutorials und Video-Tutorials]
 
* [http://msdn.microsoft.com/en-us/library/bb200104.aspx Weitere Einführungen und Dokumentation]
 
* [http://msdn.microsoft.com/en-us/library/bb200104.aspx Weitere Einführungen und Dokumentation]
Zeile 336: Zeile 327:
 
* [http://hge.relishgames.com/doc/?tutorials__main.html Tutorials]
 
* [http://hge.relishgames.com/doc/?tutorials__main.html Tutorials]
 
* [http://hge.relishgames.com/doc/ Dokumentation]
 
* [http://hge.relishgames.com/doc/ Dokumentation]
 +
|-
 +
| [http://slick.cokeandcode.com/ Slick] || Java || Slick stellt eine einfache Schnittstelle für die Entwicklung von 2D-Spielen mit Java bereit. Slick bietet auch fortgeschrittene Features wie Partikelsysteme und kommt mit einigen Tools. ||
 +
* [http://slick.cokeandcode.com/wiki/doku.php Dokumentation und Tutorials]
 +
|-
 +
| [http://libgdx.badlogicgames.com/ LibGDX] || Java || LibGDX ist eine Spielentwicklungsbibliothek für Java, mit der Spiele sowohl für Desktop- als auch für Android-Systeme erstellt werden können. Die Entwicklung von 2D-Spielen wird dabei besonders unterstützt, 3D-Spieleentwicklung ist allerdings auch möglich. LibGDX bietet ebenfalls fortgeschrittene Features wie Partikelsysteme und kommt mit einigen Tools. ||
 +
* [http://code.google.com/p/libgdx/wiki/TableOfContents?tm=6 Dokumentation und Tutorials]
 
|}
 
|}
  
Zeile 352: Zeile 349:
 
Solch ein Projekt (oder etwas Vergleichbares) ist zwar nicht besonders innovativ, aber als erstes eigenes kleines Spiel eignet es sich hervorragend. Der technische Anspruch ist gering, und am Ende wirst du mit Sicherheit sehr stolz auf dich und dein Spiel sein. Jeder Spieleprogrammierer erinnert sich sicherlich noch an sein erstes Spiel und an das damit verbundene gute Gefühl, etwas eigenes erschaffen zu haben. Auch wenn so ein erstes Spiel andere Spieler vermutlich "nicht gerade vom Hocker reißt" – lass dich davon nicht verunsichern. Jeder hat einmal klein angefangen, und der gewöhnliche Spieler hat gar keine Vorstellung davon, wie viel Aufwand es bedeutet, ein Spiel zu programmieren.
 
Solch ein Projekt (oder etwas Vergleichbares) ist zwar nicht besonders innovativ, aber als erstes eigenes kleines Spiel eignet es sich hervorragend. Der technische Anspruch ist gering, und am Ende wirst du mit Sicherheit sehr stolz auf dich und dein Spiel sein. Jeder Spieleprogrammierer erinnert sich sicherlich noch an sein erstes Spiel und an das damit verbundene gute Gefühl, etwas eigenes erschaffen zu haben. Auch wenn so ein erstes Spiel andere Spieler vermutlich "nicht gerade vom Hocker reißt" – lass dich davon nicht verunsichern. Jeder hat einmal klein angefangen, und der gewöhnliche Spieler hat gar keine Vorstellung davon, wie viel Aufwand es bedeutet, ein Spiel zu programmieren.
  
Eine gute Idee ist es, dein erstes Spiel der Spieleprogrammierer-Community ([http://www.spieleprogrammierer.de/12-projekte-workshops/ Forum zur Projektvorstellung]) vorzustellen. Die Community-Mitglieder sind sowohl Spieler als auch Programmierer/Entwickler. Sie können dir daher sehr wertvolles Feedback geben: einerseits zum Spiel an sich (Gameplay, Grafik, Sound, Steuerung, Schwierigkeitsgrad, ...), andererseits zur programmiertechnischen Umsetzung. Damit Letzteres möglich ist, solltest du auch den Quellcode veröffentlichen. Hier solltest du dich ''kritikfähig'' zeigen, denn es ist nicht unwahrscheinlich, dass buchstäblich jede Zeile deines Codes auseinander genommen wird. Das ist jedoch völlig normal, denn Programmieren ist hauptsächlich eine Erfahrungssache. Je mehr du programmierst, desto mehr wirst du erkennen, wie du gewisse Dinge schöner, kürzer, schneller und eleganter lösen kannst. Die erfahreneren Programmierer werden darum sehr viele Stellen in deinem Code erkennen, die du besser machen könntest, und dich darauf hinweisen. Es ist wichtig, dass du diese Kritik nicht persönlich nimmst, sondern versuchst daraus etwas zu lernen, so dass du es im nächsten Spiel besser machen kannst.
+
Eine gute Idee ist es, dein erstes Spiel der Spieleprogrammierer-Community ([https://www.spieleprogrammierer.de/12-projektvorstellungen-und-stellenangebote/ Forum zur Projektvorstellung]) vorzustellen. Die Community-Mitglieder sind sowohl Spieler als auch Programmierer/Entwickler. Sie können dir daher sehr wertvolles Feedback geben: einerseits zum Spiel an sich (Gameplay, Grafik, Sound, Steuerung, Schwierigkeitsgrad, ...), andererseits zur programmiertechnischen Umsetzung. Damit Letzteres möglich ist, solltest du auch den Quellcode veröffentlichen. Hier solltest du dich ''kritikfähig'' zeigen, denn es ist nicht unwahrscheinlich, dass buchstäblich jede Zeile deines Codes auseinander genommen wird. Das ist jedoch völlig normal, denn Programmieren ist hauptsächlich eine Erfahrungssache. Je mehr du programmierst, desto mehr wirst du erkennen, wie du gewisse Dinge schöner, kürzer, schneller und eleganter lösen kannst. Die erfahreneren Programmierer werden darum sehr viele Stellen in deinem Code erkennen, die du besser machen könntest, und dich darauf hinweisen. Es ist wichtig, dass du diese Kritik nicht persönlich nimmst, sondern versuchst daraus etwas zu lernen, so dass du es im nächsten Spiel besser machen kannst.
  
 
=== Kritischer Rückblick und die nächsten Spiele ===
 
=== Kritischer Rückblick und die nächsten Spiele ===
  
Nach dem ersten Spiel kommt das zweite. Versuche diesmal technisch etwas anspruchsvolleres umzusetzen und aus den Fehlern des ersten Spiels zu lernen. Schau dir dazu dein erstes Spiel und seinen Quellcode noch einmal genau an, und lies noch einmal die Kommentare, die du dazu erhalten hast.
+
Nach dem ersten Spiel kommt das zweite. Versuche diesmal technisch etwas anspruchsvolleres umzusetzen und aus den Fehlern und Schwächen des ersten Spiels zu lernen. Schau dir dazu dein erstes Spiel und seinen Quellcode noch einmal genau an, und lies noch einmal die Kommentare, die du dazu erhalten hast.
  
 
* Welche Aspekte des Spiels haben Spaß gemacht, welche nicht? Woran könnte das gelegen haben?
 
* Welche Aspekte des Spiels haben Spaß gemacht, welche nicht? Woran könnte das gelegen haben?
Zeile 368: Zeile 365:
 
=== Wie geht es weiter? ===
 
=== Wie geht es weiter? ===
  
Nun ist der Punkt erreicht, wo dieser Artikel endet, da es schwierig ist, hier noch allgemeine nützliche Hinweise zu geben. Du solltest das Wiki und das Forum benutzen, um dich über speziellere Themen zu informieren: Wie plant man ein größeres Projekt? Wie findet man weitere Programmierer, Grafiker, Audiodesigner, Musiker, ...? Wie organisiert man sich als Team? Wie kann man einen bestimmten grafischen Effekt am besten umsetzen?
+
Nun ist der Punkt erreicht, wo dieser Artikel endet. Es ist schwierig, hier noch allgemeine nützliche Hinweise zu geben. Du solltest das Wiki und das Forum benutzen, um dich über speziellere Themen zu informieren: Wie plant man ein größeres Projekt? Wie findet man weitere Programmierer, Grafiker, Audiodesigner, Musiker, ...? Wie organisiert man sich als Team? Wie kann man einen bestimmten grafischen Effekt am besten umsetzen?
  
Viel Erfolg!
+
''Viel Erfolg!''
 +
 
 +
[[Kategorie:Tutorial]]
 +
[[Kategorie:Für Einsteiger]]
 +
[[Kategorie:C++]]
 +
[[Kategorie:C-Sharp]]
 +
[[Kategorie:Java]]
 +
[[Kategorie:Python]]

Aktuelle Version vom 3. März 2019, 20:19 Uhr

Klicke hier, um diese Version anzusehen.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge