FPS Dungeon Crawler programmieren

guut

Grünschnabel
Hi,

ich möchte gerne zwei mit zwei Projekten starten, die ich während meiner Freizeit in Angriff nehmen werde.

Eins vorweg, ich habe kaum Erfahrung in Programmiersprachen. Während meiner Ausbildung zum IT-System-Kaufmann habe ich Grundkenntnisse in: HTML, CSS, Java und PHP/MYSQL erlangt; die ich jedoch auch nochmals auffrischen müsste.

Von euch würde ich einfach gerne Ratschläge bekommen, in welchen Themen ich mich konkret einlesen sollte, für das was ich umsetzen möchte. Welche Programmiersprachen und Programme sich dafür eignen.

Mir ist klar das ich mich da einige Jahre dransetzen kann um überhaupt mal ein Teil von einem Spiel auf den Bildschirm zum laufen bringen werde.

Nun zu dem was ich umsetzen möchte:

Projekt 1 - Ein einfaches 2D Spiel es reicht ein Level mit der Spielfigur, ein paar Gegner auf der Map die man killen kann und ein paar Gegenstände zum einsammeln. Es soll ein Jum n Run wie Mario oder ein RPG / Adventure im Stil von Zelda sein.

Projekt 2 - Das eigentliche Projekt!
Ein Dungeon Crawler aus der Ego-Perspektive wie Dungeon Master, Eye of the Beholder, Lands of Lore, Might&Magic. Eigentlich 2D mit Pseudo 3D, dass den Bildschirm in Flächen aufteilt und die einzeln bebildert.

Ich stelle mir das so vor das ich im 1.Schritt mich zunächst in die Programmiersprachen einlesen werde, zu gegebener Zeit dann mithilfe von Tutorials einfache Programme schreibe und irgendwann dann anfange meine zwei Projekte umzusetzen. Es sollen auch keine fertigen Spiele werden einfach ein kurzer Abschnitt (Spielzeit von ein paar Minuten) in dem man ein paar Gegner killen, auf der Karte herumlaufen und mit Gegenständen/Umgebung, Türen etc. interagieren kann.
Und Darauf kann ich dann aufbauen und das erweitern wie weit es mir eben möglich ist.

Ich bedanke mich vorab schon mal für alle Antworten : )

Grüße,
Guut
 
Zuletzt bearbeitet:

pYroman1ac

Grünschnabel
Also da hast du dir ja einiges vorgenommen. Also bei der Programmiersprache würde ich dir auf jeden Fall C++ empfehlen, auch wenn die Einarbeitungszeit etwas länger ist.

Neben den Grundlagen der Sprache solltest du dich im Speziellen mit Vererbung und Polymorphismus auseinandersetzen.

Dann benötigst du ein Grafik-Framework. Ich hab meine Minispielchen für die Uni mittels OpenFramworks (OpenGL) programmiert. Gute Doku, gute Community, ich kanns empfehlen. Fang klein an. Zeichne mal Rechtecke oder Kreise und animiere sie um zu verstehen wie so ein Grafikframework funktioniert.

Zu den Techniken: verwende eine "Tile-Based" Map und "Tile-Based-Collisiondetection" und Sprites zur Animation. Bevor du dich allerdings mit diesen Sachen beschäftigst würde ich dir schwer ans Herz legen die Grundlagen von C++ zu beherschen, sonst stellt sich sehr schnell Frust ein wenn nach jeder Zeile die du hinzugefügt hast der Compiler schreit.

Und ganz wichtig, ich habe den Fehler gemacht einfach drauf loszuprogrammieren ohne irgendwas zu Planen. Im Endeffekt bin ich dann auf einmal nicht mehr weiterbekommen und musste die ganze Klassenstruktur umschreiben. Also plane im Vorraus und mach dir genau Gedanken darüber was du drin haben möchtest in deinem Spiel.

Ich wünsch dir viel Erfolg und viel Spaß (und gute Nerven :) )

Lg
Daniel
 

sheel

I love Asm
Hi

wenn es nur um 2D geht ist OpenGL bzw. DirectX nicht wirklich nötig.

Im C/C++-Bereich lässt sich das auch mit Libs wie SFML bzw. SDL leicht lösen.

Aber: Wenn schon Grundkenntnisse in Java vorhanden sind, kann man 2D-Spiele auch problemlos in Java machen.

3D ist zwar mit Java möglich, aber dann ist doch C/C++ die erste Wahl.

Kommt also darauf an, was du in Zukunft noch vorhast...

Gruß
 

guut

Grünschnabel
Danke für eure Antworten. Ich habe mich jetzt noch über die Programmiersprache "Blitzbasic", "Blitzmax" erkundigt. Die soll ja gerade für Spiele Entwicklung ausgelegt und auch für Anfänger leichter zu erlernen zu sein.

Habe mir nun das Programm Blitzmax und ein deutschsprachiges Buch dazu besorgt mit dem Titel: "Jetzt lerne ich Spiele programmieren mit Blitz Basic".

Wenn ich damit zurechtkomme, dann fange ich mit C++ an. Ich denke dann wird mir der Einstieg auch leichter fallen oder was meint Ihr ?

Habe mir zu C++ ebenfalls ein Buch besorgt + CD mit Beispielen. Das buch trägt den Titel:
"C++ für Spieleprogrammierer".

Wie wird der Pseudo 3D Effekt in den guten alten FPS Dungeon Crawler denn umgesetzt und wie nennt sich diese Technik übrigens ?

Grüße
 

pYroman1ac

Grünschnabel
Das kommt darauf an was du willst. Wenn du schnelle Ergebnisse willst ist Blitzbasic sicher nicht schlecht (allerdings für ein Framework zu zahlen...naja....)

Wenn du viel Zeit hast und dich ernsthaft mit dem Thema Spieleprogrammierung auseinandersetzen willst, dann kommst du meiner Meinung nicht darum rum C++ zu lernen, auch wenn das viele abschreckt. Es ist nun mal eine sehr mächtige und effektive Sprache. Wahrscheinlich (Vorsicht Halbwissen/Vermutungen) wirst du mit Blitzbasic irgendwann mal an eine Grenze stossen, die es in C++ nicht gibt.

Ich studiere im 3. Semester Games & Augmented Reality und bei uns dreht sich alles nur um C++ (zumindest wenn es um die Spieleprogrammierung geht), aber wie gesagt musst du selber wissen was du willst, welche Erwartungen du bei deinen Projekten hast und vor allem wieviel Zeit du aufwenden kannst.

Auch wenn das jetzt vielleicht präpotent klingt, vor allem weil ich wenig Erfahrung mit anderen Programmiersprachen hab, aber ich glaube das C++ prädestiniert ist für die Spieleprogrammierung. Ein weiterer Vorteil ist, dass wenn du C++ kannst so gut wie alles programmieren kannst was du möchtest, nicht nur Spiele :)

Ich kenne leider das Spiel Dungeon Crawler nicht, aber wenn du mir einen Link zu einen YouTube Video (ich find da leider nicht das richtige glaub ich) postest, kann ich dir vielleicht sagen um welche Technik es sich handelt (warum machst du dein Projekt denn eigentlich nicht gleich in 3D? ;-) )
 
S

SE

Also das man Java nur für 2D Games nutzen kann ist schlicht untertrieben.
Java eignet sich hervoragend auch für 3D Games. Natürlich in Verbidung mit OpenGL.
Bestes Beispiel hierfür ist Jake2.
Ein komplette portierung von Quake2 nach Java. Sehr performand und erreicht unter guten Umständen mehr als 200FPS. Allerdings nimmt dir Java hier nichts ab und es ist mehr ein proof-of-concept , aber es Zeigt das die Zeit in der C und seine Ab-Arten diesen Sektor dominiert haben abgelaufen ist. Das man für sowas natürlich eine JVM und OpenGL braucht die beide in C *oder Ab-Art* geschrieben sind will ich hier nicht verleugnen ... nur zeigt es das man nicht ALLES in C schreiben muss.
 

Steiner_B

Erfahrenes Mitglied
Hallo,

@SPiKEe: Ja man kann mit Java 3D-Ausgaben erstellen, aber du wirst nicht mal annähernd in den Performancebereich von C kommen, da Java nunmal nicht in Maschinencode kompiliert wird, sondern nur als Zwischencode in der JVM läuft.
Ein weiterer Grund ist, dass dir Java3D schon eine gewisse Grunddatenstruktur (in diesem Fall Scenegraph) vorschreibt, was aber für Spiele nicht immer die beste Variante ist, da dadurch schon eine ganze Menge Einschränkungen existieren. Auch wir an der Uni (Informatik Schwerpunkt Game Development and Virtual Reality) verwenden für Echtzeitanwendungen nur C++.
Die Java3D Schnittstellen sind wirklich gut wenn man einfache Visualisierungen braucht, aber für ein modernes Computerspiel würde ich keinem Empfehlen damit zu arbeiten.
 

sheel

I love Asm
Damit ich auch nocheinmal meinen Senf dazugebe,
@Spikee mit Jake2:

Kann man wirklich Quake 2 als Beispiel für ein Spiel nehmen, das technisch/leistungsmäßig State of the Art ist!? Dass Java dieses Spiel auf heutigen Rechnern flüssig schafft, wundert mich nicht wirklich.
Wenn ich mich richtig erinnere, war die Quake2-Engine die Basis für i.d´s Goldsource
und damit HalfLife (1 natürlich) ... ist damit ca. 15 Jahre alt.
Ich möchte mir lieber gar nicht vorstellen, wie ei COD-BlackOps in Java laggen würde.
Das ein moderner Rechner dieses Spiel mit C schafft, ist eine erwiesene Tatsache.

Gruß

Btw.: Dein Avatar ist doch Gordon Freeman, oder? :D
 
Zuletzt bearbeitet:
S

SE

1) Ja , die Quake2-Engine ist der Vorläufer der GoldSrc-Engine.
2) Nein , diese hat nicht i.d. sondern VALVe entwickelt. Genauer gesagt wurde laut VALVe ein großer Teil der Engine entweder umgeschrieben oder komplett erneuert. Mit der ursprünglichen Quake2-Engine hat die GoldSrc-Engine nur noch in ihren tiefsten Grundlagen etwas zu tun.
3) Ja , Half-Life ist mitlerweile 13 Jahre alt *oder genauer : wird es im Winter noch* *OT : gekürzt* , aber es ist dennnoch ein Vorzeigeprojekt und war damals mehr als "nur" Stat-of-the-Art.
4) Ja , es ist Gorden Freeman ... im Schutzanzug *um auf das Ende von HL1 anzuspielen*.

PS : stell dir mal Portal2 in Java for ... wenn es selbst in C schon auf einem 2 Jahre alten PC bei 1280x720 und voller Grafik anfängt Einbrüche unter 60FPS zu haben *der PC ist hochgetaktet und mit modernster Hardware aufgerüstet* ... dann möchte ich es mir garnicht ausmalen wie lange es in Java dauern würde auch nur ein einziges Frame zu rendern.

Aber genug OT ...

Ich will ja auch gar nicht behaupten das moderne Spiele in einer JVM überhaupt oder gar flüssig laufen. Alleine schon wegen den in Java nicht gegebenen Möglichkeiten wie ShaderModel , Anti-Alaising , Anastrophic Filtering , High Dynamic Range Rendering und der gleichen ... aber Java als "Flash-Ersatzt" in die 2D-Rubrik zu verbannen halte ich dennoch etwas zu hart.

Fakt ist : auch wenn ich ein harter Kämpfer für Java bin muss ich mich im Punkt Spieleentwicklung der C-Community geschlagen geben da Java hier einfach
1) nicht genug Power hat
2) zu viele Einschränkungen deren Umgehung die Leistung noch weiter senken würde
 
@SPiKEe: Ja man kann mit Java 3D-Ausgaben erstellen, aber du wirst nicht mal annähernd in den Performancebereich von C kommen, da Java nunmal nicht in Maschinencode kompiliert wird, sondern nur als Zwischencode in der JVM läuft.
Auch Java kann und wird von der JVM teils zu Maschinencode runterkompiliert, nennt sich dann JIT-Kompilierung.

Ein weiterer Grund ist, dass dir Java3D schon eine gewisse Grunddatenstruktur (in diesem Fall Scenegraph) vorschreibt, was aber für Spiele nicht immer die beste Variante ist, da dadurch schon eine ganze Menge Einschränkungen existieren.
Mit Java musst du genauso wenig Java3D verwenden, wie du mit C++ OpenSceneGraph o.ä. verwenden musst. JOGL und LWJGL existieren.

Ich will ja auch gar nicht behaupten das moderne Spiele in einer JVM überhaupt oder gar flüssig laufen. Alleine schon wegen den in Java nicht gegebenen Möglichkeiten wie ShaderModel , Anti-Alaising , Anastrophic Filtering , High Dynamic Range Rendering und der gleichen ... aber Java als "Flash-Ersatzt" in die 2D-Rubrik zu verbannen halte ich dennoch etwas zu hart.
Alles genannte kannst du auch mit Java machen. Schau dir z.B. mal die JOGL-Demos an.

Die Diskussion Java vs. C++ ist hier aber sowieso müßig. Der OP will kein Crysis 3 programmieren, sondern ein grafisch eher simples Spiel. Dafür braucht man nicht zwingend C++.

Grüße,
Matthias