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