Skip to content

Posts from the ‘Carreira’ Category

26
mai

Quero fazer jogos! Segunda parte

Da última vez que passei aqui no blog iniciei nossa conversa sobre a carreira no mercado de desenvolvimento de jogos. Dei dicas para programadores que estão começando ou que decidiram mudar de foco ainda no início. Espero que alguns já tenham esboçado seus primeiros passos no C++ (ou no Java) e já tenham escrito um Hello World – ou pelo menos instalado o editor/compilador. Com o blog quero apresentar perspectivas e formas de planejamento no sentido de entrar no mercado de jogos. Quero que você reserve, se possível, algumas horas do dia para ficar na frente de uma tela branca cheia de palavras coloridas (e comece a explicar pra sua mãe que fazer jogos não é jogar o dia inteiro).

The Teleporters

The Teleporters - Desenvolvido usando Allegro

Se você acredita que já está em um nível mais alto na curva de aprendizado de programação, pode começar a estudar as bibliotecas de auxílio mais populares, como a Allegro. Só comece a estudar um “Game SDK” quando se sentir preparado para tal. Se você já é capaz de resolver problemas com facilidade (ou apontar caminhos para resolver os problemas que não se sentir capaz de solucionar), já estiver tranquilo com ponteiros, tiver desenvolvido alguns jogos simples (jogos de rpg baseados em texto, jogos de adivinhação como forca ou “Guess the Number”), estiver programando a um tempo, talvez esteja preparado. Você deve decidir.

Se ainda não se sentir preparado, cate uma versão do RPG Maker e comece a brincar. A maioria dos programadores de games já brincou no RPG Maker.

Uma vez que opte por iniciar essa etapa, estude a documentação da biblioteca e resolva os problemas iniciais que enfrentará trabalhando com jogos mais complexos: desenho e movimentação de sprites, detecção de colisões em duas dimensões, sons (dê uma olhada na OpenAl), desenho de mapas usando tiles, etc. Desenvolva um clone do Asteroids e em seguida, um clone do Tetris. Faça jogos completos, com tela de apresentação, menu inicial, tela de vitória e derrota, créditos, no caso do Asteroids, tente desenvolver o modo para dois jogadores, faça uma rotina para cadastro de rankings (vale a pena estudar um pouco de PHP e MySQL). Não esqueça de documentar (e comentar) tudo, pois será importante quando você for otimizar o código daqui alguns meses. Não fique preso ao tempo que acha que vai levar, só faça! Comece e termine os jogos! Esse é o ponto importante, aprender a finalizar as coisas. Um estágio em uma empresa de jogos ao final dessa etapa cai muito bem. Recomendo, como estudo paralelo, aprender Java e um pouco sobre desenvolvimento de jogos para celulares, pois esse é um mercado que cresce no Brasil.

Se você já programa a mais tempo, se já se sente capaz de lidar com os problemas básicos do mundo dos games, já tem experiência com bibliotecas de programação voltadas ao mundo dos jogos, você deve se preparar para resolver problemas mais complexos. Você pode fazer um editor de mapas, rotinas para carregar áudios e bitmaps, criar sistemas básicos de inteligência artificial, desenvolver simulações físicas. Deve, ainda, aprender – se já não souber – a trabalhar com sistemas de janelas do Windows (e dos outros sistemas operacionais se tiver interesse). Domine os conceitos da Microsoft Foundation Class (MFC), pois serão importantes se você optar pela plataforma da Microsoft (Windows).

Aprenda assembly! O assembly ainda é a forma mais otimizada de escrever algumas rotinas mais básicas e não dói. Na verdade, é mais uma forma de se destacar na indústria formal de desenvolvimento de jogos. Aprendendo assembly você dominará conceitos relevantes sobre a arquitetura dos processadores, como funciona o acesso à memória, o que é cache, o que é clock, qual a importância daquele tal de GHz, além de aprender um bocado sobre matemática vendo as coisas por um ângulo totalmente diferente. Você já parou para pensar como os computadores trabalham com números de ponto flutuante, números com vírgula, se seus sistemas só possuem zeros e um’s armazenados?

Sendo um programador mais experiente você pode se aventurar no mundo do Direct3D/OpenGL (recomendo o segundo e não confunda o DirectX com o Direct3D). Utilizando os conceitos aprendidos durante a utilização de bibliotecas de jogos (como a Allegro), você será capaz de escrever sua própria biblioteca pessoal. Nessa etapa seu código deverá ser limpo, inteligível e o mais otimizado possível. Você deverá ler a respeito das técnicas utilizadas na indústria e tentar implementá-las sempre que possível.

Se você não souber trabalhar bem em equipe, é um bom momento para desenvolver essa habilidade. Procure amigos ou conhecidos com interesses em comum e monte um grupo para estudar e desenvolver um projeto em conjunto. Aprenda a se comunicar melhor. Seu inglês deverá ser fluente. Comece a montar um portfólio. Nesse ponto é importante salientar que no seu portfólio não precisam constar projetos do tamanho do God of War, mas projetos com início, meio e fim, que mostrem que você tem preocupação e cuidado com seus trabalhos. Mais uma vez surge o item: termine o que começar! Não se preocupe com a arte, afinal você começará a procurar vagas para programador de jogos.

UML - Space Invaders

Diagrama UML de um clone do Space Invaders

Voltando ao desenvolvimento, você deve ter dominado os conceitos de orientação a objetos e buscar, sempre que possível, utilizar técnicas OO (orientação a objetos) no desenvolvimento dos seus projetos pessoais. Aprender sobre UML também é muito importante, tendo em vista que você estará trabalhando com Engenharia de Software. Ou você acha que as técnicas clássicas de desenvolvimento de software não são utilizadas no desenvolvimento de games, e que os jogos são produzidos magicamente a partir de um código mal escrito? Programação clara, comentários no código, documentação, diagramas de classes, também fazem parte da vida de um “Game Programmer”.

Quero salientar que não deixarei ninguém abandonado nesse caminho. Independente do nível em que você se encontra agora, não deixe de entrar em contato por email para tirar dúvidas. O máximo que vai acontecer é eu não saber e te puxar no MSN pra buscarmos a solução em parceria. Essa é a melhor forma de aprender (não o MSN, a parceria :-P ).

Então por hoje é só. Instalem o seu editor de C++ (recomendo dois: Visual Studio 2008 Express Edition ou o Dev C++, eu, particularmente, estarei usando o VS 2008 Express nos exemplos que apresentar e recomendo que façam o mesmo, ele é mais amigável) e aqueçam os motores – pode ser fazendo um Hello World em C++ se você ainda não o fez!!!

Dúvidas, sugestões e reclamações – raphaelbaldi@raphaelbaldi.com.

23
mai

Quero fazer jogos!

Unity 3D

Unity 3D - Game Engine

No último post falei sobre os anos 90. Cheguei a ser chato falando do Wolfenstein 3D e do Doom, mas isso faz parte. Você precisa conhecer os games mais importantes (pelo menos) de todos os tempos para entender as motivações das empresas e dos desenvolvedores para entender melhor o mercado de games. Você precisa entender como funciona a cabeça de participantes de equipes experientes, os problemas que elas enfrentam e a complexidade que é desenvolver jogos com a qualidade dos que apresentei até agora. Essa é a vida de um desenvolvedor de jogos! Bem vindo ao meu mundo <<risada maligna>>! A partir de agora, além de artigos na linha dos anteriores – falando um pouco mais da história dos jogos, olhando para os jogos de uma forma mais holística -, escreverei artigos mais específicos, focando na carreira como programador de jogos. Sempre que possível, no entanto, tentarei trazer comentários a respeito das outras áreas.

Então você quer ser um programador de jogos? Se você quer mesmo ser um programador de jogos já deve ter visto essa pergunta uma porção de vezes em uma quantidade razoável de sites/blogs. Ela não é feita à toa e, por isso, farei-a novamente: então você quer ser um programador de jogos? Você tem certeza disso? Espero que continue com essa certeza ao final deste artigo. Em um artigo que li na Game Career Guide (uma revista que recebo uma vez por ano como parte integrante da assinatura da Game Developer Magazine) vi um parágrafo genial sobre os programadores de jogos. Fazia uma comparação entre as principais áreas que englobam o desenvolvimento de um game. Dizia que artistas criam mundos e personagens fantásticos, “game designers” são capazes de definir como o jogo funcionará, mas sem a programação eles acabariam com um monte de artes bonitas e palavras. A programação tem a missão de fazer o jogo funcionar, de trazer as idéias de várias pessoas (incluindo suas próprias) à existência.

God of War Chains of Olympus

God of War Chains of Olympus

O desenvolvimento de jogos é, sem sombra de dúvida, uma das áreas mais complexas da computação, pois envolve uma série de conhecimentos específicos de diversas áreas: gráficos, animações, inteligência artificial, interface gráfica do usuário (GUI – Graphical User Interface), redes, simulações físicas, áudio, entradas de dados, bancos de dados, dentre outras. É, também, a área mais recompensadora: é muito mais legal falar para os seus amigos que você trabalhou no último God of War do que no desenvolvimento do último sistema de missão crítica da Dell. Mas tudo tem um preço.

Um programador nada mais é do que um solucionador de problemas, na maioria das vezes problemas tão complexos que a mente humana não é capaz de resolver sem o auxílio de máquinas digitais (não estou falando de câmeras fotográficas). O programador de jogos é, além disso, um otimizador: além de resolver problemas complexos, ele tem que ser capaz de escrever códigos que rodam extremamente rápido, que possam ser reutilizados e sejam flexíveis o bastante para que possam ser adaptados quando necessário e tudo isso com um prazo a cumprir. Você normalmente será solicitado a realizar tarefas em áreas totalmente desconhecidas para você e também a realizar os sonhos mais loucos de diretores de arte e designers. Você também poderá trabalhar construindo ferramentas para aumentar a agilidade da equipe de arte ou facilitar a prototipagem de jogos futuros.

“Tudo bem, Raphael, é isso que eu quero!”

Se você está com a frase acima em mente, prepare-se para enfrentar os desafios mais divertidos de sua vida!

Personagem 3D

Personagem desenvolvido por Alessandro Lima

A segunda pergunta que você deve se fazer (a primeira é “então você quer ser um programador de jogos?”) é: qual meu nível de conhecimento de computadores e programação? Não se sinta envergonhado e não minta para você mesmo. Diga a verdade, você passou os últimos meses “programando” em HTML e acha que já sabe o suficiente sobre linguagens de programação? Sabendo isso é possível determinar quais deverão ser seus próximos passos. Falarei, hoje, apenas do caminho principal a seguir, mas outras coisas deverão ser feitas paralelamente. Falarei sobre elas mais tarde.

Se você está começando a programar agora, fez uma ótima escolha optando pelos jogos: será muito mais divertido aprender. Você deverá estar preparado para se decepcionar quando as coisas não derem certo e, principalmente, a terminar as coisas que começar. Estava lendo o artigo do Guilherme Rambo e me deparei com uma pergunta que você deve estar se fazendo agora: “qual linguagem de programação eu devo escolher?”. A resposta para essa pergunta é fácil, você não precisa escolher: use o C++! Brincadeiras a parte, o C++ é a linguagem mais utilizada na indústria profissional, principalmente pela estabilidade e robustez que apresenta. Eu poderia indicar o Java também, pela orientação a objetos, mas prefiro indicar o C++ por causa dos ponteiros. Aprenda a utilizá-los sem medo (eles não mordem… muito…)! Ponteiros são muito importantes no trabalho com dispositivos de entrada e saída, principalmente com a placa de vídeo.

A primeira coisa que recomendo você a aprender no C++ é como fazer um comentário! Comente seu código sempre! É muito difícil para outras pessoas te ajudarem quando não entenderem o que você pretendia fazer (comentários em inglês são muito bem vindos e, aliás, aprender inglês é uma de suas “side missions” enquanto aprende a programar). Participe de fóruns, leia tudo sobre C++, aprenda a trabalhar com a documentação da linguagem (o inglês é novamente importante), aprenda a fazer comentários. O primeiro jogo que você deve tentar fazer é o famoso “Adivinhe o número”. O computador sorteia um número e pergunta para o usuário qual é esse número. A cada chute ele diz se o número informado é maior ou menor do que o número sorteado. Quando o jogador acerta o número, o computador exibe a mensagem “Parabéns!” e pergunta se deve sortear um novo número ou encerrar a execução. Você aprenderá muito sobre laços (while, do… while, for) e sobre entrada e saída de dados (mandem seus projetos por email se quiserem, para que eu diga como está funcionando sua linha de raciocínio).

Depois de fazer o “Adivinhe o número” tente implementar o “Forca”. Esse é um pouco mais complexo (não precisa desenhar nada). A cada ciclo, a tela é limpa, na parte superior é mostrada a palavra (com as letras que já foram adivinhadas e sublinhados nas letras que faltam), logo abaixo são aprensetadas as letras que já foram informadas e abaixo o número de partes restantes no corpo. A partir da lógica será fácil, posteriormente, inserir gráficos alucinantes, aliás, esse ponto é importante: a lógica é o que importa, o “core” (núcleo) do sistema, como as coisas funcionam. Inserir elementos gráficos, áudios, etc, é uma etapa simples quando o jogo funciona bem.

Outra dica: programe muito, leia livros de programação em C++ (recomendo o C++ Como Programar do Deitel), leia trechos de código e entenda como, por que e o que os programadores pretendiam fazer com seus programas. Depois de escrever seus programas, tente otimizá-los: isso te ajudará a aprender mais sobre a linguagem e a perceber os pontos críticos do código.