Programación de juegos: C # o C ++? [cerrado]


15

He decidido que lo que realmente quiero es hacer programación de juegos. Entonces, la pregunta es, como un joven de 18 años que quiere aprender programación autodidacta, ¿cuál es el lenguaje de programación más adecuado entre C # y C ++? (Debo decir que no me importa Unix porque creo que Windows seguirá siendo el sistema operativo más utilizado)

Conozco los conceptos básicos de C ++, pero ninguno sobre C #. Sé que C ++ tiene más guías de tutoriales, dlls y cosas así, mientras que C # no, pero es mucho más fácil de aprender y usar para que una sola persona desarrolle un programa, pero he leído incluso si el programa está ofuscado Es fácil obtener la fuente.

Bueno, primero quiero enfocarme en lo básico, debo decir que tengo preferencia por C ++ solo porque me parece más adecuado, pero debo considerar que trabajo solo. Entonces, incluso si me gusta, puede que no sea lo mejor que pueda hacer.

Realmente no estoy seguro de cuál elegir, he leído muchos hilos en varios sitios web y parece que C # se está volviendo más popular que C ++. Pero sí, dicho eso, también especifiqué que quiero hacer programación de juegos. Por lo tanto, necesito conocer algunos puntos mejores que "C # es más fácil debido al manejo de la memoria .net mientras que C ++ no lo es" porque no pude encontrarlo.


16
También puede encontrar útil gamedev.stackexchange.com .
Adam Lear


2
Ver también aquí: gamedev.net
Patrick Hughes

Respuestas:


21

Aprendo C ++ programando un juego. Esa fue una experiencia muy agradable. ¡Te animo a que hagas lo mismo!

Sin embargo, ahora que soy programador de C #, sé que habría sido mucho más productivo si C # estuviera disponible en ese momento.

C # es la elección perfecta para aprender a desarrollar juegos. Tiene todo lo que necesita para comenzar, desde marcos hasta libros, y el lenguaje es increíble.

He visto docenas de libros específicamente escritos sobre C # Game Programming y Microsoft está haciendo muchos esfuerzos para mejorar sus marcos, incluidos DirectX y XNA .

ACTUALIZACIÓN : también puede interesarle esto . Es una publicación reciente del blog de Miguel de Icaza .

ACTUALIZACIÓN 2013-02-22 Microsoft planea dejar de admitir XNA .


1
Entonces, tal vez debería comenzar a usar SDL o algo así con C ++ y luego pasar a C # en el futuro ... parece que C ++ está siendo reemplazado por C #, excepto por la creación del motor ... ¿Por qué es tan difícil elegir? !
Chronix

2
Comprenda que C # es excelente para experimentar el desarrollo del juego, no para la portabilidad en alguna plataforma de juegos u otras preocupaciones. El mejor de los casos es cuando conoces suficiente desarrollo del juego usando ambos y eliges C ++ o C # dependiendo de la plataforma de destino.
Klaim

Aparte de eso, +1 obviamente. Personalmente, todavía prefiero C ++, pero eso es solo porque la mayoría de mi proyecto requiere un acceso de bajo nivel por algunas razones específicas del proyecto.
Klaim

12

La mayoría de las compañías de juegos usan C ++, tal vez con scripts de python u otros lenguajes que se ejecutan en segundo plano. Más aún porque los enlaces para OpenGL y DirectX están dirigidos a C ++ (aunque estoy bastante seguro de que puedes hacer lo mismo con Direct3d en C #), pero para la programación de juegos, C ++ es el lenguaje PRINCIPAL.

Sin embargo, le daré una advertencia justa (y no deje que esto lo desanime), pero los gráficos 3D pueden ser extremadamente complicados. El nuevo Direct3D lo ha hecho un poco más fácil de lo que solía ser, pero sigue siendo una buena parte de las matemáticas (eso puede ser bastante confuso) y solo las bibliotecas pueden ser confusas.

Comenzaría con algo muy simple primero. para 2d stuff SDL (Simple Directmedia Layer) es mucho más fácil de usar (para algo así como un juego de arriba hacia abajo) una vez que entras en 3D PERSONALMENTE creo que OpenGL es más fácil de aprender (pero esto es todo opinión). MS tiene algunos buenos Tutoriales / Muestras en su documentación DirectX SDK, por lo que vale la pena echarle un vistazo. Los tutoriales de Nehe, aunque un poco anticuados, siguen siendo agradables.

pero para responder a su pregunta, todas se hacen en C ++ normalmente.


1
SlimDX proporciona un contenedor DirectX para .NET
Danny Varod

1
"Para la programación de juegos, C ++ es el lenguaje PRINCIPAL". No estoy de acuerdo con esa declaración. El mercado de juegos es mucho más amplio que solo los juegos de consola AAA: ese es un segmento mucho más pequeño del mercado del que la gente tiende a darse cuenta. Diría que muchos más juegos están escritos en lenguajes como ActionScript que C ++
MattDavey

8

Primero querrás establecer algunas prioridades. ¿Solo quieres hacer un juego primero y luego aprender sobre los aspectos más avanzados de la programación más tarde, o viceversa? Ambos enfoques tienen sus pros y sus contras, pero son legítimos en mi opinión.

Si quieres comenzar a hacer juegos, te recomendaría aprender C #. Si ya conoce los conceptos básicos de C ++, entonces no debería tener problemas para elegir C #. Hacer de C # su herramienta tiene ventajas. Es un lenguaje fácil de aprender (en comparación con C ++) y es un "lenguaje administrado", lo que significa que automáticamente realiza la conexión de memoria por usted (algo que muchos principiantes de C ++, e incluso no tan principiantes, tienen problemas con ) También le da acceso al Marco XNA de Microsoft que hace aún más la tediosa fontanería por usted. Eso te deja concentrarte en cosas como el ciclo y el diseño del juego, sin tener que preocuparte (demasiado) por hacer que funcione. Es cierto que toda esta instalación de fontanería tiene su sobrecarga, lo que significa que probablemente no estarás haciendo juegos 3D de calidad industrial, pero solo estás entrando en la programación de juegos, así que dudo que hagas el próximo Halo en tus primeros intentos. :)

Aquí hay un post mortem del tipo que desarrolló un exitoso juego XNA (Weapon of Choice). Detalla cómo usar C # / XNA le ha ahorrado tiempo de desarrollo en lugar de tener que usar C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Dicho esto, debes invertir algo de tiempo en al menos saber cómo funcionan las cosas en segundo plano. Cómo lo haría un programador de C ++. Aprender a crear un juego en C ++ podría facilitarle unirse a otro equipo de desarrollo de juegos (ya que la mayoría de ellos trabajan en C ++), si lo que quiere es ganar terreno en la industria del juego. Pero incluso si terminas nunca usando C ++, saber cómo funcionan las partes internas solo puede hacerte un mejor programador, sin importar el lenguaje que uses.


Concuerdo completamente. Los problemas de administración de memoria que enfrenta C ++ son el mayor problema. No ha habido un juego en el que haya trabajado que no haya tenido problemas de memoria, y he escuchado lo mismo dicho por veteranos de 20 años que han realizado docenas de juegos. Incluso RAII y los punteros inteligentes no resuelven el problema, ya que tiene problemas con los punteros que apuntan a datos antiguos y problemas con la propiedad. Aprender a encontrarlos y repararlos te hará un programador mucho mejor, pero podría hacerte perder el conocimiento durante meses la primera vez que se desborde el búfer y el juego se bloquee en una parte no relacionada.
Dominique McDonnell

Me gustaría agregar a esta pregunta que C # también tiene XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) a su favor. XNA es mucho más fácil de aprender que DirectX no administrado.
Vitor Py

1
@DominicMcDonnell: Puede tener problemas de memoria manteniendo las referencias a cosas ocultas en algún lugar en tiempos de ejecución administrados como C # también y cuando llegue, será mucho más difícil encontrarlo porque no estará acostumbrado a pensar en la vida útil de los recursos.
Jan Hudec

@ JanHudec, no lo sabía. Supongo que se podría decir que hacer que las cosas funcionen es más simple y fácil, pero los got-yas son mucho más difíciles de rastrear y, de alguna manera, los hábitos que el lenguaje te permite construir se interponen en el camino.
Dominique McDonnell

3

Promuevo altamente C ++ para el desarrollo de juegos. Hay algunos obstáculos adicionales, con varios pros y contras, una de las mejores razones es la portabilidad.

Con C #, puede desarrollar bastante más en estos días, y hay algunos motores increíblemente geniales programados con seguridad. Ambos son buenos lenguajes para la programación de juegos, si se dirige solo a plataformas Windows / Xbox, entonces tendrá una razón especial para inclinarse hacia C #.

El idioma que más creo que debería aprender sería OpenCL o CUDA, un lenguaje GPGPU. Personalmente, prefiero OpenCL, ya que parece que durará más y crecerá, es básicamente solo el estilo C. Hay OpenTK, que es un buen contenedor para C ++ o C #.

Siempre me he preguntado cómo sería la programación de juegos de Ruby con la aceleración de hardware ...


3

La programación cruda del juego te dejará bastante frío. Trabajar con llamadas de gráficos de bajo nivel en C # o C ++ es una pesadilla menor y realmente no desea reconstruir la rueda de renderizado de sprites 2D y mucho menos modelos 3D. Como estás solo y quieres aprender programación, tu mejor opción es encontrar un marco que te pueda adelantar un poco.

Dado que está familiarizado con el lenguaje basado en C, mi sugerencia sería darle un vistazo a Unity 3D . No solo está experimentando una seria aceptación en la adopción de las tiendas comerciales de desarrollo de juegos, y tiene algunas opciones de plataforma interesantes (que incluyen PC, Android, iPhone y tiempos de ejecución web), sino que también tiene una versión gratuita que es muy fácil de usar y muchos tutoriales para mostrarle cómo pasar del concepto a la implementación. Lo mejor de todo (IMO), uno de los lenguajes de script admitidos es C #.


2

Hice un juego para una clase hace dos años (yo también tenía 18 años en ese momento) y lo hicimos en C #. Si bien observo que los programas grandes de C # generalmente funcionan más lentamente que los programas grandes de C ++, C # también requiere mucho menos trabajo por su parte. La gestión de la memoria se realiza automáticamente, y para el alcance de un primer juego, es lo suficientemente rápido. (Nuestro juego es un RTS multijugador 2D completo como Starcraft).

Buscaría C # ya que debería ser más fácil de administrar. Sin embargo, si quieres convertirte en un desarrollador de juegos profesional, recuerda que solo funciona en las plataformas de Microsoft. (Aún así, C # puede ser un buen trampolín para C ++, y si tuviera que volver a aprender los dos idiomas, primero trataría de aprender C #).


C # también se ejecuta en Mono (multiplataforma), sin embargo, algunas partes del marco (por ejemplo, WPF) no son compatibles.
Danny Varod

1
@Danny Varod, realmente no me gusta recomendar Mono para el desarrollo de juegos multiplataforma porque hasta ahora siempre han estado un poco retrasados ​​con respecto a Microsoft en términos de características, y no espero que cambie. Además, una ventaja importante de desarrollar con C # para plataformas Microsoft es XNA, y hasta que Mono también proporcione DirectX, no funcionará en plataformas que no sean MS.
zneak

1
Mono tendrá que proporcionar un contenedor OpenGL compatible, ya que, como usted dijo, DirectX es de Microsoft. Mi punto era solo que C # se puede portar parcialmente.
Danny Varod

2
Entre Unity, monogame (opensource XNA para mono) y OpenTK hay muchas buenas bibliotecas de juegos para mono.
stonemetal

1

Votaría C ++, principalmente porque puede ser multiplataforma (dependiendo de cómo escriba su código, por supuesto) y también porque creo que le brinda más conocimiento sobre la administración de memoria, porque necesita preocuparse por ello. Pero dado que no le importa Linux / Unix, si desea dejar la complejidad de la memoria por el momento, ¿por qué no enfocarse en C # en este momento y luego aprender C ++ también?


Gracias por responder su primera pregunta sobre Stack Exchange Programmers.
DesarrolladorDon

C ++ sigue siendo el lenguaje más portátil hasta el día de hoy. Especialmente las plataformas móviles, algunas tienen Java, otras tienen C #, pero la mayoría no tiene ambas. Pero todos tienen que tener C ++; las máquinas virtuales deben implementarse en algo que se compile en código de máquina nativo y ese algo siempre es C ++.
Jan Hudec
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.