Wie programmiert man ein 2D Spiel?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Welche Sprache ist dafür am effektivesten?

Eigentlich wurde diese Frage hier schon des öfteren gestellt. Ich verlinke daher einmal einige meiner damaligen Antworten:

Und etwas anderes als in den beiden ersten Links würde ich nun auch nicht raten, außer, dass du Processing explizit in dein Java-Programm einbinden könntest, um dort die Zeichenfläche zur Verfügung zu haben.

Empfehlen würde ich erst einmal einfache und kleine Spiele wie Pong, Breakout, 4 Gewinnt, Tic Tac Toe, Snake, Conways Game Of Life oder als erste Hürde danach Pacman und Super Mario. Bei diesen Spielen kannst du selbst testen, inwiefern du es hinbekommst, eigene, effektive Algorithmen zu bilden - also definierte Probleme zu lösen.

Wie soll ich das am Besten lernen?

Wieder verweise ich hier auf Processing - das Prinzip allein, wie du deine Logik in das Applet einbindest (in die draw-Methode) verrät dir bereits einiges, wie Spiele in ihrer Basis funktionieren. Ein gar nicht so schlechtes Tutorial (zumindest für das Verständnis) könnte im Übrigen dieses sein, denn der Autor erklärt einiges über den Ablauf einer draw-loop und das Aufteilen in Layers bei einem Tileset-basierten Spiel. Er bezieht sich dabei nicht auf Processing.

Neben der Bearbeitung eigener Spiele und dem Anschauen solcher Tutorials kann, sobald du komplexere Anwendungen entwickeln möchtest, passende Literatur nicht verkehrt sein. Außerdem wäre es dann ratsam, sich langsam mit entsprechenden Bibliotheken/Frameworks/Engines vertraut zu machen.

Wie viel Zeit wird es dauern für einen Anfänger?

Kleine Spiele wie die oben genannten dürften dich höchstens eine Zeit gerechnet in Tagen kosten.

spieledev 
Fragesteller
 11.04.2018, 18:53

Danke für die Antwort! Ich habe mich für Processing und habe schon mit einem Tutorial Pong programmiert. Ich weiß jetzt was Variablen, if-else und Arrays sind. Nun bleibt mir eine Frage offen: Wie lernt man am effektivesten? Denn ich glaube nicht, dass man durch Code abschreiben etwas lernen kann, oder irre ich mich?

0
regex9  11.04.2018, 20:16
@spieledev

Du kannst dabei zwar tatsächlich etwas auswendig lernen, aber das ist in der Tat nicht das Ziel, was man erreichen möchte. Für die Einführung in ein neues Sprachelement (bspw. eine Schleife) ist es nicht schlecht, Beispiele nachzuprogrammieren und diese folgend abzuändern oder damit herumzuexperimentieren. Wenn das Beispiel zeigt, wie man von 0 bis 10 zählt, könnte man sich selbst die Frage stellen: Ok, und wie mache ich das alles nun rückwärts / o.a.? Wenn du verstanden hast, wie du mit dem neuen Element umgehen kannst (ohne noch für Syntax, etc. nachschauen zu müssen) und für den Moment keine weiteren Fragen dazu hast, mach weiter. Ansonsten recherchiere. Aber mache dich dabei auch nicht verrückt. Selbst wenn du einmal fortgeschritten / Profi bist, wirst du ab und an auf Dinge treffen, die dich vielleicht verwundern oder die dir aufgrund einer inzwischen neuen Perspektive Hintergründe mehr / besser erklären lassen. Es ist normal, dass man nicht von Beginn an alles zu 100% lernt oder versteht. Wie du damit umgehen kannst und was es offensichtlich tut, ist erst einmal das Wichtigste.

Mit der Zeit kannst du Elemente für Beispielaufgaben verbinden. Gerade zu If-Else, Arrays und Schleifen in Kombination lassen sich etliche Aufgaben finden (Vokale aus Wort entfernen, wie oben erwähnt Conways Game Of Life, usw.). Du kannst auch hier einmal für Übungen schauen: http://codingbat.com/java. Solltest du ein Buch als Lernquelle nutzen, finden sich ab und an Fragen am Ende eines Kapitels, die zu bearbeiten sind.

So wie du in der Schule rechnen und schreiben gelernt hast, lernst du also auch eine Programmiersprache.

Parallel zu der Programmiersprache wirst du des Weiteren lernen müssen, wie man Probleme angeht. Das ist letzten Endes auch das, was die Programmierung im Kern ausmacht: Probleme stellen, analysieren und dann schrittweise lösen. Dabei gibt es einige Grundsätze, an denen man sich orientieren kann. Das wohl wichtigste Konzept ist das von Teile und herrsche. Im Grunde geht es nur darum, ein Problem in Teilprobleme aufzuteilen. So lange, bis sie lösbar erscheinen (der Computer bricht schließlich auch alles in kleinster Einheit auf eine Addition herunter). Dann entwickelt man zu all diesen einen zusammengesetzen Lösungsweg. Dieses Bilden eines Algorithmus läuft noch fernab einer Programmiersprache ab. Deswegen werden gern Aktivitätsdiagramme oder Struktogramme zur Darstellung genutzt (erstere würde ich vorziehen, denn sie sind übersichtlicher und flexibler, schau nach UML-Software wie dem PapDesigner) und dann Schritt für Schritt in die konkrete Sprache übertragen. Pseudocode geht auch, oder Stichpunkte, was auch immer, ... Der Vorteil dabei liegt darin, dass du dich nicht selbst auf das begrenzt, was du kennst und wirklich erst über das, was du tun willst, nachdenkst. So lassen sich viel früher Ausnahmefälle finden und prinzipiell Fehler vermeiden.

Anhand kleiner Programme lässt sich das Bilden von Algorithmen sehr gut üben. Zudem gibt es einige Verfahrensweisen, die man zumindest einmal gehört haben sollte (z.B. den Dijkstra-Algorithmus).

Übungen, die mir gerade einfallen und die sich gut zum Üben eignen sollten:

  • Minispiele wie die oben bereits genannten
  • Taschenrechner (das wohl einfachste in dieser Liste)
  • Aufgabe: Zeichne auf einer quadratischen Zeichenfläche (Größe beliebig) mehrere verschiedenfarbige Rechtecke unter Nutzung von Schleifen und Funktionen
  • eigene Implementation von typischen Funktionen, die der Bearbeitung von Strings dienen (schau hier; z.B. split, trim, substring, toLowercase, etc.)
  • Implementation eigener Aggregate (Liste, Stack, Zirkuläre List, doppelt verkettete Liste, HashMap, AVL-Baum, Binärbaum, Graphen, ...) [OOP]
  • Suchalgorithmen (lineare Suche, binäre Suche, Alpha-Beta-Pruning)
  • TicTacToe mit einer KI (Minimax/Negamax-Algorithmus)
  • Rekursion (Berechnung von Fakultät, Fibonacci-Folge)
  • Schau mal hier für Anregungen - der rekursive Baum bspw. dürfte gut realisierbar sein
  • Traversion von Baumstrukturen und Graphen (Dijkstra) [OOP]
  • Sortieralgorithmen (schau dir die einzelnen Artikel zu Quicksort, Bubblesort, Mergesort, Selection Sort und Insertion Sort an und implementiere diese)
  • Eigener Iterator [OOP]

Die Punkte, die ich mit [OOP] gekennzeichnet habe, benötigen zumindest erste Anfangskenntnisse der objektorientierten Programmierung. Des Weiteren sind die Suchverfahren Alpha-Beta-Pruning sowie Minimax/Negamax etwas schwieriger. Versuche dich erst mit Papier und Stift oder an einem Zeichen-/UML-Tool und beginne erst mit der Programmierung, wenn der Algorithmus steht.

Fernab von dem Rat des praktischen Übens usw. musst du natürlich noch selbst deine beste Lern- und Tagesform finden (wenn du z.B. jeden Tag gegen 7 Uhr noch müde bist, bringt es nichts, in der Zeit programmieren lernen zu wollen). Gesundheitstrends etc. lasse ich an dieser Stelle aus.

1

Hallo. Bin auch 14 und habe Java gelernt (würde sagen ich bin fortgeschritten).
1. kann ich nicht sagen da ich nur die Basics von c++ kann und sonst nur Java.
Aber mit Java funktioniert es sehr gut.
2. da kann man nichts generelles sagen. Ich habe es mit Büchern und Tutorials im Internet gelernt.
TheSimpleClub ist sehr zu empfehlen (YouTube). Wobei deren Informatik Channel TheSimpleInformatics oder so heißt. Da sind ein Par Java Tutorials.
3. ist von Person zu Person anders.

Hoffe ich konnte dir ein bisschen weiterhelfen :)