Spielprogrammierung: C # oder C ++? [geschlossen]

15

Ich habe beschlossen, dass ich wirklich Spiele programmieren möchte. Als 18-Jähriger, der Autodidakt lernen möchte, stellt sich die Frage, welche Programmiersprache zwischen C # und C ++ am besten geeignet ist. (Ich sollte sagen, dass mir Unix egal ist, weil ich glaube, dass Windows immer noch das am häufigsten verwendete Betriebssystem sein wird.)

Ich kenne die Grundlagen von C ++, aber keine über C #. Ich weiß, dass C ++ mehr Anleitungen, DLLs und ähnliches enthält, während C # dies nicht tut, aber es ist viel einfacher zu lernen und für eine einzelne Person zu verwenden, um ein Programm zu entwickeln, aber ich habe gelesen, auch wenn das Programm verschleiert ist Es ist einfach, die Quelle zu finden.

Nun, ich möchte mich zuerst ein bisschen auf das Wesentliche konzentrieren. Ich muss sagen, dass ich C ++ bevorzuge, nur weil es sich für mich geeigneter anfühlt, aber ich muss bedenken, dass ich alleine arbeite. Selbst wenn es mir gefällt, ist es vielleicht nicht das Beste, was ich tun kann.

Ich bin mir wirklich nicht sicher, für welche ich mich entscheiden soll, ich habe viele Threads auf verschiedenen Websites gelesen und es sieht so aus, als ob C # populärer wird als C ++. Aber ja, das heißt, ich habe auch spezifiziert, dass ich Spieleprogrammierung machen möchte. Ich muss also einige bessere Punkte kennen, als nur "C # ist einfacher wegen der .net-Speicherbehandlung, während C ++ nicht", weil ich es nicht einfach finden konnte.

Matěj Zábský
quelle
16
Sie könnten auch gamedev.stackexchange.com hilfreich finden.
Adam Lear
1
C # ist, was ich empfehlen würde create.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little
2
Siehe auch hier: gamedev.net
Patrick Hughes

Antworten:

21

Ich lerne C ++, indem ich ein Spiel programmiere. Das war eine sehr erfreuliche Erfahrung. Ich ermutige Sie sehr, dasselbe zu tun!

Jetzt bin ich jedoch ein C # -Programmierer. Ich weiß, dass ich viel produktiver gewesen wäre, wenn C # zu diesem Zeitpunkt verfügbar gewesen wäre.

C # ist die perfekte Wahl für die Entwicklung von Lernspielen. Es hat alles, was Sie brauchen, um von Frameworks bis zu Büchern zu starten, und die Sprache ist erstaunlich.

Ich habe Dutzende von Büchern gesehen, die speziell für C # -Spielprogrammierung geschrieben wurden, und Microsoft unternimmt große Anstrengungen, um seine Frameworks zu verbessern, einschließlich DirectX und XNA .

UPDATE : Sie können von Interesse sein , diese auch. Es ist ein neuer Blogbeitrag von Miguel de Icaza .

UPDATE 22.02.2013 Microsoft plant , die XNA-Unterstützung einzustellen .

user2567
quelle
1
Vielleicht sollte ich anfangen, mit SDL oder so etwas in C ++ umzugehen, und dann in Zukunft mit C # weitermachen. Es sieht nur so aus, als würde C ++ durch C # ersetzt, mit Ausnahme der Engine-Erstellung. Warum ist es so schwer, eine Wahl zu treffen !
Chronix
2
Verstehen Sie, dass sich C # hervorragend für die Entwicklung von Spielen eignet, nicht für die Portabilität auf einigen Spieleplattformen oder anderen Problemen. Das beste Szenario ist, wenn Sie über genügend Spieleentwickler verfügen und je nach Zielplattform C ++ oder C # auswählen.
Klaim
Davon abgesehen natürlich +1. Ich persönlich bevorzuge immer noch C ++, aber das liegt nur daran, dass die meisten meiner Projekte aus projektspezifischen Gründen einen Zugriff auf niedriger Ebene erfordern.
Klaim
12

Die meisten Spieleunternehmen verwenden C ++, möglicherweise mit Python-Skripten oder anderen Sprachen, die im Hintergrund ausgeführt werden. Moreso, weil die Bindungen für OpenGL und DirectX auf C ++ abzielen (obwohl ich mir ziemlich sicher bin, dass Sie genauso viel Direct3d-Zeug in C # machen können), aber für die Spieleprogrammierung ist C ++ die Hauptsprache.

Ich gebe Ihnen zwar eine faire Warnung (und lasse mich davon nicht abhalten), aber 3D-Grafiken können extrem kompliziert werden. Das neue Direct3D hat es ein bisschen einfacher gemacht als früher, aber es ist immer noch ein gutes bisschen Mathe (das kann ziemlich verwirrend werden) und nur die Bibliotheken selbst können verwirrend sein.

Ich würde zuerst mit etwas sehr Einfachem beginnen. Für 2D-Inhalte SDL (Simple Directmedia Layer) ist viel einfacher zu verwenden (für so etwas wie ein Top-Down-Spiel), wenn Sie erst einmal in 3D sind. Ich denke, OpenGL ist einfacher zu erlernen (aber das ist alles meine Meinung). MS hat einige nette Tutorials / Samples in der DirectX SDK-Dokumentation, es lohnt sich also einen Blick darauf zu werfen. Die Nehe-Tutorials sind zwar etwas veraltet, aber immer noch nett.

Um Ihre Frage zu beantworten, werden sie alle in der Regel in C ++ ausgeführt.

user6791
quelle
1
SlimDX bietet einen DirectX-Wrapper für .NET
Danny Varod
1
"Für die Programmierung von Spielen ist C ++ die Hauptsprache." Ich würde dieser Aussage nicht zustimmen. Der Spielemarkt ist viel breiter als nur AAA-Konsolenspiele - das ist ein viel kleineres Marktsegment, als die Leute normalerweise erkennen. Ich würde sagen, viel mehr Spiele sind in Sprachen wie ActionScript geschrieben als C ++
MattDavey
8

Zuerst möchten Sie einige Prioritäten setzen. Möchten Sie erst ein Spiel erstellen und später die fortgeschritteneren Aspekte der Programmierung kennenlernen oder umgekehrt? Beide Ansätze haben ihre Vor- und Nachteile, sind aber meiner Meinung nach beide legitim.

Wenn Sie anfangen möchten, Spiele zu machen, würde ich empfehlen, C # zu lernen. Wenn Sie die Grundlagen von C ++ bereits kennen, sollten Sie keine Probleme haben, C # zu erlernen. C # zu Ihrem Werkzeug zu machen hat Vorteile. Es ist eine leicht zu erlernende Sprache (im Vergleich zu C ++) und eine "verwaltete Sprache", was bedeutet, dass es automatisch die Speicherinstallation für Sie übernimmt (etwas, mit dem viele C ++ - Anfänger und selbst Anfänger Probleme haben ). Darüber hinaus erhalten Sie Zugriff auf das Microsoft XNA Framework, das noch mehr mühsame Installationsarbeiten für Sie erledigt. So können Sie sich auf Dinge wie den Spielzyklus und das Design konzentrieren, ohne sich (zu sehr) darum kümmern zu müssen, dass es funktioniert. Es stimmt, all diese Installationen haben ihren Overhead, was bedeutet, dass Sie wahrscheinlich keine 3D-Spiele für die Industrie entwickeln werden, aber Sie sind gerade dabei, Spiele zu programmieren. Ich bezweifle, dass Sie bei Ihren ersten Versuchen den nächsten Halo machen werden. :)

Hier ist ein Post-Mortem von dem Typ, der ein erfolgreiches XNA-Spiel (Weapon of Choice) entwickelt hat. Er beschreibt, wie die Verwendung von C # / XNA ihm Entwicklungszeit gespart hat, anstatt C ++ zu verwenden. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Trotzdem sollten Sie einige Zeit investieren, um zumindest zu wissen, wie die Dinge im Hintergrund funktionieren. Wie ein C ++ - Programmierer das machen würde. Wenn Sie lernen, ein Spiel in C ++ zu erstellen, ist es möglicherweise einfacher, einem anderen Spieleentwicklungsteam beizutreten (da die meisten von ihnen in C ++ arbeiten), wenn Sie sich in der Spieleindustrie etablieren möchten. Aber selbst wenn Sie am Ende nie C ++ verwenden, kann das Wissen darüber, wie die Interna funktionieren, Sie zu einem besseren Programmierer machen, unabhängig davon, welche Sprache Sie verwenden.

System aus
quelle
Ich stimme vollkommen zu. Die Speicherverwaltungsprobleme, mit denen Sie bei c ++ konfrontiert sind, sind das größte Problem. Es gab kein Spiel, an dem ich gearbeitet habe und an dem keine Speicherprobleme aufgetreten sind, und ich habe das Gleiche von 20-jährigen Veteranen gehört, die Dutzende von Spielen gemacht haben. Selbst RAII und Smart Pointer lösen das Problem nicht, da Sie Probleme mit Zeigern bekommen, die auf alte Daten und Probleme mit dem Besitz verweisen. Wenn Sie lernen, wie man sie findet und behebt, werden Sie ein viel besserer Programmierer sein, aber es könnte Monate dauern, bis Sie zum ersten Mal einen Pufferüberlauf haben und das Spiel in einem nicht zusammenhängenden Teil abstürzt.
Dominique McDonnell
Ich möchte zu dieser Frage hinzufügen, dass C # auch XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) zu seinem Vorteil hat. XNA ist viel einfacher zu erlernen als nicht verwaltetes DirectX.
Vitor Py
1
@DominicMcDonnell: Sie können Probleme mit dem Arbeitsspeicher haben, indem Sie Verweise auf Daten in verwalteten Laufzeiten wie C # verbergen. Wenn dies eintritt, wird es Ihnen viel schwerer fallen, nach Daten zu suchen, da Sie nicht daran gewöhnt sind, über die Lebensdauer von Ressourcen nachzudenken.
Jan Hudec
@JanHudec, das wusste ich nicht. Ich nehme an, Sie könnten sagen, dass es einfacher und einfacher ist, die Dinge zum Laufen zu bringen, aber es ist viel schwieriger, sie aufzuspüren, und in gewisser Weise werden die Gewohnheiten, die die Sprache Ihnen ermöglicht, im Weg stehen.
Dominique McDonnell
3

Ich unterstütze C ++ in hohem Maße für die Spieleentwicklung. Es gibt ein paar zusätzliche Hindernisse mit verschiedenen Vor- und Nachteilen. Einer der besten Gründe ist die Portabilität.

Mit C # können Sie heutzutage einiges mehr entwickeln, und es gibt einige erstaunlich gute Engines, die mit Sicherheit darin programmiert sind. Beide sind gute Sprachen für die Spieleprogrammierung. Wenn Sie nur auf Windows / Xbox-Plattformen abzielen, haben Sie besonders Grund, sich an C # zu orientieren.

Die Sprache, von der ich denke, dass Sie sie lernen sollten, ist OpenCL oder CUDA, eine GPGPU-Sprache. Persönlich bevorzuge ich OpenCL, da es wahrscheinlich überdauern und weiter wachsen wird, es ist im Grunde nur C-Stil. Es gibt OpenTK, das ein netter Wrapper für C ++ oder C # ist.

Ich habe mich immer gefragt, wie die Ruby-Spieleprogrammierung mit Hardwarebeschleunigung aussehen würde ...

Garet Claborn
quelle
3

Raw Game Programming wird dich ziemlich kalt lassen. Das Arbeiten mit Grafikaufrufen auf niedriger Ebene in C # oder C ++ ist ein kleiner Albtraum, und Sie möchten das Rad zum Rendern von 2D-Sprites und 3D-Modellen wirklich nicht neu erstellen. Da Sie selbstständig sind und Programmieren lernen möchten, ist es am besten, ein Framework zu finden, das Sie ein wenig voranbringen kann.

Da Sie mit C-basierter Sprache vertraut sind, ist mein Vorschlag, Unity 3D einen Blick darauf zu werfen. Es verzeichnet nicht nur eine ernsthafte Akzeptanz bei kommerziellen Spieleentwicklern und bietet einige interessante Plattformoptionen (einschließlich PC, Android, iPhone und Weblaufzeiten), sondern auch eine kostenlose Version, die sehr einfach zu bedienen ist und viele Tutorials enthält um Ihnen den Übergang vom Konzept zur Umsetzung zu zeigen. Das Beste von allem (IMO) ist, dass eine der unterstützten Skriptsprachen C # ist.

Jacob Proffitt
quelle
2

Ich habe vor zwei Jahren ein Spiel für eine Klasse gemacht (ich war damals auch 18) und wir haben es in C # gemacht. Während ich beobachte, dass große C # -Programme normalerweise langsamer arbeiten als große C ++ - Programme, erfordert C # auch viel weniger Arbeit auf Ihrer Seite. Die Speicherverwaltung erfolgt automatisch und ist für den Umfang eines ersten Spiels ausreichend schnell. (Unser Spiel ist ein vollwertiges 2D-Multiplayer-Starcraft-ähnliches RTS.)

Ich würde für C # rooten, da es einfacher zu verwalten sein sollte. Wenn Sie jedoch ein professioneller Spieleentwickler werden möchten, denken Sie daran, dass dies nur auf Microsoft-Plattformen funktioniert. (Dennoch kann C # ein guter Einstieg in C ++ sein, und wenn ich die beiden Sprachen neu lernen müsste, würde ich versuchen, zuerst C # zu lernen.)

zneak
quelle
C # läuft auch auf Mono (plattformübergreifend), Teile des Frameworks (zB WPF) werden jedoch nicht unterstützt.
Danny Varod
1
@Danny Varod, ich empfehle Mono nicht wirklich für die Entwicklung von plattformübergreifenden Spielen, da die Features von Microsoft bisher immer etwas verspätet waren und ich nicht erwarte, dass sich daran etwas ändert. Ein großes Plus bei der Entwicklung mit C # für Microsoft-Plattformen ist XNA. Solange Mono nicht auch DirectX bereitstellt, wird es nicht auf Nicht-MS-Plattformen funktionieren.
Zneak
1
Mono muss einen kompatiblen OpenGL-Wrapper bereitstellen, da DirectX, wie Sie angegeben haben, Microsoft gehört. Mein Punkt war nur, dass C # teilweise portiert werden kann.
Danny Varod
2
Zwischen Unity, Monogame (OpenSource XNA für Mono) und OpenTK gibt es viele gute Spielbibliotheken für Mono.
Stonemetal
1

Ich würde stimmen C ++ - vor allem , weil es plattformübergreifend sein kann (je nachdem , wie Sie Ihren Code schreiben, natürlich) und auch , weil ich denke , dass es Sie mehr Wissen über die Speicherverwaltung gibt - weil Sie brauchen , darüber zu kümmern. Aber da Sie sich nicht für Linux / Unix interessieren, sollten Sie sich jetzt auf C # konzentrieren und dann auch C ++ lernen, wenn Sie die Speicherkomplexität für den Moment auslassen möchten.

Mauren
quelle
Vielen Dank für die Beantwortung Ihrer ersten Frage zu Stack Exchange-Programmierern.
DeveloperDon
C ++ ist bis heute die portabelste Sprache. Vor allem mobile Plattformen verfügen teilweise über Java, teilweise über C #, die meisten jedoch nicht über beides. Aber alle müssen C ++ haben; Die virtuellen Maschinen müssen in etwas implementiert werden, das sich zu systemeigenem Maschinencode kompiliert, und dass sich derzeit immer etwas in C ++ befindet.
Jan Hudec