Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

31.10.2010, 02:20

Fragen eines Programmieranfängers

Guten Tag,
ich würde mich selbst als Programmieranfänger beschreiben und hoffe, ihr könnt mir bei einigen Fragen & Problemen helfen.
Ich lerne seit ca. 2 Jahre das Programmieren. Bisher war es aber so, dass ich mir immer verschiedene Sprachen angeschaut habe und eben die Grundlagen gelernt habe. Nun habe ich mich vor ca. 6 Monaten entschieden, bei C++ zu bleiben. Ziel ist es, GUI-Anwendungen und Spiele zu programmieren. Zu Zweiteres zähle ich keine unrealistischen 3D-Ultraspiele, die ich am besten sogar noch alleine programmiere, sondern kleinere Spiele, die sich zumindest vorerst im 2D-Bereich beschränken sollten.

Nun kommen wir auch schon zum Hauptproblem. Ich habe mir bisher mehrere Bücher durchgelesen und kenne viele Funktionalitäten der allgemeinen Programmierung und C++. Damit will ich sagen, dass ich vom Allgemeinwissen her eigentlich up to date bin. Ich kenne die Grundlagen, von Schleifen bis hin zur STL und habe mich auch mit der Objektorientierung befasst. Trotzdem weiß ich nie, wie ich beim Programmieren vorgehen soll.

Sei es, dass ich eine "Übungsaufgabe" von Freunden gestellt bekomme. Ich versuche sie zu lösen und komme an manchen Punkten nicht weiter. Ich weiß einfach nicht, wie man das "gelernte" auch sinnvoll anwendet. Gucke ich mir nun aber den Quellcode des Anderen an, scheint mir alles logisch und ich kann es sowohl nachvollziehen als auch verstehen. Dann stellt sich mir immer die Frage, wieso ich bloß selbst nicht darauf gekommen bin.

Und genau dies ist auch das, dass mich desöfteren demotiviert. Einerseits reicht es mir langsam mit der Konsole. Denn die Funktionalität anhand des Codes habe ich mittlerweile gelernt. Wenn ich mir dann aber nun diverse "Next-Way-Things" wie QT für die GUI-Programmierung anschaue, merke ich wieder, dass ich nicht weiß, wie ich vorgehen soll.
Gucke ich mir aber fertige QT-Konstrukte an, kann ich diese verstehen.

Ist dies normal? War dies bei euch genauso? Oder bin ich einfach nur zu "dumm" dafür?
Ich hoffe, dass ihr mir vielleicht einige Tipps geben könntet, wie ich mein Problem lösen könnte. Denn dieses "für das Eine zu gut, für das Andere zu schlecht" lässt mir keinen Mittelpunkt, mit dem ich mich befassen könnte. Dies hat die Folge, dass ich nach einiger Zeit des Lernens wieder eine "Lernpause" einrichte, da die Motivation wieder flöten ging.
Ich möchte noch anmerken, dass ich ein Autodidakt bin. Ich bringe mir alles selbstständig anhand eines Buches bei.

Ebenfalls würde ich gerne fragen, welcher Einstieg in die Spieleprogrammierung am sinnvollsten wäre? Sollte ich am Anfang mit kleinen Dingen wie der SDL oder SFML(richtig?) anfangen? Oder gleich DirectX oder OpenGL? Oder vielleicht sogar Ogre3D?

Liebe Grüße,

2

31.10.2010, 03:19

Herzlich willkommen erstmal
Zuerst einmal: Die meisten hier sind Autodidakten, die sich ihr wissen mithilfe von Büchern
(z.B. den zweien hier im Forum) beigebracht haben. Ich denke mal das ist besonders für
Hobbyentwickler kein schlechter Weg.

Mein Tipp an dich wäre sich mal die SFML (http://www.sfml-dev.org/) anzuschauen.
Vor allem die Tutorials vermitteln viel Wissen über Grundlagen der Spieleprogrammierung.
Außerdem gibt es auf der Seite auch noch den Quellcode für ein Pong (ist im SDK beigelegt,
dass man auf der Seite runterladen kann.

Falls dich all das nicht weiterbringt dann überleg dir mal ganz Grundsätzlich was du für ein Pong
so brauchst, bzw. was das Programm denn so machen muss und wenn du das hast probier einfach
es so zu schreiben wie du es machen würdest.

Natürlich kannst du dich bei Fragen auch jederzeit an die Community wenden.

Viel Spaß und Glück bei dem nächsten Schritt
Flonk
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

3

31.10.2010, 07:16

Nun, also es ist ganz klar, dass es schwieriger ist, ein Programm selbst zu schreiben, als das eines anderen zu verstehen. Das gilt auch für vieles andere, z.B. in der Mathematik einen Beweis führen, oder nur verstehen, eine Fremdsprache sprechen, oder nur jemand anderen zu verstehen usw...
Erfahrung spielt dabei einfach eine sehr wichtige Rolle, nicht umsonst gibt es auch Bücher zu Design Patterns, da haben erfahrene Software-architekten ihre bewährten Lösungen vorgestellt. Für sowas bedarf es aber eben viel Praxiswissen.

Außerdem ist es grade bei anderen Bibliotheken immer so, dass man erstmal auf Programmen anderer aufbaut, sprich tutorials liest und den code verwendet. Bei einer so riesigen bibliothek wie Qt wäre es ziemlich dumm ewig herumzuexperimentieren, bis man einen weg gefunden hat. Bei Qt wird vieles über Makros und externe Programme erledigt, sowas kann man nur aus fertigen Beispielprogrammen rauslesen, nicht aus der API.

Vielleicht wieder mal ein Vergleich mit Mathematik: "In mathematics you don't understand things. You just get used to them." (John von Neumann). Das gleiche gilt eben auch für die Programmierung, also bleib einfach mal bei einer Sprache und schreib Programme. Der Rest kommt dann schon von allein.

Wenn dir die Konsole zu langweilig ist, kann man für reine 2D Spiele die SFML denke ich für den Anfang empfehlen. Das ist eine ziemliche allroundbibliothek für anfänger.
Wenn du dann mal ein Spiel schreibst, wirst du am anfang sehr oft merken, dass irgendein Ansatz nicht besonders gut war und dir fällt eine bessere Lösung ein. So lernst man nunmal in der Spieleprogrammierung... learning by doing ^^

Edit: Noch ein Nachtrag zu Ogre3D: Ogre ist wirklich nur für den 3D Teil gedacht. Man braucht jede Menge anderer Bibliotheken, in die man sich dann alle gleichzeitig einarbeiten muss und erstmal ein Framework schreiben muss, was dann auch alles zusammenbringt. Das wäre z.B. OIS für den Input, CEGUI für die Oberfläche, OpenAL für den Sound, RakNet fürs Netzwerk... Damit anzufangen wäre nicht besonders klug.
Wenn du unbedingt 3D machen willst, würde ich dir Qt empfehlen, da hast du eine sehr einfache, aber mächtige Oberflächenbilbiothek, mit einem sog. QGLWidget, was du direkt verwenden kannst. Da würde ich mir erstmal ein bisschen low-level basiswissen aneignen und OpenGL direkt verwenden, bis du mal verstanden hast, wie so eine renderingpipeline funktioniert. Das macht auch später die Benutzung von Ogre einfacher, weil du auch verstehst, was Ogre im Hintergrund so macht und wo du ansetzen musst, wenn du irgendetwas bewerkstelligen willst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »n0_0ne« (31.10.2010, 07:27)


4

31.10.2010, 10:30

hm, nur weil die meisten bücher zu c++ nur bis zur stl kommen heißt das nicht dass das die krönung der schöpfung ist, das ist maximal das ende der grundlagen.

ich pers. habe mit SDL angefangen in c++ was grafisches zu machen und kann das eigentlich nur empfehlen.
http://lazyfoo.net/SDL_tutorials/index.php
Auf der seite sind ein paar einfache beispiele mit code und direktem bezug zur spieleprogrammierung. der code ist angenehm kompakt und man kann damit schon einiges erreichen.

wenn man nicht weiß wie man anfangen soll bei einem projekt (das kennt eigentlich jeder, zumindest ab einer gewissen größe ist es ziemlich schwer da zu sehen wie man da rangeht) macht man sich erstmal einen plan (pen&paper) und schreibt sich auf aus welchen bestandteilen sich sowas zusammensetzt und was die einzelnen akteure machen und können sollen.

lehrbuchmäßig kann man hier mal UML und Substantivmethode erwähnen, auch wenn ich das außerhalb von lehrveranstaltungen nie produktiv benutzt habe.

wichtig ist vielleicht auch dass du dich langsam steigerst und nicht direkt mit umfangreichen projekten anfängst. für ein erstes spiel mit grafik kannst du dich ja mal an snake oder game of life versuchen. das kann man beides in weniger als 150 zeilen packen. pong ist schon etwas anspruchsvoller weil man sich da ziemlich genau über so sachen wie kollissionsabfrage und abprallwinkel gedanken machen muss. sachen wie pacman haben dann auch eine map was nochmal ein einflussfaktor auf das spielverhalten ist.

gruß

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

31.10.2010, 10:48

C++ ist zwar imo die perfekte Sprache für die Spieleentwicklung, aber wenn es um Anwendungsentwicklung geht würd ich grundsätzlich mal zu C# raten außer du hast ein paar wirklich extrem gute Gründe C++ zu verwenden. Und selbst dann würde ich mir eher überlegen ob es nicht in Frage kommt C++ und C# zu kombinieren.

Anyway, dass du Probleme hast das gelernte sinnvoll anzuwenden ist ganz normal. Jeder muss sich erstmal eine gewisse Denkweise aneignen und vor allem eines: Viel Erfahrung sammeln. Erfahrung ist das wichtigste wenn es ums Programmieren geht und deswegen würde ich dir empfehlen einfach mal ein kleines Spiel mit der SFML zu schreiben. Und danach dann noch ein Spiel und noch ein Spiel und noch ein Spiel und...und zwischendrin vielleich immer mal was andres wenn Spiele grad fad geworden sind.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

31.10.2010, 11:02

Ich bin auch hier mal so frei und verlink die Diskussion von hier:
http://www.c-plusplus.de/forum/viewtopic…-is-276314.html

btw:
Soll kein Vorwurf, sondern Anregung sein.

7

31.10.2010, 12:11

Guten Morgen,
zuallererst möchte ich mich für alle Antworten herzlichst bedanken.
Ebenfalls möchte ich Drakon für die Verlinkung danken. ;-)


Zitat

Bei Qt wird vieles über Makros und externe Programme erledigt, sowas kann man nur aus fertigen Beispielprogrammen rauslesen, nicht aus der API.
Wie meinst du dies genau? Sollte ich mir z.B. den Quellcode eines Programmes anschauen, dass etwas sinvolles macht und mir dann die Vorangehensweise im Allgemeinen merken? Oder sollte ich mir einzelne Funktionen des "Programmierers" herauspicken und selbst verwenden und dementsprechend durch öftere Benutzung den Umgang lernen?

Zitat

Damit anzufangen wäre nicht besonders klug.
Was wäre denn dann nach "sfml" der nächste Schritt? OpenGL oder DirectX?

Zitat

C++ ist zwar imo die perfekte Sprache für die Spieleentwicklung, aber
wenn es um Anwendungsentwicklung geht würd ich grundsätzlich mal zu C#
raten außer du hast ein paar wirklich extrem gute Gründe C++ zu
verwenden. Und selbst dann würde ich mir eher überlegen ob es nicht in
Frage kommt C++ und C# zu kombinieren.
Also wäre es deiner Meinung nach sinnvoller, für die Spieleprogrammierung C++ zu verwenden und für die GUI-Programmierung C# und WinForms/WPF?
Ansich ist dies keine so schlechte Idee. Da würde sich aber die Frage stellen, wie ich nun beginne. Schließlich möchte ich beides gerne machen und könnte jetzt nicht sagen:"So, ab heute programmiere ich nur Spiele" oder umgekehrt. Wenn ich mich aber mit beiden gleichzeitig beschäftige, kommt dann nicht ein gewisses "Durcheinander" auf? Schließlich ist C# und .NET ja mit vielen Unterschieden geprägt. Allein schon, dass C# einen GarbageCollector hat und 100% Objektorientiert ist, keine Zeiger benutzt werden(Ausnahme evt. die Funktionszeiger) und dergleichen.
Wie würde es übrigens aussehen, wenn ich z.B. später ein Spiel in C++ programmiere und für dieses z.B. eine GUI im Ganzen bräuchte, in der ich das Spiel integrieren möchte. Durch die Kombination mit C# verliert das Spiel ja dann ansich die Plattformunabhängigkeit bzw. die Geschwindigkeit, oder?

Liebe Grüße,

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

31.10.2010, 12:21

Entscheid dich für eines, oder eben beides, früher oder später wirst du so oder so mit mehreren verschiedenen Sprachen arbeiten. Dein Spiel braucht sicher einen Map Editor, den kannst du z.B. in C# schreiben ;)

GUI in Spielen is dann wieder eine ganz andere Sache, für sowas braucht es eigene Bibliotheken, da hilft dir weder Qt, noch WPF noch WinAPI (ok bei Qt bin ich mit nicht ganz sicher, das kann evtl. auch in ogl rendern). Ein Spiel besteht im allgemeinen nur aus einem Fenster und alles was da drin is wird von der Anwendung selber gezeichnet/verwaltet, auch das GUI. Dafür gibts dann eben fertige Bibliotheken (z.B. das alleits beliebte CEGUI) oder deine Engine hat schon was eingebaut oder du musst eben alles selber machen.

Man kann übrigens auch mit C# Spiele machen ;)

9

31.10.2010, 12:35

Entscheid dich für eines, oder eben beides, früher oder später wirst du so oder so mit mehreren verschiedenen Sprachen arbeiten. Dein Spiel braucht sicher einen Map Editor, den kannst du z.B. in C# schreiben .

Man kann übrigens auch mit C# Spiele machen ;)
Beides wäre natürlich toll. Nur habe ich ein wenig Angst, dass mich der unterschiedliche Aufbau der beiden Sprachen ein wenig einschüchtern beim Lernen.

Du meinst z.B. C# und XNA? Dies wäre natürlich auch eine Möglichkeit. Nur hat man denke ich mit C++ mehr offene Karten. Vorallem auch aus dem Grunde, dass mehr Entwicklerteams C++ Programmierer suchen.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

10

31.10.2010, 13:49

Was wäre denn dann nach "sfml" der nächste Schritt? OpenGL oder DirectX?
Ja wie gesagt würde ich da einfach mal Qt nehmen und etwas mit OpenGL rumspielen. Vllt mal eine Kugel- oder Torusklasse per hand schreiben, mit Texturen versehen, rausfinden, wie das mit der Projektion und Camera funktioniert, vllt noch nen shader für irgendwas schreiben (damit hab ich mich bis jetzt auch erst ansatzweise befasst). Ich meine jetzt nicht, dass du jedes feature bis OpenGL 4.1 einmal benutzen sollst, sondern eben einfach mal das Grundprinzip der rendering pipeline verstanden und mal genutzt haben sollst. Ich denke es ist ganz sinnvoll sich damit mal ein bisschen beschäftigt zu haben, bevor man zu einer mächtigen-highlevel lib wie Ogre3D greift.
Wie meinst du dies genau? Sollte ich mir z.B. den Quellcode eines Programmes anschauen, dass etwas sinvolles macht und mir dann die Vorangehensweise im Allgemeinen merken? Oder sollte ich mir einzelne Funktionen des "Programmierers" herauspicken und selbst verwenden und dementsprechend durch öftere Benutzung den Umgang lernen?
Naja, eher ersteres. Ich wollte damit eigentlich nur sagen, dass man, wenn man fremde bibliotheken benutzen will eigentlich immer als erstes die dazugehörigen Tutorials lesen muss. Da wird einem dann gezeigt, wie die lib zu verwenden ist... von allein kommt man da normalerweise allein anhand der API nicht drauf, egal wie erfahren man ist.

Werbeanzeige