Hallo,
ich würde mich gerne in der Programmierung (C++) vertiefen.
Habe bisher immer nur ConsolenAnwendungen gemacht.
Jettz würde ich gerne mit Convays-Game-of-Life oder einem kleinen
Billiard-Spiel beginnen. Das Problem ist nicht das Programmieren
(zumindest jetzt noch nicht), sondern eher die Umgebung/Graphik. Ich
benutze Visual Studio 2015. Aber was benötige ich noch, um die Graphik/
ein Spielfenster darstellen lassen zu könnnen? Brauche ich dazu
überhaupt noch extra sachen? Welche würdet ihr empfehlen?
Gruß
Frank
Ich glaube, du stellst dir das ein bisschen zu einfach vor. Selbst wenn
du programmieren kannst, solltest du dich erstmal mit den Grundlagen der
3D/Grafik(programmierung) befassen.
Ansonsten brauchst du halt irgendeine API - wie z.B. OpenGL, Direct3D,
Vulkan oder ne 3D-Engine (CryEngine und Unreal Engine sind z.B.
kostenlos).
Tasg schrieb:> irgendeine API - wie z.B. OpenGL, Direct3D,> Vulkan oder ne 3D-Engine (CryEngine und Unreal Engine sind z.B.> kostenlos).
Klar, optimales Werkzeug für:
Frank schrieb:> Jettz würde ich gerne mit Convays-Game-of-Life oder einem kleinen> Billiard-Spiel beginnen.
Versuchs mal mit SDL.
Kein C++-Thread, in dem nicht Qt empfohlen wird, egal ob sinnvoll oder
nicht ... Ist das so eine Art ungeschriebene Forenregel? ;)
Ich bleibe dabei: In diesem Fall ganz klar SFML.
Auge schrieb:> In diesem Fall ganz klar SFML.
So klar ist das nicht. Die Simple DirectMedia Layer Library (SDL) wird
auch in sehr vielen Spielen eingesetzt.
Auge schrieb:> Kein C++-Thread, in dem nicht Qt empfohlen wird, egal ob sinnvoll> oder> nicht ...
Hmm, nun - warum sollte es denn nicht sinnvoll sein? Der OP sprach von
C++, scheint offensichtlich eher Einsteiger als ein 40h
Industrieprogrammierer zu sein, und möchte einfach ein Spiel schreiben.
Qt, inbesondere durch QML macht das verflucht einfach, da kann auch mal
ein Lehrling im 2. Lehrjahr mal ne GUI zusammenbauen, ohne dass zuviel
bleibende Schäden entstehen.
Ist das so eine Art ungeschriebene Forenregel? ;)
> Ich bleibe dabei: In diesem Fall ganz klar SFML.
Hmm, wo ist da der Unterschied zur SDL-2.0 bzw. anderen
Low-Level-Spiele-APIs? Gut, man versteht am Ende des Tutorials, dass man
halt ne Event-Loop braucht, muss sich aber schon mit technischen Details
wie Blitten beschäftigen. Ist mit Sicherheit interessant, ist aber nicht
der beste Rat, den man nem Einsteiger geben kann. Mit QML ist genau das
gleiche mit weniger Aufwand zu erreichen. Zu werten, auf welche Art
jemand lernen möchte - ob lieber durch Low-Level-APIs, weil die Technik
dahinter interessant ist, oder eben durch schnelle Erfolge - die Wertung
steht mir nicht zu, das muss der OP entscheiden.
db8fs schrieb:> ob lieber durch Low-Level-APIs, weil die Technik dahinter interessant ist
Darauf deutet im Beitrag des TO nun wirklich nichts hin - im Gegenteil.
Aber:
> die Wertung steht mir nicht zu, das muss der OP entscheiden.
Weil ich das auch so sehe (und das "ganz klar" natürlich übertrieben
war), hatte ich den Nachtrag hinzugefügt ...
Auge schrieb:> db8fs schrieb:>> ob lieber durch Low-Level-APIs, weil die Technik dahinter interessant ist>> Darauf deutet im Beitrag des TO nun wirklich nichts hin - im Gegenteil.
Ach komm, ist doch Haarspalterei, bringt doch nüscht. Ein schönes
Einsteigerbuch für genau solche Spielereien ist Wolmeringer, 'Coding for
Fun'. Ist auch der olle Conway dabei, und Apfel-Projektionen auf
Mandelbrot seine Menge werden auch mal gemacht - allerdings Java. Muss
ja auch nicht immer gleich C++ sein.
(https://www.google.de/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=gottfried%20wolmeringer%20coding%20for%20fun)
Frank schrieb:> Aber was benötige ich noch, um die Graphik/ ein Spielfenster darstellen> lassen zu könnnen?
Nichts. Microsoft hat schon jetzt ein Dutzend Wege, um Graphik auf dem
Bildschirm anzuzeigen. Nimm einen davon. Gerade für Game of Life tut es
fast jeder, es wird aber unterschiedlich schnell.
Von Controls die 2 Farben anzeigen können angeornet in einem Array mit
hunderten von Elementen über GDI zum Zeichnen von Quadraten in den
Client Bereich eines Fensters in 2 Farben über DirectX bis hin zu GDK
oder ähnlichen Game Development Beispielen.
Die Frage ist eher, welchen Weg davon DU erlernen willst.
Schau halt mal nach "Windows Game of Life" und such dir ein Beispiel
aus.
Ich kann das Buch empfehlen wenn es DirectX werden soll.
"3D Spieleprogrammierung" von David Scherfgen.
Es ist schon etwas älter (DirectX9), man bekommt einen guten
Einblick in die Spieleprogrammierung.
Frank schrieb:> Das Problem ist nicht das Programmieren> (zumindest jetzt noch nicht), sondern eher die Umgebung/Graphik. Ich> benutze Visual Studio 2015. Aber was benötige ich noch, um die Graphik/> ein Spielfenster darstellen lassen zu könnnen? Brauche ich dazu> überhaupt noch extra sachen? Welche würdet ihr empfehlen?
Mir ist jetzt nicht ganz klar was du hauptsächlich lernen möchtest. C++
oder Spieleprogrammierung?
Wenn C++ sein soll, dann tut es wirklich fast alles, mit dem man in
Windows etwas auf den Bildschirm zaubern kann. Für Game-of-Life würde es
sogar die Consolenausgabe mit Buchstaben tun (so hat man das früher
schon programmiert).
Wenn es dir um Spieleprogrammierung geht, dann benutzen Leute heute
nicht einfach ein Grafik-Toolkit und eine Programmiersprache, sondern
komplette Entwicklungsumgebungen für spezielle Spiele-Engines.
Wenn dich interessiert wie so etwas gemacht wird, hier zeigt jemand in
bisher 73 Videos
https://www.youtube.com/watch?v=_lQw3YA7Jok&list=PLbghT7MmckI4_VM5q3va043FgAwRim6yX
ausführlich wie man ein kleines Spiel mit der bekannten Unity-Engine
entwickelt. Die Engine und Umgebung gibt es für Privat kostenlos.
Das Game nutzt natürlich bei weitem nicht die Fähigkeiten von Unity aus,
aber irgendwo muss man ja anfangen. Ein weiteres Problem ist dass er C#
verwendet, was mehr von Java denn von C++ hat.
Hannes J. schrieb:> Mir ist jetzt nicht ganz klar was du hauptsächlich lernen möchtest. C++> oder Spieleprogrammierung?
hauptsächlich möchte ich meine Kenntnisse in C++ verbessern. Aber immer
nur Ausgaben auf der Konsole wird nach einer weile auch langweilig.
Daher hatte ich gedacht an ein kleines spiel, wo man wirklich C++
anwenden kann und evtl auch ein schönes (schön ist relativ) Ergebnis
sieht.
Ich empfehle OpenGL, mein erstes Programm war ein 3D Game, damals hatte
ich das mit Orwell Dev-C++ auf dem 3D Beispiel aufbauend gemacht. Heute
würde ich vermutlich Vulkan verwenden. Als erstes musst du es schaffen
ein 3eck anzuzeigen, das ist das Hello World der 3D Entwicklung. Die
Grundprinzipien sind dann bei OpenGL, DirectX und Vulkan identisch, nur
die API und die Initialisierung ist anders.
Gute OpenGL Tutorials fand ich damals folgende, sind aber meist noch
OpenGL 1, aber so für den einstieg vielleicht ganz gut:
* http://nehe.gamedev.net/
* https://wiki.delphigl.com/index.php/Tutorial (Ist zwar Delphi und
nicht C++, hat mich aber noch nie gestört)
Sobald du die Grundlagen beherrscht, würde ich alle glBegins und
glVector rausschmissen und durch neueres ersetzen.
Für Vulkan gibt es, das ist das beste was es momentan gibt:
* https://vulkan-tutorial.com/
Auf jeden fall rate ich von DirectX ab, damit hat man einen Vendor
Lock-in. Lasse dich niemals auf einen Vendor Lock-in ein, das ist
gefährlich!
Auge schrieb:> Kein C++-Thread, in dem nicht Qt empfohlen wird, egal ob sinnvoll oder> nicht ...
Warum sollte Qt da nicht sinnvoll sein?
> Ist das so eine Art ungeschriebene Forenregel? ;)
Die Regel ist: Wenn jemand Qt kennt und weiß, daß es damit gut geht,
dann nennt er es als Möglichkeit.
Inzwischen hat man eher den Eindruck, es gibt eine "ungeschriebene
Forenregel", dass, wann immer jemand Qt erwähnt, einer daher kommen
muss, der sich darüber beschwert - natürlich grundsätzlich, ohne dazu zu
sagen, warum er Qt für nicht geeignet hält.
db8fs schrieb:> Ach komm, ist doch Haarspalterei, bringt doch nüscht. Ein schönes> Einsteigerbuch für genau solche Spielereien ist Wolmeringer, 'Coding for> Fun'. Ist auch der olle Conway dabei, und Apfel-Projektionen auf> Mandelbrot seine Menge werden auch mal gemacht - allerdings Java. Muss> ja auch nicht immer gleich C++ sein.
Du hast aber gelesen, dass er nicht C++ lernt, um ein Spiel zu
programmieren, sondern genau umgekehrt - ein Spiel programmieren will,
um damit C++ zu lernen. Was soll er da mit einem Buch über Java?
Daniel A. schrieb:> Ich empfehle OpenGL, mein erstes Programm war ein 3D Game, damals hatte> ich das mit Orwell Dev-C++ auf dem 3D Beispiel aufbauend gemacht.
Für ein Game of Life? Da soll er sich erstmal mit 3D-Grafik und
Dreiecken und Texturen auseinandersetzen und es hiinbekommen, "zu Fuß"
ein Bild reinzuladen und das als Textur auf ein Rechteck zu legen, um
das als Basis für ein paar popelige Sprites zu nutzen? Das ist, als ob
ich auf ein Formel-1-Auto Traktorreifen drauf mache und mir ein eigenes
Getriebe zum Langsamfahren baue, um dann mit dem ganzen einen Pflug
durch den Acker zu ziehen.
Rolf M. schrieb:> Warum sollte Qt da nicht sinnvoll sein?
QT ist halt ein riesen Klotz. Da sind so leichgewichtige Sachen wie SDL
und SFML einfach übersichtlicher.
Mark B. schrieb:> Auge schrieb:>> In diesem Fall ganz klar SFML.>> So klar ist das nicht. Die Simple DirectMedia Layer Library (SDL) wird> auch in sehr vielen Spielen eingesetzt.
Doch schon ein wenig Klar SFML ist C++ und genau das will der TE ja
machen. SDL ist C. Warum das also nehmen.
Gute Tipps wurde hier schon gegeben. Noch eine Ergänzung: wenn du mal
semiprofessionellen Entwicklern über die Schulter schauen möchtest um
dir Eindrücke einzuholen, schau mal hier:
https://www.twitch.tv/directory/game/Creative/gamedev
Je nach Tageszeit unterschiedlich stark frequentiert.
Peter Schmitt schrieb:> Gute Tipps wurde hier schon gegeben. Noch eine Ergänzung: wenn du mal> semiprofessionellen Entwicklern über die Schulter schauen möchtest um> dir Eindrücke einzuholen, schau mal hier:>> https://www.twitch.tv/directory/game/Creative/gamedev>> Je nach Tageszeit unterschiedlich stark frequentiert.
Jo Twitch bietet abseits von Gaming-Streams mittlerweile zu fast jedem
Spartenthema was an, wird zwar nicht groß auf der Hauptseite beworben,
aber man kann sich ja mal durch die interessanten Channels klicken.
Kochen steht auch Hoch im Kurs.
Wozu willst du (später mal) C++ brauchen? Dein Spiel soll ja auf Win10
laufen. Für Desktop/Mobile-Anwendungen sind andere Sprachen mittlerweile
viel interessanter, wichtiger, schneller zu lernen, usw. Oder geht's dir
um den embedded Bereich?
Mein Tipp:
Bau zuerst die Spielelogik komplett unabhängig von der Grafikausgabe und
so, dass du für jeden Schritt eine Member-Funktion GameOfLive::step();
callen musst.
Dann strick eine Ausgabe drum herum.
Zuerst für die Konsole - das Kannst du.
Als nächstes suchst du dir irgend ein Gui-Toolkit, erzeugst aus dem
Spielfeld ein Bitmap und zeigst dieses mit der Gui an. und auf
Buttonklick/Tastendruck führst du einen step, render, disp aus.
Als nächstes kommt eine Timersteuerung, die genau diese 3 schritte
aufruft und mittels Gui gestartet und gestoppt werden kann.
für die GUI kann man verschiedenste Sachen nehmen.
Vor allem für GameOfLive ist es fast egal.
Das ginge auch mit plain WinAPI noch relativ gut (falls du damit schon
mal zu tun hattest).
Wenn man schon mal mit OpenCV garbeitet hat, kann man auch das benutzen
um einfach ein Bild zu erzeugen und anzuzeigen.
Qt ist natürlich auch super dafür und sollte man als C++ Programmierer
sich auch schon mal angeschaut haben.
Tasg schrieb:> Da hast du wohl ein bisschen zu schnell geschrieben, nur zum Spass, denn> ich seh da nur ein schwarzes Rechteck.
Bei mir gehts einwandfrei, Ich habe es in Chromium 52 und Firefox 48
ausprobiert. Safari und IE beachte ich nicht mehr. Eventuell bedienst du
es auch einfach nicht richtig, du musst zuerst, wenn die Play checkbox
nicht selektiert ist, einige Zellen setzten, und danach die Play
checkbox selektieren.
Man kann's auch sinnlos zerreden. Leute, ich werd Euch NIE im Leben
einen Toaster designen lassen. Am Ende hab ich irgendein Trumm designed
das so ziemlich alles kann, vielleicht sogar toasten. Was ich allerdings
nie bekommen werde ist 'n fertiger Toast, den ich auch über'm
Bunsenbrenner bekommen hätte.
Er will mit Spieleprogrammierung anfangen, für seine Kiste. Nix mobile,
nix embedded, und die Wahrscheinlichkeit dass er überhaupt noch mitliest
würd ich mal als gering einschätzen nach so viel unterschiedlichem "da
mach dieses und jenes, und GTK und Hastunichtgesehen". Leute, am Arsch,
ok? Einfach nur am Arsch.
Frank, tut mir ehrlich leid jetzt Deinen Thread hier zu hijacken, und,
versprochen, am Ende des Postings gibt's dann auch einen Tip (halt noch
einen, diesmal halt ein meiner Meinung nach vernünftiger), aber das muss
jetzt mal sein: Ich will nicht mal bezweifeln, dass Ihr Antworter etwas
von der Materie versteht (ok, stimmt so nicht: bei einigen glaub ich's
erst wenn ich was dementsprechendes seh, aber das sei mal einfach
dahingestellt), nur was Ihr hier absondert hilft dem Threadersteller
keinen Meter weiter. Das ist angewandte Zerebralmasturbation, wo sich
irgendwelche Leute über esotherische Themen streiten. Das ist wie die
Frage nach 'ner Linuxdistri vom Einsteiger und die Diskussion zergeht
innerhalb von 3 Postings in einen Glaubenskrieg um systemd. Davon hat
der Threadersteller genau GAR NIX. Das hilft ihm genau GAR NICHT weiter.
Das verwirrt ihn. Ängstigt ihn vielleicht. Weil er nix davon versteht
und schon gar nicht warum das wichtig für ihn sein sollte.
Kleiner Tip: Ist es nicht. Und zwar so überhaupt gar nicht.
Und sobald er das mitkriegt ist er weg. Und kommt auch nicht mehr
wieder, weil er hier von Euch genau GAR NIX erhalten hat mit dem er
irgendwas anfangen kann. Was kommt hier als Antwort? "Nimm das da".
Begründung? Fehlanzeige. Oft genug hat man das Gefühl, das weiss nicht
mal der Antworter. Er hat halt seine Antwort hier reingerotzt damit er
sich wichtig vorkommt, weil er hat was gesagt und ist damit jetzt
unheimlich erhaben.
Leute, wenn das hier was bringen und nicht nur das eigene Ego massieren
soll, dann muss für den Threadersteller auch irgendwas dabei rausschauen
das er sich mitnehmen kann! Mit "Du stellst Dir das zu leicht vor, lass
es" fängt er nix an, genauso mit "Nimm X, das ist super" ohne
Begründung. Wer mir sagt ich kann etwas nicht ohne auch nur zu wissen
WAS ich kann, der wird von mir keine Aufmerksamkeit mehr bekommen. Und
von jemandem, der seine Empfehlung nicht begründen kann hab ich auch
wenig, das hätt ich per Google auch bekommen!
So, ausgekotzt hab ich mich, jetzt mal was Substantielles.
Es tut sich grad recht viel im Bereich Spieleprogrammierung, mehrere
Frameworks und Entwicklungstools konkurrieren gerade darum von
Einsteigern aufgenommen zu werden weil man erkannt hat, dass der
Indie-Gamedev Markt recht groß ist und entsprechend wollen mehrere
Hersteller von Frameworks dadurch, dass sie gratis das Framework
anbieten den Markt haben.
And Gratis-Umgebungen fallen mir hier zwei ein. Erstens die
Unreal-Engine (https://www.unrealengine.com) und zweitens Unity
(https://unity3d.com/). Welche davon jetzt "besser" ist, ist
hauptsächlich was für'n Glaubenskrieg, meine Empfehlung hier wäre, schau
Dir mal beide an, probier sie aus (kosten beide nix für'n Heimgebrauch),
schau Dir Tutorials an (davon gibt's bei Unity mehr). Beide kommen
komplett mit vollwertigen Physikengines, was für Billiardgames
grundsätzlich 'n riesen Plus ist (sowas WILLST Du nicht selbst machen!).
Was die Vor- und Nachteile der beiden angeht gibt's auch hinreichend
Seiten die beide (und noch 'n paar andere) Game-Engines verglichen
haben. Einfach mal nach "Unity vs. Unreal" googlen. In Kurz: In Unreal
programmierst Du in C++, Unity in C# (wobei das "programmieren" in
beiden Fällen sich mehr wie das Ausfüllen von Formularen anfühlt, daran
würd ich's nicht festmachen). Unreal ist für mehrere Plattformen
verfügbar, kannst also für Handies so gut wie für PC proggen, Unreal ist
mehr PC-centric (da gibt's Entwicklung, ist aber aktuell sehr stark so),
dafür ist Unreal etwas besser optimiert für PC. Gibt noch einige,
teilweise sehr große, Unterschiede, besonders was die Animation von
Szenen angeht und die Statemachines, da jetzt ins Detail gehen würde
wahrscheinlich mehr Verwirrung schaffen als bei der Entscheidung helfen.
Schau Dir einfach mal zu beiden das eine oder andere Tutorial-Video an,
probier sie aus.
Heinz L. schrieb:> And Gratis-Umgebungen fallen mir hier zwei ein.
Und natürlich Torque3D:
http://www.garagegames.com
Für Conway sollte allerdings das alte Reversi Beispiel aus dem M$ SDK
ausreichen.
Du brauchst auf jeden Fall eine Game-Engine mit einem Leveleditor.
Mit C++ ist Unreal-Engine super und sollte von jemandem der fit ist in
2-3 Tagen schon zu Ergebnissen und Vorplanungen führen. Die haben auch
tolle Hilfevideos und eine aktive Community. Da ist für einen Anfänger
auch das Lizenzmodell sehr bekömmlich.
Heinz L. schrieb:> And Gratis-Umgebungen fallen mir hier zwei ein. Erstens die> Unreal-Engine (https://www.unrealengine.com) und zweitens Unity> (https://unity3d.com/).
Für Game of Life ? Du bist des Wahnsinns fette Beute.
Heinz L. schrieb:> Er will mit Spieleprogrammierung anfangen, für seine Kiste. Nix mobile,> nix embedded,
nix 3d.
Heinz L. schrieb:> Er will mit Spieleprogrammierung anfangen, für seine Kiste.Nein! Er will seine C++-Kenntnisse vertiefen. Das ist das primäre Ziel
der ganzen Aktion. Das Spiel ist nur Mittel zum Zweck. Und es geht um
Conway's Game of Life und/oder ein einfaches Billard-Spiel. Kein
Ego-Shooter mit fotorealistischer Grafik. 3D ist dafür schon mal
vollkommen unnötig- so wie alles andere, was die von dir vorgeschlagenen
Engines so können.
Heinz L. schrieb:> In Kurz: In Unreal programmierst Du in C++, Unity in C# (wobei das> "programmieren" in beiden Fällen sich mehr wie das Ausfüllen von> Formularen anfühlt, daran würd ich's nicht festmachen).
Also beides zum Erlernen der C++-Programmierung vollkommen ungeeignet.
Soviel zu deiner schönen Aussage:
Heinz L. schrieb:> Leute, am Arsch, ok? Einfach nur am Arsch.
Rolf M. schrieb:> Nein! Er will seine C++-Kenntnisse vertiefen. Das ist das primäre Ziel> der ganzen Aktion.
würde ich auch so sehen.
In dem Fall würde ich auch die Physikberechnungen selbst machen und
schauen, wie man das Problem programmtechnisch strukturell am besten
löst.
Heinz L. schrieb:> und die Wahrscheinlichkeit dass er überhaupt noch mitliest> würd ich mal als gering einschätzen
doch, ich lese noch mit, aber wie du auch schon gesagt hast, sind einige
Beiträge ein bisschen am Thema vorbei.
Mir ging es darum, ein Spiel zu machen um meine C++ kenntnisse zu
vertiefen. Bisher habe ich immer nur Konsolenausgaben gehabt und das
wird nach na weile langweilig. Könnte auch was anderes machen (also kein
Spiel), würde aber gerne etwas graphisches sehen.
Werde zunächst das Conway machen und dann wollte ich richtung Billiard
(oder Flummi, der auf dem Boden fällt).
Heinz L. schrieb:> Man kann's auch sinnlos zerreden. Leute, ich werd Euch NIE im Leben> einen Toaster designen lassen.
Das bin ich jetzt aber erleichtert. Konnte schon die letzten Nächte
nicht schlafen, weil ich Angst davor hatte, einen Toaster für dich
designen zu müssen.
Und danke dass du uns aufgeklärt hast. Jetzt wissen wir Bescheid.
heißer Tipp: das Interview mit John Carmack bzgl. seiner Wahl von C++
für die Quake3 Engine und wie schnellen Code in c++ macht.
btw, die Qt als einstieg in die Gui-Welt finde ich nicht so schlecht...
die GraphicScenes kann man recht einfach auf OpenGL beschleunigt
schalten... für 2d billiard mit Fokus auf eine Physikengine bzw. dem
Algorithmendesign garnicht so verkehrt...
Die Qt bringt halt als Klassenbibliothek einfach für fast alle Probleme
irgendwelche mehr oder minder effiziente Lösungen mit und ist nicht so
zersplittert wie z.B die GTK...
Im Endeffekt alles Geschmackssache... in dem Interview ind jedenfall
einige ganz gute allgemeine Hinweise... warum Binärformate für Configs,
Levels usw gar nicht soo super sind wie gedacht usw...
73
Hier ein schönes Video zum Thema, Docs und Source sind über die
Beschreibung erhältlich. Er verwendet SFML. Sieht gut aus, würde ich
verwenden sobald ich mal ein 2D Spiel programmieren möchte.