Der beste Weg zum Spieleprogrammieren



  • Hallo,

    (Tut mir leid fals es soetwas schon einmal gegeben hat oder dieses Thema nicht hierher gehört.)
    ich möchte ein Spiel in C++ schreiben.
    Einige(wenige) Grundlagen kenne ich schon und kleine Programme habe ich auch schon geschrieben.
    Allerdings scheint es keine Tutorials mehr für mich zu geben, so weiß ich z.B. nicht wie ich ein anderes Fenster(damit meine ich nicht die Konsole) öffnen/erstellen kann.
    Und darum hier meine Fragen:
    Könnte mir jemand...

    1.: so ungefähr die Richtung zeigen in die ich 'lernen' sollte?
    2.: Tutorials empfehlen die auch 'fast-Anfänger' verstehen(also alles sehr gut erklärt 🙂 )?
    3.: eine 'anfängerfreundliche' Liste mit allen/vielen/den nötigen Kommentaren empfehlen (wenn möglich bitte auf deutsch)?

    Ok erstmal reicht das an Fragen, es werden allerdings wahrscheinlich noch einige follgen 😉 .
    Fals es auch eine Rolle spielt womit ich schreibe, ist hier die Antwort: ich benutze 'Visual C++ 2010 Express'.

    Ich freue mich über jede Hilfe.

    -Skotchy



  • Die Frage ist, was du dabei noch so alles lernen möchtest, bzw. in welcher Reihenfolge. Wenn du "ganz unten" anfangen willst, dann google mal nach Tutorials zur WinAPI. Mit dieser kannst du auch ein Fenster erstellen. Schneller Ergebnisse sehen wirst du mit einem Framework, welches ein paar Dinge für dich kapselt. (z.B. SDL (eher C), SFML (eher C++)). Damit kannst du jedenfalls recht schnell ein paar 2D-Spiele basteln.
    Wenn es dann weiter gen 3D gehen soll, musst du dich wieder entscheiden, ob du erst mal "low-level" lernen möchtest (DirectX, OpenGL), oder lieber auf eine fertige Engine zurückgreifst. (IrrLicht z.B.)



  • +1 für SFML

    Tutorials solltest du mit der Suchmaschine deiner Wahl finden (hihi, als ob jmd. was anderes ausser Google verwenden würde).
    Ideal wäre wenn du Englisch kannst, bzw. bereit bist es zu lernen - man findet viel mehr und viel schneller Infos/Tutorials/... auf Englisch. Ziemlich egal worum es geht, so lange es sich um Computer/Programmierung/IT/... handelt.



  • @cooky451

    Ok, ich hab auf youtube einige Tutorials zu WinAPI gefunden die ich mir ansehen und nachbauen werde, ich hoffe das ich es auch kappieren werde.

    @hustbaer

    Meinen Selbsteinschätzungen nach kann ich recht gut englisch aber wenn mir in einem englischen Tutorial dann mehrere Wörter in den Weg kommen, die mir fremd sind und ich deswegen immer wieder zum Übersetzer greifen muss, vergeht mir die lust auf's Tutorial lesen.(Nicht das ich keine englischen Tut's lese, manchmal wird mir das mit den Fremdwörtern einfach zu viel 🙂 .)

    Und danke für die Antworten.

    -Skotchy



  • Skotchy schrieb:

    Ok, ich hab auf youtube einige Tutorials zu WinAPI gefunden die ich mir ansehen und nachbauen werde, ich hoffe das ich es auch kappieren werde.

    Video Tutorials sind meist schlecht. Und du brauchst die WinAPI nicht zum Spiele Programmieren. Verführt nur zu umständlichen Programmieren ("Dateien lesen mit Streams ist langsam"- ja und? Das solltest du eh nicht während des Spiels tun sondern davor). Du möchtest Ergebnisse produzieren und nicht an solchen Fummeligkeiten rumdoktorn.



  • Nimm einfach SFML und die "offiziellen" SFML Tutorials: http://www.sfml-dev.org/tutorials/

    Dann musst du dich nicht mit der WinAPI rumschlagen. Beim ersten Projekt sollte man es sich nicht unnötig schwer machen. Demotiviert bloss 😉



  • @ hustbaer

    Hmm, ok dann werde ich es mal mit SFML versuchen, allerdings finde ich auf der Seite nur downloads für Visual C++ 2008 und nicht Visual C++ 2010 so wie ich es habe, macht es da einen Unterschied wenn ich die Version für Visual C++ 2008 runterlade?

    @ otze

    otze schrieb:

    ("Dateien lesen mit Streams ist langsam"- ja und? Das solltest du eh nicht während des Spiels tun sondern davor).

    Könntest du mir ein Tutorial dazu empfehelen 🙂 ?

    Edit: Hab jetzt hier etwas zu Streams gefunden:http://www.informit.de/books/c++21/data/kap16.htm
    ist das zu empfehlen?

    -Skotchy



  • Ich bin so langsam am verzweifeln, da ich nicht mehr weiß was ich lernen soll 😞 .
    Ich hab mir Tutorials durchgelesen und kleine Programme geschrieben, in denen ich mein 'C++-Wissen' gebündelt habe.
    Beispielsweise kann ich jetzt gut(meiner meinung nach 😉 ) mit Variablen umgehen(liegt aber eventuell auch daran das ich vorher viel im 'Game Maker' mit variablen gearbeitet hab), wüsste aber nicht wie ich damit sinnvoll in einem 'C++-Spiel' umgehen sollte.
    Allerdings komme ich ja noch nicht einmal dazu darüber nachzugrübeln, da ich das Fenster für das Spiel(wahrscheinlich eine Kleinigkeit) nicht öffnen/kreieren/erstellen kann. Ich hab zwar schon gesehen wie der Code dazu aussieht, aber keine passende Erklärung zu den einzelnen Befehlen finden können(und einfach abschreiben will ich da nicht, ich will das selbstständig könnenund und wissen was ich da 'hinprojeziert' hab).
    Fals mein Ziel ein 'Star-Defender' zu programmieren zu hoch ist wär ich über einen anderen Vorschlag erfreut(mit 'Star-Defender' meine ich soetwas: http://upload.wikimedia.org/wikipedia/en/2/20/SpaceInvaders-Gameplay.gif). So ein Spiel war auch im 'Game Maker' mein erstes Spiel und auch recht erfolgreich(zumindest für mich 🙂 ).
    Desweiteren weiß ich nicht ob bzw. welches Buch ich mir zulegen sollte und ob die Bücher extra für Spieleprogrammierer z.B. 'C++ für Spieleprogrammierer' empfehlenswert sind oder 'nur' Geldmacherei?

    Weiterhin danke für jede Hilfe.

    -Skotchy


  • Mod

    macht euch das leben nicht unnoetig schwer, besonders am fang. Ihr koennt nicht erst alles lernen was man lernen muss bevor ihr anfang ein spiel zu machen. Auch AAA super pro entwickler wissen nicht alles, das themengebiet ist viel zu umfangreich, kaum jemand kann details zu soft body physics, inverse kinematics, indexed lighting, navigation mesh und udp synchronization gleichzeitig wissen.

    gerade so bullshit wie fenster erstellen, last es sein am anfang. das macht euer spiel nicht ein micron besser ob ihr das fertig nehmt oder selbst ueber wochen ausarbeitet.
    natuerlich ist wissen etwas wertvolles, aber waehrend man sich mit so BS aufhaellt, entgeht einem viel wichtigereres wissen.

    Eine qualitaet eines guten programmierer ist, dass man mit dem effektivsten weg zum ziel kommt, variablen hinschreiben und schleifen formulieren ist da eher wie geradeaus gucken, das sollte man koennen, aber es ist nur ein werkzeug, kein skill.

    deswegen, schreib ein spiel, nimm http://code.google.com/p/pixeltoaster/ da sind example enthalten wie du in wenigen zeilen ein fenster aufmachst, ein bild ausgibst, die maus benutzt (notfalls kannst du hier fragen). ich programmiere dir damit ind er selben zeit ein "Star-Defender" spiel hin wie es mich kosten wuerde ein gutes window handling unter windows hinzuschreiben. bei dir ist es vielleicht nicht anders, aber was willst du in 2 wochen vorzeigen, ein windows fenster oder ein spiel? 😉



  • Wichtig ist erstmal, wieviel du selbst machen willst und wieviel aus Libraries kommen soll.
    Man kann so ein Spiel schon recht einfach mit GDIPlus machen. Andere Module sind natürlich schneller und/oder einfacher zu bedienen. Da wären dann die Loader für Dateiformat (z.B. png) schon dabei und man kann mit einfachen Befehlen die Bilder anzeigen.



  • rapso schrieb:

    macht euch das leben nicht unnoetig schwer, besonders am fang. Ihr koennt nicht erst alles lernen was man lernen muss bevor ihr anfang ein spiel zu machen.

    Eigendlich hatte ich vor: erstmal die Grundkenntnisse mindestens grob zu wissen/kennen/können und mich dann an das Spiel zu machen, dass was ich während das programmierens nicht weiß such ich in google raus(z.B. wenn ich nicht weiß wie ich das Programm anhalte/pausiere suche ich etwas in google und finde die wunderbare funktion namens sleep() 🙂 ) mit der Zeit lerne ich dann oft benutzte Befehle auswendig. Und irgendwann ist dann das Spiel fertig 🙂 .

    rapso schrieb:

    deswegen, schreib ein spiel

    Würd ich ja gerne aber...

    rapso schrieb:

    nimm http://code.google.com/p/pixeltoaster/

    ...ich bin entweder zu dumm deinen Vorschlag zu installieren oder... ich weiß auch nicht (readme hab ich gelesen).

    Marthog schrieb:

    Wichtig ist erstmal, wieviel du selbst machen willst und wieviel aus Libraries kommen soll.

    Also, eigendlich will ich soviel wie möglich selber machen...

    Weiterhin danke für eure Hilfe.

    Edit: Könnte mir jemand ein Buch empfehlen ( oder zwei) mit dem ich das lernen könnte was ich da brauche um mein Ziel zu erreichen? Ich fühle mich gerade so als ob ich in meiner Entwicklung stehen geblieben wäre und weiß nicht mehr weiter. Die 'Zusatzfunktionen'(fals es welche sind) die ihr mir zum download vorschlagt hören sich alle gut an, aber ich kann sie leider nicht instalieren 😞 .

    Ich danke weiterhin für jede Hilfe.

    -Skotchy



  • Tut mir leid wegen dem (erneuten) doppel-Post aber ich finde dieser Post verdient es ein eigener zu sein 🙂 .

    Und zwar bin ich gerade etwas verrwirt, weil ich nicht genau weiß was denn nun genau die Grundkenntnisse in C++ sind. Auf meinem Streifzug durch Google fand ich leider nicht die passende Lösung die ich wollte. Meine Suche beschrenkte sich auf die oben genannten C++ Grundkenntnisse von denen ich eine Tabelle zu finden erhoffte. Auch zu den erweiterten Kenntnissen im Bereich Spieleprogrammierung wurde ich nur einmal fündig, allerdings ist/war die Seite auf englisch, was nicht das Problem darstellte, sondern(ab dem spannenden Bereich) Kostenpflichtig.
    Ich dachte mir, dass wenn ich Geld ausgebe auch nur für Bücher, doch verrwiren mich die Rezensionen auf Amazon zu den Büchern noch mehr(die einen finden das Buch unübertroffen, andere meinen das es das Geld nicht wert sei und man sich viel bessere Bücher kaufen könne und von wieder andere Rezensionen verrwiren mich noch mehr).

    Und weil ich das ganze irgendwie verrwirend finde(ganz schön verrwirend oder? 🤡 ) gibt es hier nochmal meine wichtigsten Punkte zusammengefasst:
    -was genau muss/soll ich unter den Grundkenntnissen verstehen bzw. was sind die Befehle?(Würde mich hier über eine Tabelle freuen die ich dann abarbeiten könnte.)
    -welche ertweiterten Kenntnisse werde ich im Bereich Spieleprogrammierung brauchen?(erstmal nur grob, bin ja noch nicht so weit 😉 )
    -welches Buch ist für mich zu empfehlen?(der Preis spielt dabei erstmal keine Rolle.)
    -und, ein Punkt den ich im obigen Text nicht angesprochen habe: Was taugen kostenlose E-Books?

    So, nun bin ich fürs erste alle meine Fragen zum Thema los.

    Bedanke mich weiterhin für Hilfe

    -Skotchy



  • Skotchy schrieb:

    -was genau muss/soll ich unter den Grundkenntnissen verstehen bzw. was sind die Befehle?(Würde mich hier über eine Tabelle freuen die ich dann abarbeiten könnte.)

    Na, eine Tabelle zum Abarbeiten, was?

    • Variablen
    • Funktionen
    • Abfragen (if, switch)
    • Schleifen
    • Arrays
    • Casts
    • Pointer
    • Speichermanagement bzw. Lebenszeit von Objekten. (Stack, Heap, static sind Stichworte)
    • Strukturen
    • Ein / Ausgabe. // Bis hier hin ist es eher C, aber das sollte natürlich auch für C+++ bekannt sein.
    • Standardcontainer (insbesondere: string, vector, map)
    • Klassen mit allem was dazu gehört. (private, protected, public, Vererbung, virtual, pure virtual, ..)
    • Iteratoren
    • Templates
    • Exceptions
    • Ein paar Dinge aus <algorithm>

    Das wären so in etwa die Grundlagen. Alle Befehle auswendig zu lernen ist aber nicht nötig, das passiert automatisch und falls man mal etwas sucht, kann man das immer noch z.B. hier nachschlagen.
    Mit C++11 kommen vermutlich noch ein paar "Grundlagen" dazu, aber wenn du das oben alles verstanden hast, kannst du schon ein paar Dinge basteln.

    Skotchy schrieb:

    -welche ertweiterten Kenntnisse werde ich im Bereich Spieleprogrammierung brauchen?(erstmal nur grob, bin ja noch nicht so weit 😉 )

    Das variiert sehr stark und ist abhängig davon, wie "low-level" du programmieren möchtest. Das kann von "WinAPI mit DirectX" bis zur Einarbeitung in eine bestimmte Engine gehen. Das solltest du dir überlegen, wenn du die Grundlagen hast.

    Skotchy schrieb:

    -und, ein Punkt den ich im obigen Text nicht angesprochen habe: Was taugen kostenlose E-Books?

    So viel wie auch kostenlose Internetseiten. Kommt sowohl auf den Autor als auch auf dich an. Kostenlos ist nicht per se schlecht, genauso wie die Tatsache, dass ein Buch etwas kostet, kein Garant für die Qualität ist.



  • cooky451 schrieb:

    • Strukturen

    Benutzt man die in C++ überhaupt noch großartig? Lohnt sich es nicht stattdessen direkt ne Klasse zu benutzen?



  • @Holymagic:
    Also ich habe schon manchmal noch klassische "structs".

    Also Klassen die halt nur öffentliche Member haben, was jetzt nicht heisst dass diese Member alle eingebaute Typen sein müssen.

    z.B. als Ersatz für elendig lange Parameterlisten macht das IMO Sinn, macht alles etwas leichter zu lesen.

    Klar könnte man sowas auch mit "class" machen, und dann halt gleich "public:" nach der "{" schreiben (und kein "protected" oder "private"), nur... wozu? "struct" sagt für mich schön "das ist ne dumme Sammlung von Werten, mehr nicht".



  • cooky451 schrieb:

    Na, eine Tabelle zum Abarbeiten, was?

    • Variablen
    • Funktionen
    • Abfragen (if, switch)
    • Schleifen
    • Arrays
    • Casts
    • Pointer
    • Speichermanagement bzw. Lebenszeit von Objekten. (Stack, Heap, static sind Stichworte)
    • Strukturen
    • Ein / Ausgabe. // Bis hier hin ist es eher C, aber das sollte natürlich auch für C+++ bekannt sein.
    • Standardcontainer (insbesondere: string, vector, map)
    • Klassen mit allem was dazu gehört. (private, protected, public, Vererbung, virtual, pure virtual, ..)
    • Iteratoren
    • Templates
    • Exceptions
    • Ein paar Dinge aus <algorithm>

    Das wären so in etwa die Grundlagen.

    Dann fange ich mal gleich mit dem Abarbeiten an 😃 .

    cooky451 schrieb:

    Das variiert sehr stark und ist abhängig davon, wie "low-level" du programmieren möchtest. Das kann von "WinAPI mit DirectX" bis zur Einarbeitung in eine bestimmte Engine gehen. Das solltest du dir überlegen, wenn du die Grundlagen hast.

    Ok, dann werde ich nach den Grundlagen wahrscheinlich nochmal dazu fragen wenn ich mir da wieder unsicher bin(und google mir nicht hilft).

    Danke für eure Hilfe 👍

    -Skotchy



  • Ich bin soweit mit der Liste durch, einige Dinge konnte ich schon vorher(wusste nur nicht wie die heißen) und bei manchen Dingen brauche ich noch Hilfe. Ab dem Punkt 'Standardcontainer' finde ich alles(außer Klassen) recht kompliziert.
    Deshalb frage ich hier einmal nach Seiten- und Tutorialempfehlungen(bitte Links)und nach einer Buchempfehlung(hab mir da auch schon eins rausgesucht: C++ von A bis Z und C++ für Spieleprogrammierer . Allerdings habe ich immer bedenken bei den negativen Rezensionen).
    Weiterhin danke für eure Antworten.

    -Skotchy



  • Standardcontainer musst du nur benutzen und nicht verstehen. (Zumindest nicht im Detail, ein gewisses Verständnis sollte natürlich auch zum Benutzen da sein.)
    Dafür sollte eigentlich http://www.cplusplus.com/reference/stl/ reichen.
    Auch sonst kann ich dir die Seite empfehlen, die haben zu allem was:
    http://www.cplusplus.com/doc/tutorial/classes/
    http://www.cplusplus.com/doc/tutorial/templates/
    http://www.cplusplus.com/doc/tutorial/exceptions/
    http://www.cplusplus.com/reference/algorithm/
    Iteratoren guckst du dir am besten gleich mit den <algorithm> Sachen an, auf der Seite stehen auch Beispielimplementierungen, da bekommt man ein gutes Gefühl für Iteratoren.



  • Danke für die Seiten, die sind zwar auf englisch aber ich müsste da mit meinen Englisch-Kenntnissen relativ gut durchkommen.

    Edit: Nebenbei hätte ich da noch eine Frage(es werden immer mehr :)):
    Könnte mir jemand auch so eine Art Aufgabe geben damit ich das gelernte auch wiedergebe?
    Also ich stelle mir das so vor das ich in einem Programm möglichst viel des Gelernten nutze um zu sehen was ich schon kann und was nicht, in 'Schwierigkeitsstufen' unterteilt( leicht, mittel, schwer) wäre nett 🙂

    Danke für die Hilfe.

    -Skotchy



  • Schreibe eine Funktion, die eine Datei einließt, die folgendermaßen aufgebaut ist:

    Schlüssel Wert
    Schlüssel Wert
    ...
    

    Gib anschließend jeden Schlüssel und den dazugehörigen Wert aus.
    Da hätten wir dann schon mal: Variablen, Funktionen, Schleifen, (Pointer/Referenzen?), Standardcontainer, Iteratoren. 🙂


Log in to reply