web-dev-qa-db-fra.com

Faut-il choisir C # ou C++ pour apprendre la programmation de jeux (consoles)?

J'ai des connaissances de base en programmation de jeu en c et c ++. J'apprends c # de nos jours. Si je veux faire carrière dans la programmation de jeux pour consoles, laquelle devrais-je utiliser pour continuer? J'ai remarqué que beaucoup de sociétés de jeux utilisent C++/C (probablement pour des raisons héritées du passé). Aussi probablement C++ jouit d'un plus grand nombre de bibliothèques supportées?
Dans quelles langues les moteurs de jeu modernes (unreal/crysis, etc.) sont-ils écrits?
Quelle langue est un meilleur pari? et pourquoi?

33
understack

C++, pour deux raisons.

1) beaucoup de jeux sont programmés en C++. Aucun jeu grand public n’est encore programmé dans une langue gérée.

2) C++ est aussi difficile que possible. Vous devez maîtriser la gestion manuelle de la mémoire et généralement aucune vérification des limites (au-delà de l'excellent Valgrind!). Si vous maîtrisez le C++, vous le trouverez transférable aux langages de procédures gérés. Moins si l'inverse.

C++ a un niveau de complexité proche de APL ! Vous ne vous améliorerez jamais en affrontant des adversaires plus faibles.

Joel fait un point très fort à ce sujet . Les personnes qui comprennent le fonctionnement de la machine font de meilleurs programmeurs, parce que toutes les abstractions ont une fuite .

51
Will

Ok voici mes deux cents.

Si vous envisagez de vous lancer sérieusement dans l'industrie du jeu, je vous recommande d'apprendre les deux langues. Commencer avec C++, puis passer à un langage géré tel que C #. C++ a ses avantages sur C #, mais C # a également des avantages sur C++. 

Personnellement, je préfère n'importe quel jour le C # au C++. C’est parce que plusieurs raisons:, juste quelques unes:

  1. C # rend la programmation amusante à nouveau;).
  2. Son code géré me permet de réaliser facilement des tâches complexes sans oublier la sécurité.
  3. C # est purement POO, forçant des règles dans Votre code qui aide à garder votre code Plus lisible, 'maintenable' et L'exécution est plus stable. Le taux de productivité dépasse le C++ d’au moins 10%, le meilleur programmeur C++ Pourrait être un meilleur programmeur C #.
  4. Ce n’est pas vraiment une raison, mais plutôt.une chose comme «j’aime» dans C #: LINQ.

Maintenant ... il y a beaucoup de choses qui me manquent à propos de C++. Je suis incapable de gérer (complètement) ma propre mémoire. Je ne peux pas vous dire combien de fois je me suis surpris à essayer de "supprimer" une instance/référence. Une autre chose que je n'aime pas à propos de C # est l'incapacité à utiliser l'héritage multiple, mais cela m'a aussi obligé à réfléchir davantage à la manière de structurer mon code.

Il y a eu plus de discussions à ce sujet qu'il n'y a d'étoiles dans l'univers connu et toutes se ferment dans une impasse. Aucune langue n’est meilleure que l’autre et refuser l’une contre l’autre ne fera que vous faire du mal à long terme. Les temps changent, tout comme les normes en matière de programmation informatique.

Quelle que soit la langue que vous choisissez de conserver en haut de votre liste, gardez toujours les options ouvertes et ne vous décidez pas pour une seule langue. Vous dites que vous connaissez déjà le C++, pourquoi ne pas apprendre le C #, cela ne fait pas de mal et je vous le promets, cela fera de vous un meilleur programmeur C++.

37
zackery.fix

Ça dépend

Cela dépend de beaucoup de choses - vos objectifs, votre expérience, votre calendrier, etc.

La majorité de la programmation de jeux n'est pas spécifique à un langage. Les mathématiques 3D sont des mathématiques 3D en C # autant qu’en C++. Bien que les API puissent être différentes et qu'une "comptabilité" différente puisse être requise, la logique et les calculs fondamentaux resteront les mêmes.

Et il est vrai que la plupart des moteurs de jeu AAA sont en C++ avec un langage de script en plus. C'est indéniable. Cependant, la plupart des moteurs AAA disposent également d'une panoplie d'outils internes qui les prennent en charge, et ils peuvent figurer dans n'importe quoi - Java, C #, C++, etc.

Si vous voulez écrire un jeu et êtes un développeur expérimenté alors le C++ et le C # ont beaucoup à faire pour eux. C # a moins de tâches ménagères, alors que C++ a plus de bibliothèques et d'outils disponibles. Cependant, pour tout ce qui est très complexe, il serait préférable d’essayer de partir d’un moteur existant.

Si vous voulez écrire un jeu et êtes un nouveau développeur alors n'écrivez pas de moteur. Utilisez un moteur existant et modifiez-le ou utilisez ses installations pour écrire votre partie. Croyez-moi.

Si vous voulez apprendre à écrire un moteur et êtes un développeur expérimenté vous devriez probablement penser à C++. Le C # est également possible, mais la quantité de code et la facilité d'intégration du C++ le placent probablement au-dessus.

Si vous voulez apprendre à écrire un moteur et êtes un nouveau développeur je recommanderais probablement C #/XNA. Vous arriverez plus rapidement au jeu, avec moins de maux de tête pour apprendre les tenants et les aboutissants du C++.

Si vous voulez un emploi dans l'industrie alors vous devez déterminer quel type d'emploi vous voulez. Un langage de haut niveau peut aider à mettre un pied dans la porte en ce qui concerne les outils et/ou le développement Web, ce qui peut créer des opportunités sur le travail de jeu réel. Même la connaissance des langages de script peut vous aider si vous souhaitez obtenir davantage de postes de concepteur de jeu/scripteur. Il y a de fortes chances que vous ne trouviez pas un travail sur le moteur de base immédiatement, car les compétences requises pour le faire sont assez élevées. De solides compétences en développement C++ sont toujours utiles, en particulier dans des scénarios en temps réel ou en réseau.

Le développement d'un moteur de jeu AAA implique un code sérieux.

Si vous souhaitez démarrer une maison de développement professionnel , alors vous ne lisez probablement pas ceci, mais vous savez déjà que C++ est probablement la seule réponse viable.

Si vous voulez faire du développement de jeux occasionnels alors vous devriez probablement envisager Flash ou une technologie similaire.

26
kyoryu

Je ne vais pas répondre à la question initiale car la plupart des posts ici ont. Je vais vous signaler quelque chose que vous avez manqué dans votre message. Le simple fait de connaître C\C++\C # ne vous permettra pas de faire carrière dans le développement de jeux. La plupart des studios de jeux ont des dizaines à des centaines d’applications pour un travail simple. Qu'est-ce qui vous distingue des autres? Qu'est-ce qui fait de vous un meilleur employé qu'une personne ayant l'expérience de la création de jeux dans un autre studio?

Si vous voulez vraiment faire carrière dans l’industrie du jeu vidéo, même sur consoles, vous devriez faire une démonstration qui montre ce que vous savez. C++ serait un excellent choix de langue à utiliser dans la démo si vous postulez pour un poste de développement sur console. Vous pourriez en montrer plus en créant un outil dans C #\XNA pour créer les actifs de votre démo. Vous montrerez aux responsables du recrutement et aux responsables techniques que vous n'êtes pas juste un gars C++ ni qu'un gars C #: vous êtes un développeur.

13
Marcus Johnson

Il n'y a pas une seule langue qui soit un "meilleur pari". Utilisez le langage le mieux adapté à vos tâches, que ce soit la programmation de jeux ou tout autre domaine. C++ ne s'en va pas de si tôt.

Si vous ne développez pas pour une plate-forme Microsoft, je doute que vous utilisiez C #.

10
user123456

C++.

C'est la norme d'or pour la programmation de jeux AAA. Si vous devez faire quelque chose d'intéressant, vous devrez faire du C++ ou vous plonger dans du C # non géré (pas toujours sympa).

C++ est aussi sans doute plus rapide ( les mises en garde habituelles s'appliquent ).

En tant qu'expérience d'apprentissage, C # n'en vaut pas la peine. C++ est incontestablement meilleur, en particulier dans le monde quasi-intégré des consoles. Pour obtenir l'expérience orientée objet, dirigez-vous vers Java.

6
Paul Nathan

Pour dire la vérité ... vous devez décider quel est le meilleur langage. Je sais ce que je peux faire avec C #. Je sais ce qui peut être fait en C++. C # n'est pas conçu pour faire ce que le C++ a été conçu pour ... écrire du code au niveau le plus élémentaire tout en conservant un peu de signification lorsqu'il est lu par des yeux humains.

Nous développons un moteur de jeu avec C #, DirectX ... est-ce un défi? ouais ... mais c'est quelque chose que nous avons choisi de faire. Nous examinons des niveaux de performance très proches de ce que C++ peut offrir. Donc, je ne vois aucun problème avec cet effort.

Pour le développement multi-plateforme, sans .Net, nous n'aurions peut-être pas la plateforme Mono. La plate-forme Mono a élargi notre base de plate-forme.

Voici quelques support à mes arguments ...

5
IAbstract

Vous ne trouverez pas C # en cours d'exécution sur les consoles, donc c'est inutile à cet égard.

Si vous apprenez à programmer, C # offre une courbe d’apprentissage moins complexe que C++, mais vous pouvez écrire en C++ sans entrer dans les zones les plus effrayantes et les plus complexes du langage, de sorte que ce n’est pas vraiment plus difficile.

Si vous souhaitez programmer avec des graphiques ou d'autres éléments "gamesey", C # est un choix plutôt médiocre - optez pour C++ avec OpenGL ou DirectX.

modifier

En fin de compte, si vous voulez faire carrière dans les jeux, optez pour le C++. Vous pourrez peut-être écrire du code de jeu en C #, mais de manière réaliste, vous ne trouverez pas autant d'opportunités de carrière utilisant C # qu'avec C++. À moins que vous ne souhaitiez devenir un programmeur d’outils de jeu, dans ce cas, C # est bien meilleur que C++, car vous pouvez obtenir beaucoup plus de fonctionnalités en moins de temps. Beaucoup de sociétés de jeux se tournent vers C # pour développer le plus grand nombre d’outils possibles.

Bien sûr, si vous pouvez gérer la charge de travail, le meilleur moyen est d'apprendre les deux langues et d'appliquer "le meilleur outil pour le poste". Comme ils sont si semblables, il n’est vraiment pas difficile d’apprendre l’un lorsque vous avez appris l’autre. (Vraiment, l'essentiel de la courbe d'apprentissage passant de C++ à C # est .net et LINQ, etc. plutôt que le langage C # de base en soi - une grande partie est presque identique, avec seulement quelques bits de sucre syntaxique ici et là)

3
Jason Williams

C++ avec win32/GDI est relativement facile à utiliser, mais bien plus difficile que Flash ou Python (pygame). Cependant, en utilisant C++, vous en apprendrez beaucoup au cours de ce processus et serez prêt à poursuivre votre carrière en tant que Développeur de jeu. Vous pouvez également consulter XNA si vous souhaitez programmer sur la xbox360.

J'ai pris des cours à Game Institute (GI) et j'ai beaucoup appris sur le C++, l'API win32 et DirectX.

3
mr-sk

Hé, si BASIC est assez bon pour les gorilles, c'est assez bien pour moi.

2
Coderer

Cela dépend vraiment du type de jeu que vous envisagez de créer: de nombreux jeux pourraient être réalisés dans un langage comme C #. Cela étant dit, la majorité du développement de jeux se fait en C++, car la majorité des développeurs de jeux ont besoin d'optimiser les performances de la plate-forme, ce qui signifie que C, C++ ou un assembleur ( shudder ) .

2
Jeff Hornby

C++ est la lingua franca de l'industrie du jeu sur console. Pour le meilleur ou pour le pire, vous devez savoir que c'est un programmeur de jeu professionnel.

2
munificent

Regardez ça comme ça - bien que vous puissiez écrire un jeu en C #, cela ne vous ouvrira pas beaucoup de portes. Si vous connaissez le C++ et Lua, vous serez beaucoup plus employable.

De plus, vous ne parlez pas que de PC de bureau et de consoles, les jeux sont de nos jours très destinés aux appareils mobiles. Par conséquent, le seul fait de savoir que C # vous limiterait encore plus. Bien sûr, le C++ ne sera pas le choix optimal pour écrire des applications pour iPhone, mais vous serez bien plus proche du programmeur C-objectif si vous connaissez le C++ que si vous connaissez le C #.

Les développeurs de jeux utilisent le C++ non pas pour des raisons héritées (bien qu'avoir établi des moteurs et des bibliothèques C++ aident), mais pour la performance et l'expérience. Les développeurs de jeux connaissent le C++, cela fonctionne très bien pour eux, il n’ya donc pas lieu de changer. Ce n'est pas comme les applications métier (sous Windows) où le développeur partage ses idées avec les outils Microsoft actuels.

2
gbjbaanb

Si vous voulez être employé professionnellement en tant que développeur de jeux, vous devez connaître C/C++ . Fin de l'histoire!

2
devilcrack

Je pense que C++.

Parce que c # nécessite une installation supplémentaire pour l'exécution C # qui n'absorbe que de l'espace sur un disque ..___. Et C # est bien sûr un peu plus lent.

2
oneat

Je crois que C++ est le langage que vous recherchez. La majorité du développement de jeux est en C++ car il s’agit d’un langage multi-paradigme (POO, méta-programmation, etc.) et parce qu’il permet la gestion de la mémoire. Ce qui rend C++ encore meilleur, c'est qu'il peut être utilisé pour se développer sur une multitude de plates-formes, alors que C # ne peut pas le faire à une si grande échelle.

Beaucoup diront qu'avec C #, vous n'aurez pas à vous soucier de l'allocation de mémoire, ce qui est vrai à un certain prix. Vous aurez le fardeau du framework .NET sur vos épaules et vous verrez lentement les limites du C # dans la façon dont certaines tâches doivent être effectuées.

Vous avez probablement lu dans certaines réponses que C++ est un langage de programmation difficile. C’est surtout vrai, mais vous n’avez peut-être pas entendu parler de C++ 0x. Certaines fonctionnalités trouvées dans C #, telles que la récupération de place, deviendront disponibles (à utiliser facultativement) avec C++ 0x. De plus, le multithreading sera finalement supporté par le langage avec cette révision de la norme C++.

Je vous recommanderais d’acheter quelques livres C++ ainsi que des livres C++ DirectX/OpenGL.

1
Partial

C'est toujours difficile à dire, car ils utilisaient Assembly jusqu'en 1993, NBA Jam, si quelqu'un se souvient de ce mauvais garçon. La technologie est en constante évolution, il est donc très difficile de dire où elle ira. Je recommanderais donc d'apprendre le C et de bien le maîtriser, puis de passer au C++. Je dirai ceci comme une mise en garde si vous aimez jouer à des jeux vous n'apprécierez pas les jeux de codage.

0
Woot4Moo

Si vous connaissiez C # et XNA, vous pourriez créer quelques exemples de jeux de manière assez simple, ce qui pourrait aider à percer sur le terrain.

À mon avis, les moteurs de jeu principaux sont écrits en C++, mais certains des autres codes autour du noyau pourraient être en C #. 

0
alchemical