Programação de Jogos Eletrônicos

Propaganda
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
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.
1/7
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
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,
2/7
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
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
3/7
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
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 3D – Wiki em português
Ogre
EASTL
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.
4/7
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
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:
-
Sun Developer Network – Java
Trail: 2D Graphics
Killer Game Programming in Java
Apostila de Java Básico da Caelum (em português)
MarkyTechs - Tutorais de Android
Lightweight Java Game Library – LWJGL
Java Binding for OpenGL – JoGL
The Java 3D API
JMonkeyEngine
Xith3D
Jake
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,
5/7
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
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:
-
App hub
6/7
Programação de Jogos Eletrônicos
Escrito por Vinícius Godoy de Mendonça - Última atualização Dom, 12 de Junho de 2011 15:47
-
XNA Developer Center
DirectX
MSDN Library
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
7/7
Download