# wie richtig spiele programmieren ?



## FreakNerd (27. Mai 2011)

Hi erstma =)
mein erstes thema in diesem forum 

es geht um Spiele programmierung >.< "titel"
ich hatte schon einbischen erfahrung mit vb allerdings war mir das einbischen zu viel "microsoft" 

ich möchte nämlich spiele programmieren ^^ nicht einfach so pille palle sondern langsam anfangen und mich dan richtig reinsteigern  (2d und auch 3d spiele) 

was ich allerdings noch nicht so weiß ist ... 
welche Sprache eignet sich eigentlich am besten für spiele ? 
man hört immer wieder C++ allerdings ist C++ schon etwas älter und bei Java redet man von " der Sprache der Zukunft" *.* 
und was ist eigentlich mit C# (naja wieder bisschen zu viel Microsoft  ) 

würde gern eure Professionelle Meinung erfahren ... 
und vielleicht könnt ihr ja gleich paar links zu tuts posten ^^ 

~mfg FreakNerd


----------



## Kr0e (27. Mai 2011)

Hi,

da du deine Frage in einem Javaforum postest, ist meine Antwort: Nimm Java ;-)
Ohne jetzt eine Megadiskussion vom Zaun zu brechen, aber kurz meine Meinung zu diesem Thema:

C++ würde ich nicht empfehlen, da der Mehraufwand bei der Programmierung für ein One-Man-Project zu gewaltig ist und vermutlcih köntnest du dann noch nichtmals einen großen Nutzen draus ziehen, da C# / Java ungefähr gleich schnell sind. Die Bottlenecks sind bei Spielen sowieso woanders...

C# ist auch geil, aber leider limiert auf Microsoft und es gibt ja noch weitere Plattformen als Windows 

Java ist und bleibt eigentlich ne super Sache für Spiele. Leider gibt es keine vergleichbaren Engines wie die Sourceengine z.B... Außerdem sind die ganzen Spieleprogrammierer an C++ gewöhnt... Ergo für eine Firma wäre es teurer zur Zeit, weil eben die Infrastruktur noch nicht da ist bei Spielen. Aber ich wette, das wrid sich ändern in den kommenden Jahren.

Wenn du Spiele für Java machst, führt keine Weg an den 0815 Engines vorbei "jMonkeyEngine", "Ardor3D", "jPCT" und für 2D Spiele natürlich Slick. All diese Engines nutzen OpenGL, wodurch du wirklich schnelle Applikationen erstellen kannst...

ABER:

Glaub mir, wenn ich sage, dass meistens die größte Schwierigkeit bei einem Spiel die Spiellogig ist und nicht die Technik, obwohl diese auch nicht ganz simpel ist  Also erstmal ne gute Idee zu einem Spiel machen und dann anfangen. Wenn du kaum Erfahrung im Bereich OpenGL hast, währen Tut für dich unerlässlich. klar, eine Engine nimmt viel ab, aber wenn du nciht verstehst, was unter der Fasade geschieht, wirst du endlos viele Probleme haben...

Gruß,

Chris


----------



## FreakNerd (27. Mai 2011)

danke für deine schnelle antwort chriss =D 
hast mir echt weitergeholfen =D

da ich noch nicht so viel erfahrung mit programmieren habe 
hätte ich vieleicht noch eine frage  
sind die unterschiede zwischen spiele programmieren und programme für PCs und Handys etc. 
groß ?


----------



## Kr0e (27. Mai 2011)

Achja:

Kenntnisse über lineare Algebra (Vektor/Matrizen Rechnung) sind unerlässlich!


----------



## FreakNerd (27. Mai 2011)

> Java ist für Spiele eigentlich sehr ungeeignet. Java wurde dafür entwickelt, dass es auf jedem System läuft, egal welches OS oder welche Rechenarchitektur. Dafür muss es aber in eigener Laufzeitumgebung laufen und teile des Programms werden während der Laufzeit kompiliert. Das macht das ganze sehr langsam und das kann man bei Spielen so gar nicht gebrauchen. Es werden zwar auch Spiele in Java programmiert, das sind aber idR kleine "Mingames".


was sagste dazu  
hab ich gerade in nem anderen forum gelesen ^^


----------



## Kr0e (27. Mai 2011)

Datum ? Vor ein paar Jahren traf das auch noch auf Java zu vermute ich mal.. Als es noch nicht "Hotspot"/Just-In-Time gab.
Naja, aber wenn der Beitrag "relativ" neu ist... Dann ist das einfach Stuss... Du kannst es ja ganz einfahc ausprobieren: Bau dir iwas aufwendiges mit Java und C++ und lass es testen. Vertrau mir einfach, wenn ich sag, dass Java verdammt performant ist und die Unterschiede stätig mit neuen , leistungsstarken Rechnern sinken.

Fakt ist: Zeit ist Geld.

Versuch mal ein ganz simples OpenGL - Programm mit C++ zu schreiben und dann bitte direkt mit Präpozessorangaben, sodass es sich ohne Probleme auf allen Plattformen compilieren lässt... Und dann nimm Jogl/Lwjgl. 10tel der zeit 


Viele Leute schreiben so einen übertriebenen Mist "Das macht das ganze sehr langsam" weil sie selber vermutlizhc C++ Gurus sind und traurig sind, dass Java viel ebsser ist  Ja, Java mag heir und da was langsamer sein ABER:

Es gibt auch endlose Vorteile:

Eigenes Memory Modell z.B.!! Ich erwarte nicht ,dass dir das was sagt, aber alles was mit Multithreading zu tun, ist bei Java von Haus aus unterstützt und auch so geniale Sachen wie true-volatile Variablen und komplexe ExecutorServices sind direkt dabei.


Ich glaube, so eine Aufuählung kann man tagelang weiterführen und aus der hintersten Ecke kommt dann wieder der C++-Prorgammierer und kommt mit dem Totschlagargument: "Ist aber shcneller!"

Die meisten Rechner sind doch eh nicht zu 100% ausgelastet bei Games und wenn doch, dann kaufen die sich direkt einen neuen, noch schnelleren Rechner!

Außerdem: Wenn JAva langsam ist, liegst fast immer am Programmierer, der ieinen Murks gec(k)odet hat 

Es gibt sogar Beispiele, wo Java schneller ist, als C++, da die JVM unmenschlich viele optimierungen vornimmt intern, klar das tuhen C++ Compiler auch, aber es gibt diese Beispiele!

Außerdem wrüde ich an deiner Stelle lieber die Zeit mit was sinnvollerem verbringen (Spiellogig büerlegen, opengl einarbeiten, etc), als damit, iwelche Argumente gegen Java zu suchen


----------



## Kr0e (27. Mai 2011)

Google ist toll:

Dein Beitrag ist hierher:

Alt 07.02.2009, 11:52 	  # 11
waldvogel

Registriert seit: 27.03.2007
Beiträge: 4.903

Standard
Java ist für Spiele eigentlich sehr ungeeignet. Java wurde dafür entwickelt, dass es auf jedem System läuft, egal welches OS oder welche Rechenarchitektur. Dafür muss es aber in eigener Laufzeitumgebung laufen und teile des Programms werden während der Laufzeit kompiliert. Das macht das ganze sehr langsam und das kann man bei Spielen so gar nicht gebrauchen. Es werden zwar auch Spiele in Java programmiert, das sind aber idR kleine "Mingames".
C++ ist dagegen eine sehr mächtige Sprache. Man kann objektorientiert programmieren, dabei aber trotzdem einen effizienten Code schreiben und auf viele Feinheiten achten.

Sicherlich gibt es neben C++ eine Vielzahl anderer Sprachen, allerdings ist dann oft das Programmieren sehr aufwändig oder der Code nicht so effizient.
Aber ein anderer Grund warum C++ gerne genommen wird ist sicherlich auch, weil das eigentlich jeder Programmierer kann. 

Also: Stuss


----------



## FreakNerd (27. Mai 2011)

danke danke dir =D 
habe ne zeit lang gesucht und konnt mich nicht entscheiden, was jetzt java oder C++
aber du hast mich jetzt überzeugt =D 
jetzt kann ich mit reinem gewissen java lernen xD


----------



## Kr0e (27. Mai 2011)

Ich verstehe zwar deine Bedenken, denn das "Entscheiden" für eine Programmiersprache ist "vorerst" soetwas "entgültiges" und man will natürlich nicht aufs falsche Pferd setzen... Aber in der Hinsicht... keine Sorgen  Um deine Bedenken zu vernichten:
Schau dir doch einfach die applikationen an, die mit Java gemacht sind und bewerte dann die Leistung von Java. 

Nasa Worldwind ist mit Java gemacht...

Aber um bei der ganzen Wahrheit zu bleiben:

Die Wiedergabe von Medien (insbesondere von Filmen) ist zwar problemlos möglich aber relativ schwierig.. Aber es kann ja uach nicht nur Vorteiel geben 

Aber ein klares Pro sind die zahlreichen SEHR guten IDEs Netbeans + Eclipse... Alles für Lau  Netbeands hat sogar einen kostenlosen GUI Builder... einfach nur Hammer!


----------



## schalentier (27. Mai 2011)

Auch wenns kein Java ist, vielleicht is UNITY: Game Development Tool eher was fuer dich?


----------



## Firephoenix (28. Mai 2011)

Hi,
das Problem das hier übersehen wird: Auf dem Kenntnisstand ist die Sprache egal.
Er sagt selbst er ist noch Anfänger, da macht es keinen Unterschied ob er C++ oder Java benutzt, die Grundprogrammierkonzepte wie man programme entwirft etc bleiben die gleichen. Und bevor er an die Grenzen der Sprachen kommt wird er eh an seinen eigenen Grenzen scheitern.
Man kann soviel Performance rausholen, wenn man einfach seine Algos verbessert und dort Zeit spart.
Erst wenn man da wirklich alles bis auf das kleinste runtergebrochen hat ist finite.
Zu den Argumenten ob Java als Programmiersprache geeignet ist gibt es auch recht gute Literatur die sich ausgiebig damit beschäftigt wie z.b. Killer Game Programming oder Developing Games in Java.
Insbesondere das 2. geht ausgiebig auf performanzoptimierung ein.
Ansonsten habe ich irgendwo auch mal einen Link gehabt wo jemand eine Arbeit darüber geschrieben hatte, in der auch Vergleiche mit der Quake-Engine geführt werden. Der Autor sagt allerdings dort selbst, dass Leistungunterschiede wohl eher auf Programmierstil als auf Sprache rückgeführt werden können: theses.fh-hagenberg.at | Diplomarbeitsarchiv
Gruß


----------



## Kr0e (28. Mai 2011)

@Firephoenix:

Ich weiß nicht, ob man sagen kann, dass es egal ist, ob man C++ und Java lernt (Auch wenn man noch von beiden keine Ahnung hat). Er will ja grundsätzlich Spiele schreiben und da unterscheiden sich die beiden Sprahcen erheblich, DENN:

Ich vermute mal, er wird, so wie jeder vernünftige Programmierer, ein bereits existierendes Framework benutzen und da ist C++ erheblich komplexer und schwieriger. Bei Java klatscht man mal eben die Jars in den Classpath und fertig. Bei C++ sollte es zwar im Prinzip auch so gehen aber in der Praxis wird man häufig mit den bescheuertsten Problemen konfrontiert! Probleme die z.B. nur bei MinGW entstehen und bei dem Linux GNU Compiler überhaupt nicht... Das kann einen echt zur Verzweiflung treiben, gerade wenn das Probleme sind, die so speziell sind, dass dir keiner helfen kann in den Foren.

Daher: Java ist um einiges umgänglicher als C/C++. Ich denke sowieso, dass das das Hauptkriterium sein sollte und nicht die vermeindliche Performanceschwäche von Java. Wenn man C++ lernt, muss einem klar sein, was dann auf einen zukommt. Die Syntax ist recht ähnlih aber das ist auch das geringste Problem....


----------



## schalentier (28. Mai 2011)

@Firephoenix: Deshalb hab ich ja UNITY verlinkt. Das ist quasi nen 3D Editor, in dem man auch Skripten kann. Soll ziemlich gut sein und man kann fuer alle moeglichen und unmoeglichen Platformen "compilieren" (von Windows ueber Mac bishin zu iOS und Android).


----------



## Kr0e (28. Mai 2011)

Ich habe zwar nur einen flüchtigen Blick auf die Unityseite geworfen, aber ich glaube Unity ist nicht ganz kostenlos für die Entwickler... Das sollte man dann natprlich auch erwähnen  Es sei denn, ich habs falsch verstanden, dann korrigiert mich bitte!


----------



## schalentier (28. Mai 2011)

UNITY: License Comparison

Die normale Version ist erstmal kostenlos, sobald deine Firma mehr als $100000 Umsatz macht, brauchste die Pro Lizenz. So wies aussieht, muss man fuer Android/iOS auch extra bezahlen.


----------



## Fu3L (28. Mai 2011)

> ei C++ sollte es zwar im Prinzip auch so gehen aber in der Praxis wird man häufig mit den bescheuertsten Problemen konfrontiert! Probleme die z.B. nur bei MinGW entstehen und bei dem Linux GNU Compiler überhaupt nicht... Das kann einen echt zur Verzweiflung treiben, gerade wenn das Probleme sind, die so speziell sind, dass dir keiner helfen kann in den Foren.



Ich habe mal Allegro installiert, eine Bibliothek für 2D-Spiele, das funktionierte nach einem Tag rumprobieren irgendwann auch. Ich schrieb mir auf, wie ich es zum Laufen brachte und speicherte alle verwendeten Programme auf meiner Externen. Ist auch ein kleines Gedächtnis/Geschicklichkeitsspiel mit entstanden... Als mein Laptop dann mal in Reperatur musste und alles weg war, habe ich mit diesen Programmen genau den Anweisungen folgend versucht, das wieder zu installieren und habe vom Compiler (MinGW) nichts-sagende Fehlermeldungen bekommen, die bei jedem Thema, dass man dazu im Internet fand, was anderes bedeuteten.. So endete mein Versuch C++ zu lernen^^ 
(Aber er war vorher auch schon arg verlangsamt worden durch dieses ganze Referenzen/Pointer etc. Zeug und vieles mehr.. C++ ist wirklich nicht Einsteigerfreundlich und schon gar nicht, wenn man vorher noch gar keine Programmiererfahrung gesammelt hat^^)


----------



## Kr0e (28. Mai 2011)

@Fu3l:

Ja, genau solche Sachen mein ich leider =( Ich hab mich damals mit OGRE beschjäftigt und musste immer neue Hürden überwinden, die nichts mit dem Spiel ansich zu tun hatten (OGRE ist nämlich ansich total genial und einfach...) aber Compilierprobleme etc... Außerdem gab es manchmal aprupte Abstürze, die sich selbst in deren Foren keiner erklären konnte. Ich habs auf verschienden Plattformen getestet (Also compiliert) und nur auf Windows ging es nicht... Vermutlich ieine von zehntausend Optionen falsch eingestellt beim compilieren.. habs aufgegebn  und mich ab dann mit Java beschätigt...

Java (Genauso wie C#) ist/sind einfach produktive Sprachen bei denen es um Resultate geht... Diese Unity Sache wäer allerdings für mich persönlich nicht das Richtige^^ aber das muss jeder selbst entscheiden^^


----------



## slawaweis (28. Mai 2011)

FreakNerd hat gesagt.:


> welche Sprache eignet sich eigentlich am besten für spiele ?


reicht mir ein handelsüblicher Baumarkt, damit ich ein Haus bauen kann? Ich dachte dabei an einen Wolkenkratzer mit nur 50 Stockwerken, aber zu Übung wollte ich mal ein zweigeschossiges Familienhaus machen, übers Wochenende. Ich habe mich mit verschiedenen Werkzeugen und Baumaterial aus dem Baumarkt eingedeckt ... und was mache ich jetzt?

Es ist nicht die Frage welche Programmiersprache, sondern es ist die Erfahrung die zählt. Ein erfahrender Java-Programmierer würde ein besseres Spiel hinkriegen, als ein unerfahrener C++ Programmierer. Man muss seine Werkzeuge einfach gut kennen, dann geht fast alles. Ich weis, dass z.B. in Java jedes Spiel, bis auf High-End wie Crysis, mögliche wäre. Heute wäre eine Engine wie Unreal Engine 3 in Java möglich. Es ist nur eine Frage des Budgets und der Menschen, die am Projekt arbeiten.

Weiterhin ist die Programmiersprache nur ein Werkzeug. Man kann sich mit beliebig vielen Hämmern, Sägen, Schaufeln und Baumaterialien eindecken und diese beliebig einsetzen. Nur wird auf lange Sicht daraus kein Haus, wenn man keine Ahnung von Hausbau hat. Computerspiele fertig zu bekommen erfordert viel mehr, als nur eine Programmiersprache auszuwählen. Deshalb ist es am Anfang auch egal.

So ist das Motto: Machen! Ob man jetzt Java, C++, C#, Scala, Groovy, JavaScript, VB, Smalltalk, Haskell ... verwendet, ist vollkommen egal. Man sollte sich ein Ziel setzen, wie: "ich will in 3 Monaten einen eigenen Klon von Tetris, Pacman, Super Mario Bros, Angry Birds, ... " haben und es veröffentlichen. Dann sucht man sich alles zusammen was man braucht, um sein Projekt in der gesetzten Zeit zu realisieren. Wenn man dann wirklich ein Spiel veröffentlicht hat und Feedback von Spielern bekommt, wird man um einiges schlauer sein und wissen, was man braucht. So ist es wichtig zu machen, Projekte fertig zu stellen, zu veröffentlichen und Erfolgserlebnisse zu sammeln. Spätestens dann wird die Frage der Programmiersprache so was von egal sein. 

Slawa


----------



## Kr0e (28. Mai 2011)

Nun, aber dennoch ist es schön, überhaupt Werkzeuge zu benutzen und nicht wie bei C++ sich erstmal das Erz einzuschmälzen um daraus ein paar Nägel zu machne 

-


Ich stimme dir aber voll zu, slawaweis!


----------



## Mohackl (28. Mai 2011)

Greetings,

Java bietet dir Alles was dein Herz begehrt. Man kann mit Java gute und tolle Spiele programmieren.

Lerne Java und habe ein Auge auf die 
Lightweight Java Gaming Library


----------

