Programmation de jeux: C # ou C ++? [fermé]

15

J'ai décidé que je voulais vraiment faire de la programmation de jeux. Donc la question est, en tant que 18 ans qui veut apprendre la programmation autodidacte, quel est le langage de programmation le plus adapté entre C # et C ++? (Je dois dire que je ne me soucie pas d'Unix car je pense que Windows sera toujours le système d'exploitation le plus utilisé)

Je connais les bases du C ++, mais rien sur le C #. Je sais que C ++ a plus de guides de didacticiels, de DLL et d'autres trucs comme ça, alors que C # ne le fait pas, mais c'est beaucoup plus facile à apprendre et à utiliser pour une seule personne pour développer un programme, mais j'ai lu même si le programme est obscurci il est facile d'en obtenir la source.

Eh bien, je veux d'abord me concentrer sur le basique, je dois dire que j'ai une préférence pour le C ++ juste parce qu'il me semble plus approprié, mais je dois considérer que je travaille seul. Donc, même si j'aime ça, ce n'est peut-être pas la meilleure chose à faire.

Je ne sais vraiment pas lequel choisir, j'ai lu beaucoup de discussions sur divers sites Web et il semble que C # devienne plus populaire que C ++. Mais oui, cela dit, j'ai également précisé que je voulais faire de la programmation de jeux. J'ai donc besoin de connaître de meilleurs points que simplement "C # est plus facile à cause de la gestion de la mémoire .net alors que C ++ ne l'est pas" parce que je ne pouvais pas le trouver.

Matěj Zábský
la source
16
Vous pourriez également trouver gamedev.stackexchange.com utile.
Adam Lear
1
C # est ce que je recommanderais create.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little
2
Voir aussi ici: gamedev.net
Patrick Hughes

Réponses:

21

J'apprends le C ++ en programmant un jeu. Ce fut une expérience très agréable. Je vous encourage fortement à faire de même!

Cependant, maintenant que je suis un programmeur C #, je sais que j'aurais été beaucoup plus productif si C # était disponible à l'époque.

C # est le choix parfait pour apprendre le développement de jeux. Il a tout ce dont vous avez besoin pour commencer des frameworks aux livres et le langage est incroyable.

J'ai vu des dizaines de livres spécifiquement écrits sur la programmation de jeux C # et Microsoft met beaucoup d'efforts pour améliorer ses cadres, y compris DirectX et XNA .

Mise à jour : vous pouvez être intéressé par ce aussi bien. Il s'agit d'un récent article de blog de Miguel de Icaza .

MISE À JOUR 2013-02-22 Microsoft prévoit de cesser la prise en charge de XNA .

utilisateur2567
la source
1
Alors peut-être que je devrais commencer à contourner SDL ou quelque chose comme ça avec C ++ puis passer à C # à l'avenir. !
Chronix
2
Comprenez que C # est excellent pour expérimenter le développement de jeux, pas pour la portabilité sur une plate-forme de jeu ou d'autres préoccupations. Le meilleur scénario est lorsque vous connaissez suffisamment de développeurs de jeux en utilisant les deux et que vous choisissez C ++ ou C # selon la plate-forme cible.
Klaim
A part ça, +1 évidemment. Personnellement, je préfère toujours le C ++, mais c'est uniquement parce que la plupart de mes projets nécessitent un accès de bas niveau pour des raisons spécifiques au projet.
Klaim
12

La plupart des sociétés de jeux utilisent C ++, peut-être avec des scripts python ou d'autres langages exécutés en arrière-plan. Moreso parce que les liaisons pour OpenGL et DirectX sont destinées à C ++ (mais je suis presque sûr que vous pouvez faire autant de choses Direct3d en C #) mais pour la programmation de jeux, C ++ est le langage MAIN.

Je vais vous donner un avertissement juste (et ne laissez pas cela vous dissuader), mais les graphiques 3D peuvent devenir extrêmement compliqués. Le nouveau Direct3D a rendu les choses un peu plus faciles que par le passé, mais c'est quand même un peu de mathématiques (qui peuvent devenir assez déroutantes) et seules les bibliothèques elles-mêmes peuvent être déroutantes.

Je commencerais par quelque chose de très simple en premier. pour les trucs 2D, SDL (Simple Directmedia Layer) est beaucoup plus facile à utiliser (pour quelque chose comme un jeu descendant) une fois que vous entrez dans la 3D, je pense PERSONNELLEMENT qu'OpenGL est plus facile à apprendre (mais ce n'est qu'une opinion). MS a de beaux tutoriels / exemples dans leur documentation SDK DirectX, donc ça vaut le coup d'y jeter un œil. Les tutoriels Nehe bien qu'un peu dépassés sont quand même sympas.

mais pour répondre à votre question, elles se font toutes en C ++ typiquement.

user6791
la source
1
SlimDX fournit un wrapper DirectX pour .NET
Danny Varod
1
"pour la programmation de jeux, C ++ est le langage PRINCIPAL." Je ne suis pas d'accord avec cette affirmation. Le marché des jeux est beaucoup plus large que les seuls jeux sur console AAA - c'est un segment du marché beaucoup plus petit que les gens ont tendance à réaliser. Je dirais que beaucoup plus de jeux sont écrits dans des langages comme ActionScript que C ++
MattDavey
8

Vous voudrez d'abord définir certaines priorités. Voulez-vous simplement créer un jeu d'abord, puis découvrir les aspects plus avancés de la programmation plus tard, ou vice versa. Les deux approches ont leurs avantages et leurs inconvénients, mais elles sont toutes deux légitimes à mon avis.

Si vous voulez commencer à créer des jeux, je vous recommande d'apprendre le C #. Si vous connaissez déjà les bases du C ++, vous ne devriez avoir aucun problème à choisir C #. Faire de C # votre outil présente des avantages. C'est un langage facile à apprendre (par rapport au C ++) et c'est un "langage managé", ce qui signifie qu'il fait automatiquement la plomberie de la mémoire pour vous (quelque chose que beaucoup de débutants C ++, et même pas les débutants, ont des problèmes avec ). Il vous donne également accès au framework XNA de Microsoft qui fait encore plus de plomberie fastidieuse pour vous. Cela vous laisse vous concentrer sur des choses comme le cycle de jeu et la conception, sans avoir à vous soucier (trop) de le faire fonctionner. Certes, toute cette insta-plomberie a ses frais généraux, ce qui signifie que vous ne ferez probablement pas de jeux 3D de qualité industrielle, mais que vous vous lancez dans la programmation de jeux, donc je doute que vous fassiez le prochain Halo lors de vos premiers essais. :)

Voici un post mortem du gars qui a développé un jeu XNA réussi (Weapon of Choice). Il détaille comment l'utilisation de C # / XNA lui a fait gagner du temps de développement au lieu d'avoir à utiliser C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Cela étant dit, vous devez consacrer du temps à au moins savoir comment les choses fonctionnent en arrière-plan. Comment un programmeur C ++ le ferait. Apprendre à créer un jeu en C ++ pourrait rendre plus facile de rejoindre une autre équipe de développement de jeux (car la plupart d'entre eux travaillent en C ++), si ce que vous voulez, c'est prendre pied dans l'industrie du jeu. Mais même si vous n'utilisez jamais C ++, savoir comment fonctionnent les internes ne peut que faire de vous un meilleur programmeur, quel que soit le langage que vous utilisez.

Système hors service
la source
Je suis complètement d'accord. Les problèmes de gestion de la mémoire auxquels vous êtes confronté avec c ++ sont le plus gros problème. Il n'y a pas eu un jeu sur lequel j'ai travaillé qui n'a pas eu de problèmes de mémoire, et j'ai entendu la même chose dire par des vétérans de 20 ans qui ont fait des dizaines de jeux. Même RAII et les pointeurs intelligents ne résolvent pas le problème, car vous rencontrez des problèmes avec les pointeurs pointant vers d'anciennes données et des problèmes de propriété. Apprendre à les trouver et à les corriger fera de vous un bien meilleur programmeur, mais cela pourrait vous faire trébucher pendant des mois la première fois que vous avez un dépassement de tampon et que le jeu plante dans une partie non liée.
Dominique McDonnell
Je voudrais ajouter à cette question que C # a également XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) à son avantage. XNA est beaucoup plus facile à récupérer que DirectX non géré.
Vitor Py
1
@DominicMcDonnell: Vous pouvez avoir des problèmes de mémoire en gardant les références à des choses cachées quelque part dans les runtimes gérés comme C # et quand il arrivera, vous aurez beaucoup plus de mal à le rechercher car vous ne serez pas habitué à penser aux durées de vie des ressources.
Jan Hudec
@JanHudec, je ne le savais pas. Je suppose que vous pourriez dire que faire fonctionner les choses est plus simple et plus facile, mais les got-yas sont beaucoup plus difficiles à retracer et, à certains égards, les habitudes que le langage vous permet de construire gênent.
Dominique McDonnell
3

Je fais la promotion de C ++ pour le développement de jeux. Il y a quelques obstacles supplémentaires, avec divers avantages et inconvénients, l'une des meilleures raisons étant la portabilité.

Avec C #, vous pouvez développer un peu plus ces jours-ci, et il y a à coup sûr des moteurs incroyablement excellents. Les deux sont de bons langages pour la programmation de jeux, si vous ne ciblez que les plates-formes Windows / Xbox, vous aurez surtout des raisons de vous pencher vers C #.

La langue que je pense que vous devriez apprendre le plus serait OpenCL ou CUDA, une langue GPGPU. Personnellement, je préfère OpenCL car il semble susceptible de durer plus longtemps et de se développer davantage, il s'agit essentiellement d'un style C. Il y a OpenTK qui est un joli wrapper pour C ++ ou C #.

Je me suis toujours demandé à quoi ressemblerait la programmation du jeu Ruby avec l'accélération matérielle ...

Garet Claborn
la source
3

La programmation du jeu brut va vous laisser assez froid. Travailler avec des appels graphiques de bas niveau en C # ou C ++ est un cauchemar mineur et vous ne voulez vraiment pas reconstruire la roue du rendu des sprites 2D et encore moins des modèles 3D. Étant donné que vous êtes seul et que vous souhaitez apprendre la programmation, votre meilleur pari est de trouver un cadre qui peut vous mettre un peu en avant.

Puisque vous avez une certaine familiarité avec le langage C, ma suggestion serait de donner à Unity 3D un look. Non seulement il connaît une adoption sérieuse dans les magasins de développement de jeux commerciaux et possède des options de plate-forme intéressantes (y compris les runtimes PC, Android, iPhone et Web), mais il a également une version gratuite très facile à utiliser et de nombreux tutoriels pour vous montrer comment passer du concept à la mise en œuvre. Le meilleur de tous (IMO), l'un des langages de script pris en charge est C #.

Jacob Proffitt
la source
2

J'ai fait un jeu pour une classe il y a deux ans (j'avais 18 ans à l'époque) et nous l'avons fait en C #. Bien que j'observe que les grands programmes C # fonctionnent généralement plus lentement que les grands programmes C ++, C # nécessite également beaucoup moins de travail de votre côté. La gestion de la mémoire se fait automatiquement, et pour la portée d'un premier jeu, c'est assez rapide. (Notre jeu est un RTS multijoueur 2D à part entière de type Starcraft.)

Je prendrais racine pour C # car il devrait être plus facile à gérer. Cependant, si vous souhaitez devenir un développeur de jeux professionnel, n'oubliez pas qu'il ne fonctionne que sur les plates-formes Microsoft. (Pourtant, C # peut être un bon tremplin vers C ++, et si je devais réapprendre les deux langages, j'essaierais d'abord d'apprendre C #.)

zneak
la source
C # fonctionne également sur Mono (multiplateforme), mais certaines parties du framework (par exemple WPF) ne sont pas prises en charge.
Danny Varod
1
@Danny Varod, je n'aime pas vraiment recommander Mono pour le développement de jeux multiplateformes car jusqu'à présent, ils ont toujours été un peu en retard sur Microsoft en termes de fonctionnalités, et je ne m'attends pas à ce que cela change. En outre, un atout majeur du développement avec C # pour les plates-formes Microsoft est XNA, et jusqu'à ce que Mono fournisse également DirectX, cela ne fonctionnera pas sur les plates-formes non MS.
zneak
1
Mono devra fournir un wrapper OpenGL compatible, car, comme vous l'avez dit, DirectX appartient à Microsoft. Mon point était seulement que C # peut être partiellement porté.
Danny Varod
2
Entre Unity, monogame (opensource XNA pour mono) et OpenTK, il y a beaucoup de bonnes bibliothèques de jeux pour mono.
stonemetal
1

Je voterais C ++ - principalement parce qu'il peut être multiplateforme (selon la façon dont vous écrivez votre code, bien sûr) et aussi parce que je pense qu'il vous donne plus de connaissances sur la gestion de la mémoire - parce que vous devez vous en soucier. Mais comme vous ne vous souciez pas de linux / unix, si vous voulez laisser de côté la complexité de la mémoire pour l'instant, pourquoi ne pas vous concentrer en C # tout de suite et apprendre aussi le C ++?

Mauren
la source
Merci d'avoir répondu à votre première question sur Stack Exchange Programmers.
DeveloperDon
Le C ++ est toujours le langage le plus portable à ce jour. Surtout les plates-formes mobiles, certaines ont Java, certaines ont C #, mais la plupart n'ont pas les deux. Mais tous doivent avoir C ++; les machines virtuelles doivent être implémentées dans quelque chose qui se compile en code machine natif et que quelque chose est actuellement toujours en C ++.
Jan Hudec