Ponto V!

Home Mercado Carreira Programação de Jogos Eletrônicos
Vinícius Godoy de Mendonça
Programação de Jogos EletrônicosImprimir
Escrito por Vinícius Godoy de Mendonça

Uma das áreas que certamente conquistam a atenção de milhares de pessoas é a dos jogos eletrônicos. Algumas jogam casualmente: no intervalo do almoço, algumas horas durante a noite, ou num game-boy durante uma viagem. Outros podem ser considerados “profissionais”, adquirindo controles caros, e passando horas e horas em extenuante treino para manejar cada um dos 12 botões de seu controle. É natural que desenvolvedores de software, sejam eles jogadores casuais ou profissionais, queiram tentar desenvolver seus próprios jogos. Muitos o fazem por hobby, outros profissionalmente e, a grande maioria, por pura paixão.

É diferente programar um jogo?

Produzir um jogo de computador é diferente de produzir um software comercial tradicional. Primeiramente, o time precisa ter talento artístico – seja para produzir um bom enredo, música ou gráficos. Por conseqüência, os programadores desse time devem poder trabalhar facilmente com esses elementos: desenvolvendo gráficos mais avançados, filtros de áudio, ou dando vida a personagens com inteligência artificial ou simplesmente conseguindo conversar com aquele colega designer (e acredite, as vezes é realmente difícil!).

Talentos como refatoração do código, padrões de projeto, trabalhar em equipe e bons conhecimentos técnicos ainda são necessários. Entretanto, dependendo da área que atue o profissional outros requisitos também podem ser requeridos, tais como:

  • Matemática e física: Como calcular o campo de visão do personagem? E saber se a bola colidiu com uma parede? Ou mesmo qual é a trajetória de um míssil? Matemática e física são essenciais em jogos.
  • Inteligência artificial: Encontrar caminhos, tomar decisões, agir de acordo com a situação, aprender. A inteligência artificial tem grandes aplicações em jogos, ao tentar atribuir ao computador um comportamento humano.
  • Computação gráfica: Além da matemática e física envolvendo gráficos, é necessário também conhecer as APIs gráficas, os conceitos envolvendo cores, aplicação de texturas, organização da tela, iluminação, entre outras.
  • Redes e sistemas distribuídos: Mais e mais importantes com o aumento de jogos do tipo massive multiplayer online.
  • Otimização: Reduzir o espaço consumido na memória e aumentar a velocidade do jogo enquanto mais e mais funcionalidades são adicionadas é um desafio comum a todas as equipes de grandes jogos de mercado.

Do contrário do que possa parecer, jogos têm pouquíssimas threads. Muitos fazem pouco ou nenhum uso de tecnologias de bancos de dados.

Faculdade de informática é realmente necessário?

Absolutamente necessário? Não. Fortemente recomendável? Sim. Numa faculdade de ciência da computação todos os pontos acima serão abordados. Se você ainda não fez, preste especial atenção nos tópicos já citados. Também não fuja das disciplinas de algoritmos, C++, estruturas de dados, sistemas operacionais e projetos de sistemas (UML).

Uma faculdade de engenharia elétrica ou da computação também pode ajudar na parte da física e matemática, além de ensinar uma boa noção de lógica e da arquitetura de computadores. Se seu interesse principal é colocar corpos em movimento, fazer cálculos de respeito, ou mesmo otimizar software, pense com carinho nisso. E como bônus, você ainda aprende a fazer seu próprio joystick.

E as outras disciplinas? Embora muitas disciplinas não sejam ênfase no desenvolvimento de jogos, tais como compiladores, banco de dados ou mesmo administração de empresas, preste atenção nelas também. Muitas vezes a solução de diversos problemas está no bom entendimento nos conceitos de base. E quanto mais conhecimento você tiver, e mais variado ele for, mais fácil será encontrar um bom tema para um jogo.

Pós-graduações, mestrados e doutorados também são ótimas idéias. Várias faculdades possuem pós-graduações em computação gráfica, inteligência artificial e redes. A PUC/PR, em Curitiba, também possui uma pós-graduação específica em desenvolvimento de jogos para computadores.

Qual linguagem usar?

A primeira pergunta que todo programador de jogos se faz, é “que linguagem devo usar no desenvolvimento do meu game”? A resposta correta depende de diversos fatores:

Seu jogo é casual? Você irá disponibilizá-lo on-line? Qual linguagem você domina mais? O objetivo de seu jogo é puramente o entretenimento? Que tipo de jogador você tem?

Abaixo, analisaremos as principais linguagens usadas no desenvolvimento de jogos, ressaltando os pontos fortes e fracos de cada uma.

Linguagem C

O bom e velho C ainda encontra espaço no mundo dos desenvolvedores de jogos. Entretanto, esse espaço vem diminuindo, exceto pela adoção da linguagem por alguns entusiastas. Frameworks como a SDL usam a linguagem C.

O C é uma linguagem de programação difícil, mas com código fonte enxuto e desempenho excepcional. Não possui suporte a orientação à objetos e nem recursos de linguagens modernas, como garbage collection.

A menos que você vá fazer uma engine de física ou computação gráfica, que exijam extrema performance, vá desenvolver jogos em dispositivos extremamente limitados, ou tenha grande domínio da linguagem e não está nem um pouco disposto a aprender outra, não há porque adotar C nos dias atuais.

Entretanto, é interessantíssimo conhecer C, mesmo que você opte por desenvolver em C++. Primeiramente, existe uma grande quantidade de softwares escritos em C – ou mesmo em C++, mas usando sintaxe C – e um programa C++ terá necessidade de comunicar com eles. Um exemplo disso são as APIs de diversos sistemas operacionais, frameworks no mercado (tais como OpenGl, DirectX e SDL), ou mesmo código mais antigo que sua companhia (espero que uma companhia de desenvolvimento de jogos) possa ter adotado. Em segundo lugar, entender de C implica em estudar o funcionamento do hardware, um conhecimento que pode ser muito útil para evitar erros por descuido ou fazer otimizações realmente agressivas no código.

Links interessantes:

Linguagem C++

A linguagem C++ é certamente a mais usada linguagem no desenvolvimento dos grandes jogos comerciais atualmente. Ela suporta tudo o que o C suporta, tendo total interoperabilidade com ele. Além disso, suporta também os conceitos de orientação à objetos e templates, além de reforçar conceitos do C como o de constness e de referências.

O grande apelo do C++ é a programação em múltiplos paradigmas. Isto é, você é capaz de programar código estruturado em alguns trechos, OO sem templates em outro e programação orientada a templates em ainda outro ponto. O C++ também gera código leve, rápido e com possibilidades de otimização extremamente agressivas. Aliadas ao C++, existem ótimas bibliotecas como a SDL e a Boost, que reduzem drasticamente grandes dores de cabeça como dangling pointers e memory leaks, além de prover classes úteis como string e listas.

Ótimas APIs já foram desenvolvidas usando os conceitos de C++, entre elas a Ogre e a brasileiríssima Cadabra3D. Entre as engines 2D, não pode ficar de fora também a Popcap Game Engine, engine da empresa criadora do Bejeweled.

Links interessantes:

Java

A tecnologia Java tem encontrado grandes campos, sobretudo entre os jogos casuais. Os principais apelos da linguagem são sua extensa API, incluindo a ótima Java2D, o garbage collection (eliminando de uma vez por toda problemas com dangling pointers e reduzindo memory leaks), sintaxe simplificada em relação ao C++ e uma forte adoção do paradigma orientado à objetos. Além disso, a comunidade Java é bastante adepta do código livre, existindo uma quantidade gigantesca de frameworks gratuitos, para as mais diversas tarefas. É também comum encontrar excelentes IDEs, tais como Netbeans e Eclipse. O Java também tem se tornado popular pois está presente em diversas faculdades, tendo assim uma comunidade crescente de desenvolvedores, sobretudo pelo aumento das oportunidades de empresa de desenvolvimento web.

Applets: A programação em applets se tornou muito popular na programação de jogos casuais, por ser facilmente integrável em páginas web. Entre as dificuldades encontradas pelos desenvolvedores da tecnologia, está o fato de muitos usuários não possuirem o JRE atualizado, contando apenas com a virtual machine da Microsoft. Não é à toa que vários desenvolvedores optam por utilizar versões mais antigas do java, como a 1.1 ou a 1.3, compatíveis com a VM do Windows.

Binários java (.jar) e JNPL: O J2SE tem tentado entrar no mercado dos grandes jogos, embora ainda não tenha obtido sucesso. Algumas de suas engines já estão bastante maduras, como a JMonkeyEngine, LWJGL, JOGL, com performances comparáveis as do C++, como constatado pelos desenvolvedores da engine Jake. É possível também encontrar desenvolvedores optando por distribuir seus softwares em JNLP. Do contrário do que muita gente acredita, o Java já tem a capacidade de entrar em full screen, inclusive trocando a resolução de tela do usuário se necessário. A principal barreira da linguagem ao mercado comercial de jogos, entretanto, está no fato dela não ter penetração entre os fabricantes de video-games e pelo fato de muitos ainda acreditarem, sem razão, que a linguagem é lenta.

J2ME e Android: O maior sucesso do Java no mercado de jogos certamente está nas tecnologias móveis, J2ME e Android, que são usadas principalmente para o desenvolvimento de jogos para celulares, tablets e dispositivos portáteis em geral. Embora ainda existam muitos jogos antigos em J2ME, a tecnologia está migrando para a plataforma Android da google, que entrou com força no mercado de dispositivos móveis.

Links interessantes:

ActionScript e Flash

A tecnologia flash e o ActionScript são hoje o maior concorrente dos Java Applets. O Flash combina a facilidade de um editor de gráficos vetoriais, com uma linguagem de script simples (ActionScript), tornando-se ótimo candidato para jogos populares. Diferentemente do Java, poucos usuários não conseguem rodar uma aplicação em flash corretamente. Além disso, programadores pouco estudados na área – tais como publicitários, designers ou jovens na faixa dos 16 anos – são capazes de gerar excelentes resultados. Devido a isso, a linguagem tem se tornado muito popular entre os Advertisement Games (ADV Games), ou seja, jogos que tem como objetivo fazer propaganda de um produto, além de entreter.

Entretanto a tecnologia flash apresenta baixa performance, sendo inedequada para grandes jogos de mercado. E esse fato não tende a mudar, pois a Adobe não dá sinais de almejar esse mercado.

Links interessantes:

C# e XNA

A Microsoft lançou a plataforma XNA, que combina o C# (e consequentemente todo o framework .Net) com várias ferramentas para o desenvolvimento de jogos. Uma grande alegria para os desenvolvedores é que toda a tecnologia é gratuita. A única exceção está para aqueles que quiserem desenvolver jogos para XBox, que devem pagar uma licença de U$99,00 anuais.

O principal apelo da plataforma é que, além de possuir praticamente todas as vantagens do Java, está presente do XBox e, portanto, está presente entre a grande comunidade de gamers. A Microsoft também disponibiliza extensa documentação no site MSDN, que pode ser acessada gratuitamente.

Para o mercado de PCs, a tecnologia Microsoft é mais focada no Windows. Isso não é um grande problema, pois é o sistema operacional mais usado entre os jogadores. Além disso, vale ressaltar que a Microsoft também é a desenvolvedora do Direct3D, principal concorrente da OpenGL, e portanto, é de se esperar que a integração do XNA e dessa tecnologia seja total.

Links interessantes:

Ferramentas de autoria: Game authoring tools

Ferramentas para a criação de jogos tais como o Game Maker, o Neverwinter Nights – Aurora Toolset e o Oblivion – TES construction set são uma ótima opção para aquele desenvolvedor que quer fazer jogos rapidamente por hobby ou para divertir os amigos.

As ferramentas também são ótimas para desenvolver suas habilidades como game designer ou mesmo algumas técnicas de inteligência artificial e, por isso, não poderiam deixar de ser citadas aqui.

Existem ainda ferramentas de autoria para jogos realmente profissionais, mas dificilmente são gratuitas. São o caso de ferramentas como as da ID software ou o 3D Game Studio. Além de permitirem um desenvolvimento rápido por possuirem ferramentas visuais, editores de mundos e modelos, as ferramentas ainda promovem meios para comunicação entre programadores e game designers: por exemplo, é possível para o programador definir algumas propriedades de sua classe que poderão ser alteradas através de telas gráficas na ferramenta de autoria.

Além disso, as ferramentas são constantemente atualizadas para as mais novas tecnologias do mercado. Por exemplo, a empresa responsável por uma ferramenta que suporte o OpenGL, certamente irá fazer modificações a cada nova versão do OpenGL. Assim, o desenvolvedor que usa a ferramenta, terá seu jogo automaticamente alinhado com a tecnologia.

Algumas ferramentas também são extremamente portáveis, gerando executáveis diferentes para Windows, Linux e várias plataformas de video-games.

Entretanto, há também desvantagens em se optar por uma ferramenta de autoria. Primeiramente as desvantagens de se depender de códigos de terceiros: não se pode priorizar quais bugs serão corrigidos e nem quando. Além disso, há sempre o risco de descontinuidade da ferramenta, ou mesmo de mudanças radicais em sua arquitetura. As ferramenta, também possuem suas limitações, e obrigam os desenvolvedores a conviver com elas.

Links interessantes:


Comentários (24)
  • Volnei  - Parabéns...
    avatar

    Olá Vinicius, parabéns pela série de artigos, realmente muito bom material.

    Apenas um ponto que acho que deveria ser abordado com mais enfase é o desenho, extamos cheios de jogos com o quadradinho que tem que pular a bolinha ou a bolinha que tem que entrar entre os risquinhos e tal. Considero a arte do jogo um fator primordial para a produção de grandes jogos.

  • Vinícius Godoy de Mendonça
    avatar

    Sem dúvida. E costuma a ser bem difícil encontrar um artista. Nós mesmos aqui estamos procurando.

    Vale ressaltar que hoje, há mais artistas trabalhando numa equipe de gamedev do que programadores.

    Basta olhar os créditos no final de qualquer triplo A para constatar isso.

  • Neto  - Sem razão ?
    avatar

    Quando você fala " e pelo fato de muitos ainda acreditarem, sem razão, que a linguagem é lenta.", acha que é sem razão isso ? Então porque toda vez que abro um programa em Java sei que foi feito em java ? Porque ele trava antes de abrir e quando não trava demora pra abrir. Isso é sem razão ? Na minha opinião Java é lento em alguns ASPECTOS e o usuário odeia esperar, então combinando tudo isso, da pra ter uma ideia do porque que ele não foi aceito. Me corrija se tiver me equivocado.

  • Vinícius Godoy de Mendonça  - Sem razão
    avatar

    Eu trabalhei por vários anos com sistemas de tempo real, e havia uma crença de que seria impossível fazê-los em Java. Pois bem, essa crença caiu por terra, quando começamos a apresentar sistemas tão eficientes quanto os feitos em C++.

    No Java, o Swing possui uma arquitetura pesada, pois renderiza manualmente todos os componentes, suporta vários look&feels e dimensiona componentes com layout managers. Você percebe na hora que uma aplicação é java, justamente porque vê o Swing.

    Não é culpa da linguagem, e sim da biblioteca. O Swing seria pesado, mesmo que fosse implementado em C. Entretanto, há aplicações java excelentes e bastante rápidas, como o Vuze, aquele cliente do torrent.


    No caso dos jogos, o Swing afeta pouco o desempenho, pois simplesmente é usado para criar uma área de pintura. Toda renderização sobre ele é feita usando o Java2D, e por, isso não recomendei aqui para criar Sprites usando JLabels (coisa que muitos que estão ingressando na linguagem fazem).

  • Bruno Crivelari Sanches
    avatar

    Acho que podemos dizer a mesma coisa de um aplicativo feito com gtk, é C, mas é lento e esquisito e na hora você percebe que é gtk!

  • Anônimo  - re:
    avatar
    Bruno Crivelari Sanches Escreveu:
    Acho que podemos dizer a mesma coisa de um aplicativo feito com gtk, é C, mas é lento e esquisito e na hora você percebe que é gtk!

    É ? Quanto a saber que é feito em GTK só se for pela aparência porque não noto perda de desempenho.

  • Bruno Crivelari Sanches
    avatar

    Todas as aplicações gtk que usei achei pesadas e lentas na resposta. Mas na real, como eu nunca vi uma app gtk e uma versão idêntica não gtk não tem como dizer que um é mais lento que o outro.

    Da mesma forma eu nunca vi um app java e uma versão não java idêntica que desse para comparar e dizer quem é mais lento.

    Com as vms mais novas eu não tenho duvidado muito da capacidade do java, mas é uma comparação muito difícil de se realizar.

    A unica coisa que não aceito é o fato de aplicativos usarem a UI nativa do Java ou do gtk, acho que um aplicativo tem que usar a UI nativa do sistema na qual ele esta executando, fora isso não tem porque o usuário saber em que linguagem foi feito algo e nem é do interesse dele saber isso.

    T+

  • Jason Manchest  - Ótimo texto
    avatar

    O texto foi ótimo, entretanto vale resaltar o Blender também, já que o mesmo possui uma game enginer de alto desenpenho, além que o projeto Yo Frankey que deveria ser feito em Crystal Space acabou sendo feito na própria game enginer do Blender por motivos de atrasos de prazos e desempenho.

    Neste caso quem optar pela Blender Game Enginer poderá fazer um jogo altamente portável, já que o binário poderá ser gerado para todas as plataformas que tiverem acesso ao blender, só necessitando ao blender da plataforma correspondente gerar o binário independente.

    A linguagem que é usada na Blender Game Enginer é Python, muito fácil de trabalhar, além dos recursos que atualmente foram adicionados na enginer, se a pessoa nem souber nada de programação ainda poderá optar pelos blocos de lógica que tornam o processo ainda mais fácil e rápido.

    Outro detalhe é que a ferramenta em si é open source o que minimiza o erro de ser descontinuado, além de permitir que possa ter os erros corigidos e analizados pela equipe de desenvolvimento.

  • Daniel Blassl  - re: Ideias
    avatar

    Ola ! Vinicios tenho uma lan house e vejo as crianças jogando alguns jogos! E me veio a ideia de criar um game! So que tenho muitas ideas muito louca para game e navegando na net encontrei o programa panda 3D mais so que tem que saber a ligagem c++ pois nao sei essa linguagem mais tenho muitas ideas e acho que venderia muito! Talves com sua expeirencia em games e minha ideia um rpimeiro contato seria legal moro em goiania-GO. Vlws

  • Belle  - Não é preciso de faculdade mesmo!
    avatar

    É... Antes de fazer um jogo eu achava bem complicado. Mas, acreditem ou não, eu, uma aluna do ensino fundamental, sétimo ano fiz um jogo. E não é que ficou legal? Isso prova com certeza que não é necessário faculdade. Claro, lógico e evidente que não compara-se a minha experiência com a de um universitário, claro. Mas que é impossível não é! Criatividade e força de vontade, é isso!

  • Vinícius Godoy de Mendonça
    avatar

    Parabéns. Que tipo de jogo você fez e que ferramentas usou?

  • Diego Hutter
    avatar

    Eu acho que os jogos por mais que bem elaborados ficará na mão do programador o desempenho, independentemente da linguagem usada. Tanto C++ quanto Java sempre teram seus altos e baixos. Eu preferiria aprender C++ por mais complexo que seja seu código, enquanto Java seja mais lenta tem seu código menos complexo que o C++.

  • Vinícius Godoy de Mendonça
    avatar

    Na verdade, a diferença de performance na linguagem, para o desenvolvedor Indie, é desprezível. Isso porque boa parte dos gargalos não estão na CPU e sim na GPU.

    De nada adianta ter uma linguagem ultra-rápida sem se livrar desses gargalos. Isso só faria o processador ficar esperando mais tempo a placa de vídeo renderizar o cenário.

  • Felipe Martins  - Muito Bom.
    avatar

    Caro Vinicius muito bom o Post.
    Eu tenho em mente fazer Faculdade de Programação de jogos ainda tenho muitas duvidas sobre qual devo fazer antes. Mas tenho uma pergunta.
    Você jogava jogos quando criança? Por isso resolveu seguir essa carreira?

  • Vinícius Godoy de Mendonça
    avatar

    Jogava muito como criança. Acho que joguei a vida toda. Curiosamente, e indo um pouco na contramão da maioria das pessoas da aula, não foi isso que me fez seguir a área de jogos. Eu trabalhei muitos anos na indústria e no comércio antes de decidir mudar de área.

    Mudei porque, além do gosto dos jogos, percebi que jogos são aplicações fascinantes. Poucas aplicações unem inteligencia artificial, computação gráfica, redes e sistemas de tempo real num só software. Poucas aplicações fazem tanto uso de matemática e unem o técnico ao artístico.

    É por isso que me apaixonei não só por jogar, mas também por desenvolver jogos.

  • Caio Schiavolin  - Otimo
    avatar

    Vinicius otima materia, ainda estou no 2º ano do Ensino Medio e os jogos são minha paixao. Gosto de tudo relacionado a tecnologia e informatica, voce teria umas dicas em relaçãoi que caminho devo seguir ? Cursos faculdade, essas coisas ? Vlw ai

  • Vinícius Godoy de Mendonça
    avatar

    Leia nosso próximo artigo da sessão carreira:
    http://www.pontov.com.br/site/index.php/mercado/57-carreira/143-entao- voce-quer-fazer-jogos

    E veja certinho o que vc mais gosta a respeito de jogos:
    (a) Fica encantado, pensando nos novos caminho que você pode criar no cenário quebrando os blocos.

    (b) Fica encantado, pensando na adequação da animação do bloco sendo quebrado e no efeito sonoro utilizado.

    (c) Fica encantado, imaginando como aquela maquininha consegue dizer que ali tinha um bloco, mas que ele quebrou-se e agora o personagem pode passar por ali.

  • Ytrio salmito  - Programação de jogoso
    avatar

    Bem legal o artigo, fala muito bem sobre as principais tecnologias usadas para fazer um jogo profissional ou casual , e também tem ótimos links. parabéns Vinicios Godoy pelo ótimo Artigo :cheer:

  • Kauê Lopes de Moraes
    avatar

    Muitíssimo Legal o seu Artigo!
    Estou no Segundo ano do ensino médio e estou cursando o técnico de Programação de Jogos Digitais (Sou da primeira turma desse curso do centro Paula Souza/ETEC)
    Nosso curso tem como linguagens principais: Java, ActionScript e C#/XNA.

    Por ser um curso novo não há muitas pessoas que conhecem... ainda! :cheer:

  • Joao Dutra Cristoforu  - Artigo
    avatar

    Olá Vinicius, sou estudante do 2º ano de Ciência da computação e estou fazendo um Trabalho academico sobre Desenvolvimento de jogos eletrônicos, vou cita-lo em minha referencia mas preciso da data da publicação. Poderia me fornece-lo?

    Obrigado.

  • Vinícius Godoy
    avatar

    Oi. O texto é de 19/09/09.

  • Johnatan  - Muito massa!
    avatar

    Cara, muito esclarecedor seu artigo. Tentando saber sobre a linguagem LUA e outras para jogos, esbarrei aqui, resultado, saber somente uma linguagem não é suficiente e desenvolver jogo de qualidade não é trabalho de uma pessoa. Desmistificou muita coisa pra mim.

  • Hal Jordan  - Otimo artigo!!!
    avatar

    Eai Vinicius, sabe, eu tenho 12 anos e quero muito seguir essa carreira :cheer:
    um amigo meu me falou para começar pelo Game Maker, mais surfando pela net eu acabei conhecendo o Unity, que alem de fazer jogos 2D, faz 3D também... qual desses dois você me aconselha?

  • Eurileno Vasconcelos  - A linguagem Python
    avatar

    Foi falado de muitas linguagens de programação, mas não vi ninguém comentar da Python. Para desenvolver simuladores , essa linguagem funciona ou é a ideal?

Escrever um comentário
Your Contact Details:
Gravatar enabled
Comentário:
[b] [i] [u] [url] [quote] [code] [img]   
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch::(:shock:
:X:side::):P:unsure::woohoo::huh::whistle:;):S:!::?::idea::arrow:
Security
Por favor coloque o código anti-spam que você lê na imagem.
LAST_UPDATED2  

Busca

Linguagens

Twitter