Spiel programmieren
-
Baut vielleicht erstmal ein Snake und/oder Pacman Spiel für den Anfang. Und zwar mit modernem OpenGL (3.2 oder höher) oder mit DirectX 11. Also alles schön mit Shadern machen. Dazu noch den ganzen Fensterkram kapseln, Spiellogik aufbauen, bei Pacman KI schreiben, etc. Damit habt ihr als Anfänger sicherlich mehr als genug zu tun - und trotzdem habt ihr ein Ziel vor Augen. Und das Schöne ist: Alles was ihr da macht, müsst ihr für euer 3D Spiel eh lernen.
Aber dazu sei noch gesagt: Lernt erstmal C++ richtig. Denn solange ihr das nicht halbwegs könnt, werdet ihr nicht nur sehr viel mehr Zeit durch rumprobieren verschwenden, sondern den Schritt von Snake zu einem 3D-Spiel auch nicht überleben.
-
cooky451 schrieb:
Baut vielleicht erstmal ein Snake und/oder Pacman Spiel für den Anfang. Und zwar mit modernem OpenGL (3.2 oder höher) oder mit DirectX 11. Also alles schön mit Shadern machen. Dazu noch den ganzen Fensterkram kapseln, Spiellogik aufbauen, bei Pacman KI schreiben, etc. Damit habt ihr als Anfänger sicherlich mehr als genug zu tun - und trotzdem habt ihr ein Ziel vor Augen. Und das schöne ist: Alles was ihr da macht, müsst ihr für euer 3D Spiel eh lernen.
Findest du das nicht ein bisschen verfrüht? Wenn ich das richtig verstehe, können sie noch gar nicht programmieren.
-
Na ja, siehe edit.
-
Hallo,
am besten du googlest mal, da es ein paar gute Tools für das Programmieren von Computerspiele gibt. Ich habe sie leider noch nicht getestet, aber wenn du jetzt alleine mit C++ anfängst ohne Unterstützung wird das ein ziemlicher Aufwand!
-
derFer schrieb:
Wobei C# noch den Nachteil hat, das es nur unter Windows geht
Falsch! C# wurde zwar für .NET Programmiert, läuft aber mithilfe von Mono auch unter Unix-basierten Betriebssystemen
Meine erste Programmiersprache war übrigens auch C++ und mit viel Ergeiz und Wille ist das gut schaffbar.
-
rapso schrieb:
es ist unsinnig zu glauben, dass wenn man kein c/c++ kann, man mit c# lernen anfangen sollte, es wird euch nicht weniger zeit kosten ein 3d spiel damit zu erstellen, die lernzeit wird schon ueber ein jahr sein.
C# zu lernen (so dass man ohne ständig Fehler zu machen ein 3D Spiel programmieren kann) wird vlt. 1 Jahr brauchen, C++ entsprechend 2 bis 3 Jahre. Ein 3D Spiel, mit Kampagne und Multiplayer, zu programmieren wird bei durchschnittlichen Programmierern vlt. 10 Mannjahre brauchen, wenn wir nicht gleich übertreiben und sowas wie Battlefield oder Diablo wollen. Die ganzen 3D Modelle, Animationen, Texturen, Levels usw. zu erstellen wird mindestens nochmal soviel Mannjahre wie das Programmieren brauchen.
-
Die Bedienung von 3D-Modellierungssoftware usw. zu lernen braucht sicher auch noch einige Monate oder Jahre.
-
naja schrieb:
rapso schrieb:
es ist unsinnig zu glauben, dass wenn man kein c/c++ kann, man mit c# lernen anfangen sollte, es wird euch nicht weniger zeit kosten ein 3d spiel damit zu erstellen, die lernzeit wird schon ueber ein jahr sein.
C# zu lernen (so dass man ohne ständig Fehler zu machen ein 3D Spiel programmieren kann) wird vlt. 1 Jahr brauchen, C++ entsprechend 2 bis 3 Jahre.
c++ auf den stand zu lernen das man machen kann was man in c# machen kann, wird gleich lange dauern. 99% wuerde ich denken ist das programmieren lernen an sich, nicht sprach abhaengige besonderheiten. dann koennte man genug koennen um ein spiel schreiben zu wollen.
aber ja, wenn man dann in "freakige" dinge abdriftet wie eigenes memory management usw. wird man mit c++ fuer jahre weiter "spass" haben, jedoch braucht man es an sich nicht um wie mit c# ein spiel zu erstellen.
-
Fang klein an: Tetris, Pong, Pacman, Bomberman. Sowohl fuer Einzel als auch Mehrspieler. Das ist die Mindestvorbereitung, ein eigenes Spiel zu machen.
-
Dem würde ich mich auch anschließen, denke das C++ und C# zu lernen gleich lange dauert, aber was ja wurscht ist, weil man um 3D Spiele zu programmieren, eigentlich auch noch OpenGL oder Direct3D braucht und dann ist es egal ob C# oder C++.
Im übrigen habe ich gehört, dass das Mono-Projekt eingestellt wird (zumindest die Moonlight Version).
MfG
-
rapso schrieb:
c++ auf den stand zu lernen das man machen kann was man in c# machen kann, wird gleich lange dauern.
Gerade Dinge wie manuelle Speicherveraltung, Objekt-Lebensdauer und Zeiger bereiten Anfängern (und leider nicht selten auch Fortgeschrittenen*) in C++ sehr viel Mühe, auch sonst gibts genügend Pitfalls. Diesbezüglich hat mans in C# schon etwas einfacher...
derFer schrieb:
weil man um 3D Spiele zu programmieren, eigentlich auch noch OpenGL oder Direct3D braucht
Warum? Man kann direkt ein High-Level-Framework wie Irrlicht oder Ogre verwenden. Bietet vielleicht nicht ganz so viel Möglichkeiten, aber man kommt schneller ans Ziel.
______
* Ich habe bisher z.B. extrem wenig Code von Spieleprogrammierern gesehen, die Konzepte wie RAII tatsächlich verstanden haben und konsequent anwenden. Wahrscheinlich kursieren immer noch zu viel Mythen, oft werden entsprechende Hinweise zudem mit "ich will die volle Kontrolle haben", "es funktioniert ja" und ähnlichen Nullargumenten abgetan.
-
_matze schrieb:
Du musst erst mal das Programmieren an sich lernen. Also leg das 3D-Buch noch mal zur Seite (für locker 1 Jahr oder mehr, das muss dir wirklich klar sein) und fang an zu büffeln.
Der Bagger hat wieder mal recht.
-
EOP schrieb:
_matze schrieb:
Du musst erst mal das Programmieren an sich lernen. Also leg das 3D-Buch noch mal zur Seite (für locker 1 Jahr oder mehr, das muss dir wirklich klar sein) und fang an zu büffeln.
Der Bagger hat wieder mal recht.
vllt gibt es ja ein buch, das gleichzeitig programmier- und spieleprogrammier-lehrbuch in einem ist.
anstelle von einem simplen hello world gibt es dann eben zusätzlich noch eine hello-world-box, die sich in einem fenster hin- und herbewegt oder weiß der geier.ich würde erstmal mit einfachen 2-d versuchen starten, später irgendwann mit 3-d.
mit opengl/glut/freeglut ... z.b. kann man erstaunliche 2-d und 3-d effekte hinbekommen.
opengl hat schnittstellen zu verdammt vielen programmiersprachen (c, c++, java, delphi, haskell, blabla...) und läuft auf verdammt vielen plattformen ( ..., blabla...).gut, diese opegl geschichte ist nur ein weg, eine möglichkeit von vielen ...
-
Nexus schrieb:
rapso schrieb:
c++ auf den stand zu lernen das man machen kann was man in c# machen kann, wird gleich lange dauern.
Gerade Dinge wie manuelle Speicherveraltung, Objekt-Lebensdauer und Zeiger bereiten Anfängern (und leider nicht selten auch Fortgeschrittenen*) in C++ sehr viel Mühe, auch sonst gibts genügend Pitfalls. Diesbezüglich hat mans in C# schon etwas einfacher...
das ist ein weiter verbreiteter irrglaube, wie damals dass es in java keien pointer gibt, nur referenzen und deswegen niemand davor angst haben muss wie bei c++ pointern vor zugriffen auf null pointer oder vor memory leaks.
als beispiel:
du musst bei device resourcen dennoch die lebensdauer beachten, machst du das nicht, kann es sein, dass du out of memory laeufst, weil eine kleine referenz eine ganze texture verwaltet und der GC das garnicht mitbekommt. wenn du performance kritische dinge machst, musst du den speicher selbst verwalten (also alle objekte in free lists und daraus allokieren), weil sonst der GC reinhaut und die 10ms bei den 100fps die dein spiel vielleicht hat extrem den spielfluss stoeren (gaengige foren topics in z.b. XNA und Android dev foren). wenn dann ein anfaenger seinen ganzen code nochmal bearbeiten muss um das raus zu bekommen, ist der frust extrem, und nicht weniger als speicher verwaltung in c++.derFer schrieb:
weil man um 3D Spiele zu programmieren, eigentlich auch noch OpenGL oder Direct3D braucht
Warum? Man kann direkt ein High-Level-Framework wie Irrlicht oder Ogre verwenden. Bietet vielleicht nicht ganz so viel Möglichkeiten, aber man kommt schneller ans Ziel.
man kann auch pygame nutzen, sehr schneller erfolg. haengt vermutlich davon ab, was jemand lernen will.
ich gebe dir da recht, ganz unten anzufangen macht nicht sinn wenn man einfach nur schnell ans ziel will, sowas selbst zu machen dauert sicher wenigstens 1 bis 2 jahre, wenn man smart ist.
-
Mir ist bewusst, dass man durch den Begriff "Referenzen" statt "Zeiger" nicht automatisch alle Probleme löst, doch durch die eingeschränkte Funktionalität entstehen tendenziell weniger Fehler. An die anderern Faktoren, die dafür dazukommen (GC, Ressourcenverwaltung) habe ich jedoch nicht gedacht, danke für den Hinweis.
raps schrieb:
wenn dann ein anfaenger seinen ganzen code nochmal bearbeiten muss um das raus zu bekommen, ist der frust extrem, und nicht weniger als speicher verwaltung in c++.
Das Lustige daran ist, dass Speicherverwaltung in C++ dank RAII extrem einfach ist. Nur machen sich halt die meisten Leute das Leben extra schwer, indem sie dauernd
new
unddelete
benutzen
-
Nexus schrieb:
raps schrieb:
wenn dann ein anfaenger seinen ganzen code nochmal bearbeiten muss um das raus zu bekommen, ist der frust extrem, und nicht weniger als speicher verwaltung in c++.
Das Lustige daran ist, dass Speicherverwaltung in C++ dank RAII extrem einfach ist. Nur machen sich halt die meisten Leute das Leben extra schwer, indem sie dauernd
new
unddelete
benutzenUnd warum ist das wohl so?
Weil new/delete schnell erklärt und schnell erlernt sind. Um RAII soweit zu behirnen dass man seine eigenen (ausreichend fehlerfreien) RAII Klassen schreiben kann, braucht man vermutlich etwas länger.C++ ist angenehm zu verwenden wenn man es mal richtig gut kann.
C# bzw. Java sind dagegen angenehm zu verwenden so lange man sie noch nicht gut kann (aber dummerweise nicht länger :D)
-
hustbaer schrieb:
Weil new/delete schnell erklärt und schnell erlernt sind.
Aber auch weil sie erklärt werden. RAII findet man in Büchern nicht allzu oft...
hustbaer schrieb:
C++ ist angenehm zu verwenden wenn man es mal richtig gut kann.
C# bzw. Java sind dagegen angenehm zu verwenden so lange man sie noch nicht gut kann
-
Nexus schrieb:
hustbaer schrieb:
Weil new/delete schnell erklärt und schnell erlernt sind.
Aber auch weil sie erklärt werden. RAII findet man in Büchern nicht allzu oft...
Auch in Vorlesungen/im Studium nicht. Ist halt oft irgendwie unwichtig und nebensächlich. Man macht ein Praktikum oder Projekt in C++. Irgendwie. Ich kann mich jetzt nicht bewußt erinnern, dass jemand im Studium smart pointer erwähnt hätte.
-
ich weiss zwar nicht mehr wer das gesagt hat, aber seine aussage war in etwa, dass man in sonst jedem studiengang anhand von beispielen und 'best practise' lernt das wissen anzuwenden, bei informatik lehrt man die grundlagen (loop, if, switch etc.), dazu technisches/theoretisches wie prozessor aufbau, laufzeit verhalten, code analyse, aber nie anhand von best practise code beispielen wie man alles anwendet.
daher kommen sprachen mit dem "du bist zu doof, lass mich im hintergrund zaubern" attribut immer besser an, natuerlich verkauft als "du bist ein architekt, du brauchst nicht wissen wie ein ziegelstein aussieht" marketing (VB war noch direkt mit "zu doof? nimm VB" beworben, weshalb das image so schlecht war, das niemand es wirklich nutzen wollte).
die krux ist leider, wenn man einmal mit einer sprache anfaengt, lernt man auch mit ihren fehlern umzugehen und sieht sie nicht mehr, das umsteigen auf eine andere sprache ist dann meistens ausser frage, weil man wieder bei 0 anfangen muesste (z.b. kommen viele anfaenger mit headern gut zurecht, jemand der es nicht gewohnt ist, versteht die welt nicht).
deswegen ist es schade anfaengern grundsaetzlich zu c# zu raten (was hier im forum irgendwie uebertrieben oft gemacht wird), denn jeder sollte das lernen was ihm das meiste bringt bei seinem ziel.
will jemand kurz ein spiel schreiben lernen, da reicht ein game maker vollkommen (auch wenn manche den verteufeln weil ja "fuer n00bs").
will jemand vielleicht nur genug koennen um sein eigentliches interesse: game design, zu ergaenzen, ist unreal script, lua usw (je nach engine), die perfekte wahl.
vielleicht mag man android und browser spiele entwickeln, was mit java super geht.
oder nur casual facebook games, wofuer php gut geruestet ist.
wenn jemand professionel spiele programmieren lernen will, ist c++ nicht verkehrt, im besonderen wenn man sich nicht festlegen will auf nur eine platform. vielleicht will man ja mal damit arbeiten, oder android, iOS und WP8 spiele machen, oder ein browser spiel, ohne jedesmal die sprache, libs, frameworks wechseln zu muessen und dann ist c++ IMO das beste.Etwas nur immer zu empfehlen weil man es selber mag ist nicht wirklich jemandem helfen.
-
Ein wahres Wort
Dem kann ich mich nur anschließen!
MfG