Programação de Jogos – Introdução (cont.)

12 08 2007

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:
Simple Directmedia Layer
OpenGL – The Industry’s Foundation for High Performance Graphics
GLUT – The OpenGL Utility Toolkit
OpenAL
The programming language lua

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:
Complete C++ language tutorial
C++ FAQ Lite
Cadabra 3DWiki em português
Ogre

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: O maior sucesso do Java no mercado de jogos certamente está na tecnologia J2ME, que é usada principalmente para o desenvolvimento de jogos para celulares, palmtops e dispositivos móveis em geral. Leve, fácil de programar e com ótima portabilidade, é uma ótima opção quando o assunto é mobilidade.

Links interessantes:
Apostila de Java Básico da Caelum (em português)
Sun Developer Network – Java
Programmer’s Guide to the Java2D Api
The Java 3D API
JMonkeyEngine
Xith3D
Jake
Lightweight Java Game Library – LWJGL
Java Binding for OpenGL – JoGL
Killer Game Programming in Java

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:
Adobe flash developer center
Swish Zone

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:
XNA Developer Center
XBox Developer Programs
DirectX
MSDN Library
XNA Creators Community

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:
3D Game Studio
Game Maker
Game Maker Community
Neverwinter Nights for Builders
Oblivion TES Construction Set

E que linguagem eu vou encontrar daqui em diante?

Os códigos estarão presentes na linguagem C++, com os códigos fontes escritos em inglês. Uma boa dose de pseudocódigos em português será utilizada. Inglês é fundamental para qualquer desenvolvedor de software, então, procure habituar-se a ele. Até por isso, muitos termos e siglas não serão traduzidos, tais como nomes de design patterns ou técnicas conhecidas.

Leia também

A realidade é sua amiga, caia nela, da Cindy Dalfovo
Iniciando em desenvolvimento de jogos, do Rodrigo Flausino


Ações

Informações

6 respostas

11 02 2008
Cindy "miwi"

Interessante :) Mas, pessoalmente, não consigo simpatizar com Java para jogos. Afinal, para mim Java e C# são paralelos, e com C# eu tenho o XNA e uma comunidade muito mais ampla do que a comunidade de games de Java. Exceto para jogos para celular, claro.

Eu costumava odiar jogos para celular, mas jogar Assassin’s Creed no celular de um colega me fez mudar de opinião :p

11 02 2008
vinigodoy

Não só jogos para celular, mas aplicações web também. A maioria ainda usa Java 1.1, que é compatível com a MS VM.

12 10 2008
Guilherme Mazetto

Acredito que o flash seja mais voltado a área de design mesmo, a criação de jogos e interações são acréscimos a tudo que a ferramenta faz

13 10 2008
vinigodoy

Sem dúvida. E é esse fato que o torna tão interessante para os jogos casuais. Seu designer não terá problemas para trabalhar com ele, ao mesmo tempo que o ActionScript permite que você crie lógica de maneira muito fácil.

É certamente muito menos estressante do que tentar fazer o mesmo jogo em Java. Além do que, poucos usuários tem problemas com a “VM” do flash, um problema que frustra muitos desenvolvedores Java.

27 10 2008
Nataniel

Olá , eu estou com um grande dilema… não sei se já foi respondido anteriormente, ou se estou na sessão errada, mas eu vou fazer vestibular este ano e eu queria muito trabalhar na area de jogos (mais voltados para video games…criando personagens, desenvolvendo cenarios essas coisas….como você disse antes trabalhar com um “time” criando um jogo) , me falaram que eu teria que fazer ciências da computação , mas estou meio na duvida… você saberia me dizer qual é a faculdade certa para eu fazer ? Desde já grato.

27 10 2008
vinigodoy

Depende.

Se você quer criar a personalidade desse personagem, criar a narrativa do jogo, verificar se as pessoas estão realmente se divertindo, enfim, é mais ligado no enredo, pense em faculdades como publicidade ou cinema. Então, sua posição no time será de Game designer. Para se informar melhor, consulte a ótima lista de livros da área do Arthur..

Se você quer fazer o desenho do personagem, usar o seu lado artístico, então pense em “desenho industrial: programação visual” ou mesmo “artes”. Nesse caso, você pode ser Modelador 3D e usar ferramentas como Blender e 3D Studio, ou pode ser Concept Artist, e fazer os desenhos a mão livre mesmo. Os primeiros estão entre o maior número de contratados na indústria de jogos hoje.

Se você quer programar a física do personagem, garantir que ele se mova suavemente pela tela, ou colocar nele aqueles efeitos irados e inovadores, então você nasceu mesmo para ciência da computação. Neste caso, seu cargo no time será o de programador. Esta é uma ciência exata e você terá que explorar os eu conhecimento matemático e lógico.

Em todos os casos, não vale a pena pensar somente na carreira de jogos aqui no Brasil. Pense em algo que você realmente gosta de fazer, e coloque a meta de jogos como algo futuro e como um bônus. Ou então, pense em se projetar numa carreira no exterior e estude inglês também.

Deixe um comentário