Ok, dann kommt jetzt mein ziemlich langes Statement zu dem Thema... 😉
Ich denke, es ist erst einmal ein wenig Aufklärung notwendig, bevor wir
hier Begriffe wie OpenGL, OLE und .net mit C++ vermischen.
Zunächst: C und C++ hat absolut nichts Zwingendes mit den anderen, hier
erwähnten Techniken zu tun. Wir können uns sicher darauf einigen, dass
C++ sich zunächst auf einen erweiterten Sprachumfang von C reduzieren
lässt. Das wesentliche Element hierbei ist der Übergang von der prozeduralen zur objektbasierten Implementation.
Letzteres lässt sich auch wunderbar über C realisieren, nur eben nicht
so schön gekapselt. Die meisten Programmierer, die ich kenne, und die
von sich behaupten C++ zu programmieren, implementieren ganz ordinär
prozedural. Lediglich ihre Datei-Extension ist .cpp und sie verwenden
// für Zeilenkommentare.
Alle unsere Spiele (mit Ausnahme der Windows-Engine) sind in reinem C
geschrieben, haben aber auch schon eine objektorientierte Idee dahinter.
Das Problem, als C-Programmierer auf C++ ohne gute Anleitung
umzusteigen, ist ein ziemlich heikles Thema, da man sich am Anfang sehr
schwert tut, die Objekt-Idee zu verstehen und überhaupt zu kapieren,
warum das nun alles besser ist.
Wenn Du also noch wenig oder gar keine Erfahrung mit C++ hast, vergiss
erst einmal alles Andere und schliesse Dich mit Deinem Rechner, einem
guten C++-Buch (z.B. Stroustrup, Strasser oder Johonsonbaugh) und etwas
Nahrung für eine Woche in einer Kammer ein.
Komme erst wieder heraus, wenn Du Begriffe wie protected, dynamic_cast,
Mehrfachvererbung, rein virtuelle Basisklasse,
Standard-Copy-Construktor und virtuelle Destruktoren im Schlaf
beherrschst.
Wenn Du nun glaubst, alles begriffen zu haben, solltest Du Dich
unbedingt ein wenig mit Templates auseinandersetzen, um die elementaren
Dinge der Standard Template Library zu begreifen. Weiter geht es hier
erst, wenn Du weisst, was ein Iterator oder ein Prädikat ist.
Diesen Stoff vermittle ich in meinem C++-Basis-Kurs in einer
knallharten Woche, und trotz persönlichem Coaching zeigt sich immer
ziemlich deutlich, dass man viel mehr Zeit braucht, um diese Dinge in
Fleisch und Blut übergehen zu lassen.
Erst jetzt solltest Du Dich mit den anderen Begriffen
auseinandersetzen. (Sorry RobinSword) Begriffe wie .net, OLE und COM
kannst Du zumindest für Deine ersten Spiele komplett ignorieren (weil
man sie dafür einfach nicht braucht).
Mit der MFC stehe ich prinzipbedingt ein wenig auf Kriegsfuss. Einmal,
weil sie der Standard-Windows-API einfach nur ein Klassenmodell
überstülpt, dabei aber das eigentlich notwendige Know-How unter den
Tisch fallen lässt. Eine MFC-Hello-World-Applikation hat man in wenigen
Sekunden zusammengeklickt, den dämlichen Toolbar bekommt man
anschließend nur mit Mühen wieder weg.
Für die eigentlichen, für Spiele-Programmierer notwendigen APIs brauchst Du ohnehin keine MFC, nicht einmal für DirectX.
Apropos DirectX: DirectX ist keine einzelne Schnittstelle, sondern ein ganzes Sammelsurium von Schnittstellen, da gibt es:
- DirectDraw: Für schnelle Bitmap-Grafiken (verwendet in der Windows-Robot-Version)
- Direct3D: Für die Darstellung echter 3D-Welten (die man aber auch erst einmal definieren muss)
- DirectSound: Für die Sound-Ausgabe
- DirectInput: Für Maus-, Joystick- usw. Eingabe
- DirectPlay: Für Netzwerk-Spiele
- DirectMusic: Für MIDI-Ausgabe
um einmal die wichtigsten zu nennen. Alleine um sein Spiel in den
Vollbildmodus zu schalten oder mehrere WAV-Streams abzuspielen kommt
man kaum um DirectX herum. Da DirectX eine objektbasierte Schnittstelle
aufweist, kommt man daher auch kaum um C++ herum, obwohl man Dinge wie
Vererbung definitiv nicht braucht.
Und dann ist da noch OpenGL, eine Alternative zu Direct3D. Mir
persönlich fiel die Einarbeitung in OpenGL deutlich einfacher, als in
Direct3D, da es einfach ein paar wirklich gute Tutorials gibt.
So, das war es von meiner Seite in der notwendigen Kürze. Weitere Fragen sind immer willkommen. 😉