Programação de jogos: C # ou C ++? [fechadas]

15

Decidi o que realmente quero é fazer programação de jogos. Portanto, a pergunta é: como um jovem de 18 anos que deseja aprender programação autodidata, qual é a linguagem de programação mais adequada entre C # e C ++? (Devo declarar que não me importo com o Unix porque acredito que o Windows ainda será o sistema operacional mais usado)

Eu sei o básico de C ++, mas nenhum sobre C #. Eu sei que o C ++ tem mais guias de tutoriais, dlls e coisas assim, enquanto o C # não, mas é muito mais fácil aprender e usar uma única pessoa para desenvolver um programa, mas eu li mesmo se o programa estiver ofuscado é fácil obter a fonte disso.

Bem, eu meio que quero me concentrar muito no básico primeiro, devo dizer que tenho uma preferência pelo C ++ apenas porque parece mais adequado para mim, mas devo considerar que trabalho sozinho. Portanto, mesmo que eu goste, pode não ser a melhor coisa a fazer.

Eu realmente não tenho certeza de qual escolher, eu li muitos tópicos em vários sites e parece que o C # está se tornando mais popular que o C ++. Mas sim, dito isso, eu também especifiquei que quero fazer programação de jogos. Então, eu preciso conhecer alguns pontos melhores do que apenas "C # é mais fácil por causa da manipulação de memória .net enquanto C ++ não é" porque eu não consegui encontrá-lo.

Mat Zj Zábský
fonte
16
Você também pode achar gamedev.stackexchange.com útil.
Adam Lear
1
C # é o que eu recomendo create.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little
2
Veja também aqui: gamedev.net
Patrick Hughes

Respostas:

21

Eu aprendo C ++ programando um jogo. Essa foi uma experiência muito agradável. É altamente recomendável que você faça o mesmo!

No entanto, agora que sou programador de C #, sei que teria sido muito mais produtivo se o C # estivesse disponível no momento.

C # é a escolha perfeita para aprender o desenvolvimento de jogos. Ele tem tudo o que você precisa para começar de frameworks a livros e a linguagem é incrível.

Eu já vi dezenas de livros escritos especificamente sobre C # Game Programming e a Microsoft está envidando muitos esforços para melhorar suas estruturas, incluindo DirectX e XNA .

ATUALIZAÇÃO : você também pode se interessar por isso . É um post recente de Miguel de Icaza .

ATUALIZAÇÃO 22/02/2013 A Microsoft está planejando interromper o suporte ao XNA .

user2567
fonte
1
Então, talvez eu deva começar a entender o SDL ou algo assim com C ++ e depois passar para C # no futuro .. parece que C ++ está sendo substituído por C #, exceto pela criação do mecanismo. Por que é tão difícil fazer uma escolha !
Chronix
2
Entenda que o C # é excelente para experimentar o desenvolvimento de jogos, não para portabilidade em alguma plataforma de jogos ou outras preocupações. O melhor cenário é quando você conhece desenvolvedores de jogos suficientes usando os dois e escolhe C ++ ou C #, dependendo da plataforma de destino.
Klaim
Fora isso, +1 obviamente. Pessoalmente, ainda prefiro C ++, mas isso ocorre apenas porque a maior parte do meu projeto requer acesso de baixo nível por alguns motivos específicos do projeto.
Klaim
12

A maioria das empresas de jogos usa C ++, talvez com scripts python ou outras linguagens em execução em segundo plano. Mais porque as ligações para OpenGL e DirectX são voltadas para C ++ (embora eu tenha certeza de que você pode fazer o mesmo material Direct3d em C #), mas sim para programação de jogos, C ++ é a linguagem PRINCIPAL.

No entanto, vou dar um aviso justo (e não deixe que isso o impeça), mas os gráficos 3D podem ficar extremamente complicados. O novo Direct3D tornou um pouco mais fácil do que costumava ser, mas ainda é um pouco de matemática (que pode ser bastante confusa) e apenas as próprias bibliotecas podem ser confusas.

Eu começaria com algo muito simples primeiro. para coisas 2D, o SDL (Simple Directmedia Layer) é muito mais fácil de usar (para algo como um jogo de cima para baixo) quando você entra no 3D. PESSOALMENTE, acho que o OpenGL é mais fácil de aprender (mas isso é tudo). O MS possui alguns tutoriais / amostras interessantes na documentação do DirectX SDK, portanto vale a pena dar uma olhada. Os tutoriais Nehe, embora um pouco desatualizados, ainda são bons.

mas, para responder à sua pergunta, eles geralmente são feitos em C ++.

user6791
fonte
1
SlimDX fornece um invólucro DirectX for .NET
Danny Varod
1
"para programação de jogos, C ++ é a linguagem PRINCIPAL." Eu discordo dessa afirmação. O mercado de jogos é muito mais amplo do que apenas os jogos de console AAA - esse é um segmento muito menor do que as pessoas tendem a perceber. Eu diria que muito mais jogos são escritos em linguagens como ActionScript do C ++
MattDavey
8

Primeiro, você deve definir algumas prioridades. Você quer fazer um jogo primeiro e depois aprender sobre os aspectos mais avançados da programação posteriormente, ou vice-versa. Ambas as abordagens têm seus prós e contras, mas são legítimas na minha opinião.

Se você quiser começar a fazer jogos, eu recomendaria aprender C #. Se você já conhece os conceitos básicos de C ++, não deve ter problemas em escolher C #. Tornar o C # sua ferramenta tem vantagens. É fácil aprender a linguagem (em comparação com o C ++) e é uma "linguagem gerenciada", o que significa que ele faz automaticamente o armazenamento de memória para você (algo que muitos iniciantes em C ++ e até mesmo não iniciantes têm problemas com ) Também fornece acesso ao XNA Framework da Microsoft, que faz ainda mais parte do encanamento tedioso para você. Isso permite que você se concentre em coisas como o ciclo e o design do jogo, sem ter que se preocupar (demais) em fazê-lo funcionar. É verdade que todo esse encanamento tem sua sobrecarga, o que significa que você provavelmente não estará criando jogos 3D de nível industrial, mas apenas entrando na programação de jogos, então duvido que você fará o próximo Halo em suas primeiras tentativas. :)

Aqui está um post mortem do cara que desenvolveu um jogo XNA de sucesso (Arma de Escolha). Ele detalha como o uso de C # / XNA economizou seu tempo de desenvolvimento, em vez de precisar usar C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Dito isto, você deve investir algum tempo em pelo menos saber como as coisas funcionam em segundo plano. Como um programador de C ++ faria isso. Aprender a criar um jogo em C ++ pode facilitar a participação de outra equipe de desenvolvimento de jogos (como a maioria deles trabalha em C ++), se o que você deseja é ganhar posição na indústria de jogos. Mas mesmo que você nunca use C ++, saber como funcionam os internos só pode torná-lo um programador melhor, independentemente da linguagem usada.

Sistema caiu
fonte
Eu concordo completamente. Os problemas de gerenciamento de memória que você enfrenta com c ++ são o maior problema. Não houve um jogo em que trabalhei que não tivesse problemas de memória e ouvi a mesma coisa dos veteranos de 20 anos que fizeram dezenas de jogos. Até RAII e ponteiros inteligentes não resolvem o problema, pois você obtém problemas com ponteiros apontando para dados antigos e problemas de propriedade. Aprender como encontrá-los e corrigi-los fará de você um programador muito melhor, mas pode ser que você fique perplexo por meses na primeira vez em que houver uma saturação de buffer e o jogo travar em uma parte não relacionada.
Dominique McDonnell
Gostaria de acrescentar a esta pergunta que o C # também possui o XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) como vantagem. O XNA é muito mais fácil de pegar do que o DirectX não gerenciado.
Vitor Py
1
@DominicMcDonnell: Você pode ter problemas de memória mantendo referências a coisas ocultas em algum lugar nos tempos de execução gerenciados, como também o C # e, quando o problema ocorrer, você terá muito mais dificuldade em procurá-lo, porque não estará acostumado a pensar na vida útil dos recursos.
Jan Hudec 22/02
@ JanHudec, eu não sabia disso. Suponho que você poderia dizer que fazer as coisas funcionarem é mais simples e mais fácil, mas os entusiastas são muito mais difíceis de rastrear e, de certa forma, os hábitos que a linguagem permite criar atrapalham.
Dominique McDonnell
3

Eu promovo altamente C ++ para desenvolvimento de jogos. Existem alguns obstáculos extras, com vários prós e contras, uma das melhores razões é a portabilidade.

Com o C #, você pode desenvolver um pouco mais hoje em dia, e existem alguns ótimos mecanismos lá fora, programados com certeza. Ambas são boas linguagens para a programação de jogos, se você estiver direcionado apenas para plataformas Windows / Xbox, terá especialmente motivos para se inclinar para C #.

O idioma que mais acho que você deveria aprender seria o OpenCL ou CUDA, um idioma da GPGPU. Pessoalmente, eu prefiro o OpenCL, já que parece durar mais que o esperado e crescer ainda mais, é basicamente apenas o estilo C. Há o OpenTK, que é um bom invólucro para C ++ ou C #.

Eu sempre me perguntei como seria a programação de jogos Ruby com a aceleração de hardware ...

Garet Claborn
fonte
3

A programação de jogos brutos vai deixar você com muito frio. Trabalhar com chamadas gráficas de baixo nível em C # ou C ++ é um pesadelo menor e você realmente não deseja reconstruir a roda de renderização de sprites 2D e muito menos de modelos 3D. Como você está por conta própria e quer aprender a programar, sua melhor aposta é encontrar uma estrutura que possa lhe apresentar um pouco.

Como você tem alguma familiaridade com a linguagem C, minha sugestão seria dar uma olhada no Unity 3D . Ele não apenas experimenta uma adoção séria na adoção de lojas comerciais de desenvolvedores de jogos, como também possui algumas opções interessantes de plataforma (incluindo PC, android, iPhone e tempos de execução na web), mas também possui uma versão gratuita, muito fácil de usar e muitos tutoriais para mostrar como passar do conceito para a implementação. O melhor de tudo (IMO), uma das linguagens de script suportadas, é o C #.

Jacob Proffitt
fonte
2

Eu fiz um jogo para uma aula há dois anos (eu também tinha 18 anos na época) e fizemos em C #. Embora eu observe que programas C # grandes geralmente operam mais lentamente que programas C ++ grandes, C # também requer muito menos trabalho do seu lado. O gerenciamento de memória é feito automaticamente e, para o escopo de um primeiro jogo, é rápido o suficiente. (Nosso jogo é um RTS multijogador em 2D, semelhante ao Starcraft.)

Eu torceria por C #, pois deveria ser mais fácil de gerenciar. No entanto, se você deseja se tornar um desenvolvedor de jogos profissional, lembre-se de que ele funciona apenas nas plataformas Microsoft. (Ainda assim, o C # pode ser um bom trampolim para o C ++ e, se eu tivesse que reaprender os dois idiomas, tentaria aprender o C # primeiro.)

zneak
fonte
O C # também roda em Mono (plataforma cruzada), no entanto, partes da estrutura (por exemplo, WPF) não são suportadas.
precisa
1
@ Danny Varod, eu realmente não gosto de recomendar o Mono para o desenvolvimento de jogos entre plataformas, porque até agora eles sempre se atrasaram um pouco em relação à Microsoft em termos de recursos, e não espero que isso mude. Além disso, uma grande vantagem do desenvolvimento de C # para plataformas Microsoft é o XNA, e até que o Mono também forneça o DirectX, ele não funcionará em plataformas que não sejam MS.
zneak
1
A Mono precisará fornecer um wrapper OpenGL compatível, pois, como você declarou, o DirectX é da Microsoft. Meu argumento era apenas que o C # pode ser parcialmente portado.
precisa
2
Entre o Unity, o monogame (XNA de código aberto para mono) e o OpenTK, existem muitas boas bibliotecas de jogos para mono.
Stonemetal 11/09/12
1

Eu votaria em C ++ - principalmente porque ele pode ser multiplataforma (dependendo de como você escreve seu código, é claro) e também porque acho que fornece mais conhecimento sobre gerenciamento de memória - porque você precisa se preocupar com isso. Mas como você não se importa com linux / unix, se você deseja deixar de fora a complexidade da memória no momento, por que não focar em C # agora e aprender C ++ também?

Mauren
fonte
Obrigado por responder sua primeira pergunta sobre Stack Exchange Programmers.
DeveloperDon
C ++ ainda é a linguagem mais portátil até hoje. Especialmente plataformas móveis, algumas têm Java, outras, C #, mas a maioria não possui as duas. Mas todos precisam ter C ++; as máquinas virtuais precisam ser implementadas em algo que seja compilado no código de máquina nativo e que algo seja sempre C ++.
Jan Hudec 22/02