Java Leitfaden für Siele-Programmierung

FAN4TIC

Lt. Commander
Registriert
Nov. 2007
Beiträge
1.738
Leitfaden für Spiele-Programmierung

Hallo :)

Ich muss im nächsten Semester ein kleines 2D Spiel in Java programmieren. Nur leider habe ich von Spiele-Programmierung keine Ahnung und würde meine freie Zeit dazu nutzen, um als Vorbereitung schon mal ein kleines Spiel zu coden.

Was ich suche ist eine Art Leitfaden (online, kein Buch), welches ein Spiel programmiert und dabei das Wichtigste erklärt. Es soll vom Umfang her kein Minecraft werden, aber sowas wie ein kleines Bomberman, ein Dungeon Crawler oder Jump&Run z.B. . Auch wenn es ein eher kleines Spiel wird, ist das Projekt an sich ja nicht so simpel. Man benötigt viele versch. Klassen die miteinander in Beziehung stehen usw.
Da mir vorallem die Erfahrung mit größeren Programmen fehlt, wäre so ein Leitfaden ganz hilfreich.

Außerdem fallen mir einige Fragen ein, die ich programmier-technisch nicht auf Anhieb zu lösen wüsste. zB. wie ich das mit der Eingabe+ Bewegung der Spielfigur+ Zeichnen d. Bewegung auf dem Bildschirm und der Kollision mit anderen Objekten machen würde.

Genau für solche Problemstellen such ich halt einen Leitfaden.

Ich habe schon das hier gefunden:

http://www.petrastumpf.de/michael/Wissen/SpieleprogrammierungInJava.pdf
Ist schon relativ gut, aber er verwendet zusätzliche Bibliotheken. Ich muss mit dem Standard-Java Bibliotheken auskommen.

http://www.java-applet.de
Ziel dieses Tutorials ist es zwar ein Applet zu bauen, aber das sollte 1:1 übertragbar sein da Applets ja nichts anderen sind als Java Programme im Browser. (glaube ich)

Ich bedanke mich jetzt schonmal für eure hilfreichen Links oder jede andere Art von Hilfe.


LG


Fan4tic
 
Zuletzt bearbeitet:
Genau sowas wie du vor hast passen locker in ein Semester Info-Grundlagen. Besorg dir alte Skripte und Übungen.
 
Schreib dir deine Probleme auf und löse sie Stück für Stück in Teilprobleme auf, die du dann weiter zerlegst. Am Ende hast du dann quasi einen Pseudocode, der du nur noch in Java umsetzen musst.

Beispiel:

Problem:
Die Spielfigur muss sich auf Knopfdruck vorwärts bewegen.

Teilprobleme, die 1.:
Wo ist die Spielfigur jetzt? (Antwort sofort aus dem Spielfigur-Objekt heraus ersichtlich)
Wo ist sie nach der Bewegung? (Methode erstellen, um das zu berechnen)
Welche Taste muss ich überwachen? (Oha, das Problem muss weiter zerlegt werden.)

Teilprobleme, die 2.:
Wie kann ich kontinuierlich eine Taste überwachen? (Schleife!)
Wie überwache ich überhaupt eine Taste? (Scanner-Klasse)

Teilproblem, die 3.:
Wie verbinde ich die Tastatureingabe mit der Bewegung und der Spielfigur? (Du hast bereits alles, was du brauchst. Du musst nur noch die richtige [selbstgeschriebene] Methode aufrufen.)



Merke, es gibt kein Patentrezept. Auch nicht bei der Spieleprogrammierung. Da gibt es unzählige Vorgehensweisen, die alle mehr oder weniger zum Ziel führen. Mach dir nicht so einen Kopf, in der Vorlesung oder in der Übung wirst du schon so angeleitet, dass am Ende auch was Vernünftiges herauskommt.
 
es gibt die key-pressed-action, also kein problem die firgur auf knopfdruck bewegen zu lassen bzw. code auszuführen
 
Kollisionsprüfung bei 2D sollte ziemlich einfach sein. Du kannst dein Spielfeld rastern und die angezeigten Elemente in einer Tabelle halten. Z. B. an Pos 1/1 = Object 1 (= nichts), Pos 1/2 = Object 2 (=Wand, Kollisionsbereich), Pos 2/1 = Object 3 (=Bonuskiste, da gibt es Bonuspunkte)usw.
Die Figur selbst hat ebenfalls Koordinaten aus der Rasterung. Der Rest sollte selbsterklärend sein.

Ein Listener für die Tasten sollte auch klar sein. Hier wird dann aus der Tabelle (siehe oben) nachgeschaut, was sich an der neuen Position befindet und dann die entsprechende Methode aufgerufen.

Beispiel 1:
Figur hat Pos 1/1 und es wird Pfeil-Taste Rechts gedrückt, dann wird Methode rechts() aufgerufen. Diese Methode prüft, was sich bei Pos 1/2 befindet --> Object 2 (=Wand). Dann wird die Methode kollision() aufgerufen, welche nur einen speziellen Kollisions-Sound ausgibt.

Beispiel 2:
Figur hat Pos 1/1 und es wird Pfeil-Taste Unten gedrückt, dann wird Methode unten() aufgerufen. Diese Methode prüft, was sich bei Pos 2/1 befindet --> Object 3 (=Bonuskiste). Es wird die Methode bonuskiste() aufgerufen, welche die Figur auf Pos 2/1 verschiebt, in der Tabelle an Pos 2/1 die Kiste durch nichts entfernt (Object 1 setzen) und die Punkte erhöht.

Ein Leveleditor wäre auch denkbar. Der müsste im Prinzip nur die Tabelle erstellen.

Schwierig sind bewegliche Elemente (Gegner, fallende Steine,...). Die musst du in einer kontinuierlich laufenden Schleife neu zeichnen, d. h. die Objekte in der Tabelle neu setzen. Hier kannst du auch wieder die Methoden von oben verwenden und bei Kollision mit der Spielfigur ein Leben abziehen und das Level neu starten. Problematisch sind diese sich bewegenden Elemente, weil die einen vorgegebenen Weg nehmen. Da musst du dir was überlegen, wie du diese Daten dir merkst. Sollte aber machbar sein.

Probleme könnte Multitasking sein, d. h. wenn z. B. ein fallender Stein und deine sich bewegende Figur sind unabhängig. Da musst du evtl. syncronisieren / alles Threadsafe machen.

Beim Zeichnen gab es einen Trick, dass man die Zeichnung versteckt, alles zeichnet und zum Schluss die Zeichnung anzeigt. Das wirkt flüssiger.

Statische Objekte beschleunigen theoretisch den Ablauf, allerdings wird vermutlich die grafische Ausgabe den Löwenanteil der Zeit verbrauchen.

Da bekommt man gleich selbst Lust, so ein Spiel zu programmieren :-)
 
Zuletzt bearbeitet:
@Hades85: Danke schau ich mir mal an :)

Genau sowas wie du vor hast passen locker in ein Semester Info-Grundlagen. Besorg dir alte Skripte und Übungen.

Ich habe mir die Skripte & Übungen der Informatik Grundlagen schon angesehen.
da werden eher Grundkenntnisse beigebracht, wie Variablen& Objekte, Klassen, dynamische Datenstrukturen, Such/Sortierverfahren. aber trotzdem Danke :)

e-Laurin, tnoay, wahli:
ich danke euch vielmals für eure Erklärungen. Ich bin mir sicher das sie mir helfen werden. :)


Ich fang dann einfach mal an. mal schaun was draus wird.
 
Kollisionen machst einfach indem du die Positionen prüfst.
Wenn von links ein Wagen fährt und rechts eine Wand steht, dann darf die X Koordinate des Wages nicht größer sein als die der Wand - ansonsten Crash. Falls du Vektorrechnung beherrschst, das geht auch mit Richtungsvektoren usw.

Für Bewegungen halt Keyboard input und solange eine Taste gehalten wird x oder y erhöhen. Nach jeder Bewegung Kollisionsprüfung. Auch das geht mit Vektoren.

Zeichnen tust einfach das ganze Panel wo gezeichnet wird nach einem Timer, bzw. nach jeder Bewegung.
 
FAN4TIC schrieb:
Ich fang dann einfach mal an. mal schaun was draus wird.

Ist meiner Meinung nach der falsche Ansatz. Wir haben im vierten Semester mal ein Point and Click Adventure für die Uni geschrieben, das war relativ einfach, weil wir keine beweglichen Objekte hatten und keinerlei Kollisionen etc. darstellen/berechnen mussten.

Planung ist meiner Meinung nach alles, Architekturdokumente, Klassendiagramme, verwendete Patterns. Mach' dir klar was du genau für Funktionen haben magst und welche auf jeden Fall vorhanden sein müssen und welche optional bis unwichtig sind.

Je nachdem für welche Vorlesung du das machst, will das der Prof eh sehen.

Nutze vor allem Game Patterns, bspw. solche Geschichten wie eine Main-Game-Loop, etc. das kann viel helfen. Außerdem nicht unwichtig, wie schon gesagt wurde, große Probleme/Funktionen in kleine Pakete teilen und schauen wie du kleinen Sachen am Besten umsetzen kannst.

Eine gute Anlaufstelle für Game Patterns findest du hier.


PS : Jetzt hab ich auch wieder Lust :D

Gruß
 
Zuletzt bearbeitet:
Ich fang dann einfach mal an. mal schaun was draus wird.

Damit meinte ich eigentlich, das ich mit dem Planen anfange :)
Direkt mit dem Programmieren wollte ich jetzt nicht beginnen.
Planung ist meiner Meinung nach alles, Architekturdokumente, Klassendiagramme, verwendete Patterns. Mach' dir klar was du genau für Funktionen haben magst und welche auf jeden Fall vorhanden sein müssen und welche optional bis unwichtig sind.
Das meinte ich mit "ich fang dann einfach mal an" ^^

vielleicht etwas missverständlich formuliert.
 
Ich teile nur bedingt die Meinung, dass man nicht sofort einfangen sollte.
Gerade, wenn man mit dem Thema bis jetzt nicht wirklich was am Hut hatte und es für sich selbst lernt, so weiß man doch gar nicht, welche "Planung" für einen und für das Projekt die Richtige ist. Das bekommt man nur durch Praxis, also nicht 3Jahre lang planen und dann feststellen "ops, so geht es doch nicht", sondern immer mal was machen. (z.b. Prototypen für einzelne Sachen usw).

Das Forum hilft Anfängern normal viel:
http://www.spieleprogrammierer.de/

Da gibt es auch Sammelthreads von Planung, Umsetzung bis sogar zur Vermarktung. (Das Forum ist eng verbundelt mit einem C++ Spieleprogrammier-Buch, daher sind viele Sachen mit C++, Java aber auch häufig dabei). Es geht aber eher um die Sammelthreads und Erfahrungen.

Vllt. steigst du auch einfach in ein Projekt mit ein, die suchen immer Leute. ;)
 
Zurück
Oben