Grafische Spiele in C programmieren?
Hallo,
ich möchte ein grafisches 2D Spiel in C programmieren, weiß aber nicht, wie ich anfangen kann. Das Spiel soll später mal auf Linux und Windows laufen.
Schon einmal im Voraus vielen Dank für die antworten.
3 Antworten
Dazu würde ich den Qt-Creator empfehlen. Das ist eine komplette C und C++ Entwicklungsumgebung mit Editor, Debugger, Formdesigner und der plattformunabhängigen Qt-Bibliothek. Diese enthält Funktionen wie Netzwerk, Zugriff auf die Schnittstellen (z.B. USB, Bluetooth), grafische Oberflächen/Darstellung (Formdesigner), Multimediafunktionen und vieles mehr. Damit kann man Programme für Windows, Mac und Linux entwickeln ohne den Quellcode ändern zu müssen. Das ganze gibt es sowohl als kostenlose Open Source Lizenz oder kostenpflichtige propritäre Lizenz. Der Funktionsumfang ist bei beiden Lizenzen identisch.
Hier die benötigten Downloads:
für Windows:
- MinGW, das sind die GCC Compiler für Windows: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download
- Qt-Creator: https://www.qt.io/download Wähle Open Source. Diese Lizenz ist kostenlos. Nach der Installation vom Qt-Creator muss man die Pfade zu MinGW eintragen.
- Qt Installer Framework: https://download.qt.io/official_releases/qt-installer-framework/4.0.0/QtInstallerFramework-win-x86.exe Damit kann man sein fertig kompiliertes Programm mit allen benötigten Laufzeitbibliotheken in ein Installationspaket (setup.exe) verpacken. Ideal wenn man sein Programm veröffentlichen oder weitergeben möchte.
für Mac:
- Zuerst muss man die GCC Compiler installieren: https://www.codeflow.site/de/article/mac__how-to-install-gcc-compiler-on-mac-os-x
- Qt-Creator: https://www.qt.io/download Wähle Open Source. Diese Lizenz ist kostenlos.
- Qt Installer Framework: https://download.qt.io/official_releases/qt-installer-framework/4.0.0/QtInstallerFramework-mac-x64.dmg Damit kann man sein fertig kompiliertes Programm mit allen benötigten Laufzeitbibliotheken in eine ausführbare .app zusammenfassen und in ein DMG-Paket verpacken. Ideal wenn man sein Programm veröffentlichen oder weitergeben möchte.
Linux-Nutzer installieren die GCC Compiler und den Qt-Creator über die Paketverwaltung der Distribution. Diese Lizenz ist die Open Source Lizenz. Das Qt Installer Framework gibt es nicht für Linux, dort erzeugt man mit den Bordmitteln je nach Distribution deb oder rpm Programmpakete.
Dann verwendet man eine Gaming-Engine die plattformunabhängig ist. Die kann man dort auch einbinden. Zum Beispiel MonoGame: https://www.monogame.net/ Diese kann man dann auch in den C Code im Qt Creator einbinden. Dazu muss MoneGame in der Windows PATH Umgebungsvariable eingetragen sein. Bei Mac und Linux geht das automatisch.
MonoGame ist ein Spieleframework für C#. Seit wann wird die Entwicklung mit C unterstützt, ohne dafür Umwege (wie Platform Invocations) gehen zu müssen?
So die ganz harte Tour, außer Du nimmst DOS-Graphik, was aber dazu führt, dass Du entweder bei jedem Move das Bild neu zeichnen musst oder aber kräftig Assembler einbinden darfst, um auf dem Bildschirm frei rumlaufen zu dürfen.
Nimmst Du die Windows-Graphik, also kein Konsolenprogramm, sondern bist ein Frame-Owner, dann viel Spaß mit WIN32API und dem Korrespondierenden bei Linux.
C ist eigentlich weniger geeignet für so etwas, kann man machen, aber dann ist man richtig gut.
Diese Buch durchlesen
Rheinwerk Computing :: C von A bis Z (rheinwerk-verlag.de)
und dann sprechen wir nochmal ...
Diese Buch durchlesen
Rheinwerk Computing :: C von A bis Z (rheinwerk-verlag.de)
und dann sprechen wir nochmal ...
Lieber nicht, dieses Buch hat (in der Auflage, die da online) ist, einen extrem schlechten Ruf unter C-Programmierern, weil es ohne Ende fehlerbehaftet ist.
https://www.amazon.de/gp/customer-reviews/R2ZZQZM0ZLLLHZ
Meiner Ansicht nach sollte man für die grafische Entwicklung eher Frameworks bzw. Libraries nehmen, und diese geben dann auch an, welches Tutorial man sich angucken sollte. Wobei man sich mMn. mit C das Leben nur unnötig schwer macht, dafür gibt es geeignetere Sprachen.
Die Frage liest sich aber auch so'n bisschen wie "Hallo, Ich möchte ein Mehrfamilienhaus bauen, weis aber nicht, wie ich anfangen soll".
DOS-Graphik einfach mit printf Zeichen auf der Konsole ausspucken. Man kommt nur nicht wieder hoch, außer Du nimmst in C einen Inline-Assembler bzw. so was hier asm_{} oder ähnlich, dann kannst Du maschinennah den Bildschirm adressieren, also direkt via Port und Adresse frei auf dem Bildschirm arbeiten. Das ist aber schon recht anspruchsvoll, dafür musst Du Assembler können.
Zum einen solltest du natürlich mit C vertraut sein und eine passende Entwicklungsumgebung eingerichtet haben. Des Weiteren solltest du ein Game Concept definieren (lies dazu hier), damit du genau planen kannst, was du noch so brauchst. Unüberlegt in ein Projekt zu stürzen, wäre nicht gerade das, was ich empfehlen würde.
Um deine 2D-Grafiken zu rendern, benötigst du ein Zeichentool / eine Schnittstelle zu Bibliotheken, die dies für dich übernehmen. Mit C könntest du da direkt auf Vulkan, OpenGL, o.ä. zugreifen (dazu später), doch empfehlen würde ich eher die Nutzung von Bibliotheken, die deutlich abstrahieren und vielleicht auch noch weitere Funktionen (z.B. eine Sound API) für eine einfache Handhabung bereits implementiert haben. In meiner Antwort von hier habe ich schon einmal ein paar solcher Tools aufgezählt, die sich da gut eignen würden.
Ansonsten findest du hier noch eine Tutorialserie von jemanden, der sich mit Hilfe der Raylib eine kleine Engine geschrieben hat. Über diese Serie kannst du ein wenig über eine mögliche Vorgehensweise und Grundarchitektur für kleine Spiele erfahren.
Wenn du wiederum sehr daran interessiert bist, auf tieferen Ebenen herumzuwerkeln, könntest du dir ebenso OpenGL-Tutorials suchen (schau beispielsweise direkt ins OpenGL-Wiki; ein Manual für Vulkan findest du hingegen hier), um eine eigene Rendering Engine zu entwickeln. Allerdings verlangt dies auch einigen Implementationsaufwand von deiner Seite (du entfernst dich also auch etwas weiter von deinem Endziel) und es kann schnell kompliziert werden.
Zuletzt noch eine kleine Anregung für später: Wie du an meiner (verlinkten) Tool-Liste gemerkt haben dürftest, sind mehrere Bibliotheken (SDL, SFML, ...) auch oft auf die Entwicklung mit C++ ausgerichtet. C++ liefert zwar nochmals neue Komplexität, bietet jedoch auch den Vorteil, dass Konzepte der objektorientierten Programmierung sprachlich fest integriert sind. Diese können die Entwicklung von komplexeren Anwendungen vereinfachen.
wie funktioniert das mit der dos grafik?