Posts tagged: j2me

30 dias na indústria de games

O blog está meio parado por que estou enrolado com o meu TCC da pós-graduação e também por uma grande mudança na minha vida: Há 30 dias atrás deixei de ser um Analista de Sistemas e consegui um emprego como Engenheiro de Software na Glu Mobile, uma empresa que faz jogos e porting de jogos para celulares e smartphones. Depois de 1 ano e meio desde que comecei a estudar desenvolvimento de jogos mais a sério, consegui entrar na indústria de games. Estou trabalhado no departamento de engenharia responsável por porting de jogos para a região da América do Norte.

Até chegar nisso foram muitos livros, aulas da pós-graduação e projetos – tudo relatado aqui neste blog. Agora começou uma nova etapa, onde eu estou aprendendo mais do que nunca sobre desenvolvimento de jogos (na prática) e como uma empresa desta área funciona, sem falar no contato com pessoas do mundo inteiro que possuem muitos interesses em comum. A empresa é incrível, com um ambiente bem característico com o que se espera de uma empresa de games.

Bom, mas você sabe o que é porting de jogos? Basicamente é pegar uma versão de um jogo, desenvolvida por outra equipe, e fazê-la funcionar em outros celulares, criando versões para cada tipo de configuração de celular. Porém isto não é tão fácil quanto parece, e nem tão simples quanto eu imaginava. Entre as tarefas relacionadas ao porting de um jogo estão: analisar e diminuir o consumo de memória e processamento, melhorar o desempenho do jogo, saber identificar problemas rapidamente, entender por que acontece uma coisa no emulador e outra no aparelho, entender código feito por outras pessoas, corrigir bugs (muitas vezes estranhos), entre muitas outras tarefas.

No geral, trabalhar com porting de jogos é bem desafiador. Existem diversas coisas que te obrigam a pensar e agir rápido, e você consegue desenvolver muitas habilidades de programação e engenharia. Após estes 30 dias tenho certeza que está é a indústria em que eu quero trabalhar. Porting não é fácil e eu tenho muito o que aprender, mas agora estou no caminho! Go go go!

Ah, sempre tem alguma vaga aberta na Glu, em diversas áreas como arte, programação e QA. Acesse o site para ver as vagas: http://www.glu.com/jobs

Existem diversas coisas que quero postar aqui, mas está difícil de arrumar tempo para escrever. Vou tentar postar com mais frequência, mesmo que seja algo mais curto e direto, principalmente por que tenho muitas coisas sobre o desenvolvimento do meu TCC para contar aqui.

SpaceShip 4042 – meu primeiro jogo para celular!

SpaceShip 4042Este é o primeiro jogo que fiz para celulares, e também foi o primeiro projeto que terminei tudo o que eu planejava fazer. Fiz este jogo para a matéria de Jogos para Celular na pós-graduação utilizando Java Mobile (JME com CLDC 1.1/MIDP 2.0) e o Netbeans 6.7.1.

Como eu conheço Java, não tive problemas com a programação. A principal dificuldade inicial era entender como um jogo funciona em um celular, entender suas limitações e arquitetura. Por ser bem limitado, deve-se ter muita paciência e cuidado na programação para celular, para que o código não exija muito processamento e também para que as imagens fiquem “leves”.

O Netbeans ajudou muito no desenvolvimento do jogo, pois ele possui um tipo de arquivo chamado GameDesign, onde você importa imagens e cria sprites, cenários e cenas. Eu utilizei apenas para criar sprites do jogo, não precisei utilizar cenários e cenas.

Este projeto levou cerca de 2 meses para ficar pronto, porém não foram 2 meses de trabalho diário, eu programava um pouco por semana. Tive ajuda do David Felicino com as imagens das naves, tela de abertura, fundo do jogo e itens, e minha da namorada que me ajudou testando o jogo. Obrigado aos dois!

Clique aqui para baixar este jogo!

O objetivo do jogo é simples: permanecer o maior tempo possível e pontuar destruindo os meteoros ou desviando deles. O jogo acaba quando os 3 pontos de vida da nave chegarem ao fim, devido a colisões com os meteoros. Os meteoros também têm 3 pontos de vida.

Existem dois itens: um para ganhar 1 ponto de vida e outro para transformar a nave em “nível 2″. Neste nível 2, o jogo dobra a velocidade e os meteoros são destruídos com apenas um tiro. Se for atingido pelo meteoro, neste modo, o jogador não perde vida, apenas o item e volta a ficar com a nave “nível 1″. A velocidade do jogo também dobra se acontecer uma determinada situação.

A maior pontuação do jogar é sempre armazenada e pode ser vista através do meu “High Score”. Existe também uma opção para ver os controles e os créditos. O menu foi legal de fazer, pois o JME não dá suporte para menus apenas com imagens, então criei o menu com sprites que são trocados ou selecionados através dos botões “para cima” e “para baixo” do celular.

Além dos controles tradicionais (direcionais e botão central do celular), existe um suporte a eventos de toque na tela (apenas o jogo, o menu ainda não). O video abaixo é uma demonstração no meu celular, um Samsung Star S5230:

O jogo também possui uma verificação para talvez funcionar em um maior número de celulares sem precisar ser portado. A verificação é a seguinte: se a resolução da largura (width) da tela do jogo for inferior a 240, são desabilitados o som e a imagem de fundo e a imagem de abertura e os meteoros são imagens com um tamanho menor.

Este vídeo demonstra o jogo no emulador do Netbeans, em uma tela de 240 x 320:

Este vídeo demonstra o jogo no emulador do Netbeans, em uma tela de 176 x 220:

No segundo vídeo é possível ver tudo que foi reduzido da versão normal (primeiro vídeo) . É claro que é ambição demais querer que este jogo realmente funcione em vários celulares diferentes, mas pelo menos tentei fazer com que isto seja possível de alguma forma.

Este jogo funcionou nos seguintes celulares: Samsung Star S5230, Motorola A1200, Motorola V9, Sony Ericsson W380 (reduzido) e Sony Ericsson K550i (reduzido). Não consegui instalar no Motorola V3, ocorre um erro após transferir por bluetooth.

Existem alguns bugs que estou corrigindo e muitas coisas para polir, mas o jogo já está em sua primeira versão jogável. O principal problema é que, as vezes, ao entrar no jogo pela primeira vez em celulares mais simples, aparece uma tela branca. Neste caso basta voltar para o menu e entrar novamente, porém isto não ocorre sempre. Estou trabalhando nesta e em outras coisas para deixar este jogo o mais perfeito possível.

Desenvolver este jogo foi muito interessante, pois aprendi bastante sobre a arquitetura de um celular, programação com JME, algumas técnicas para diminuir o consumo do processamento, aplicação de design patterns no Java, gravar e ler informações no celular, e, principalmente, alguns dos vários problemas que podem acontecer ao testar o jogo fora do simulador.

Espero que gostem do jogo, este é o primeiro de muitos que pretendo fazer! Comentários são bem-vindos, principalmente se forem sobre bugs! Até mais!

programador de games: por onde começar?

Já me questionei muito isso, pensando em como poderia começar uma carreira de desenvolvedor de games, mesmo que seja indie. Encontrei algumas respostas e muitas dúvidas, que foram exclarecidas pela minha professora de Produção de Games da pós-graduação. Depois de pensar sobre todas as informações que tinha, e levando em conta a indústria de games no Brasil, encontrei três perfis distintos de programadores de games iniciantes, e também indie:

Jogos para Web: Provavelmente é o tipo de desenvolvimento de games que pode alcançar um grande número de pessoas muito rápido, já que basta acessar um site com o jogo para jogar. O Flash, aliado ao Action Script, fornece ao desenvolvedor um poderosa ferramenta para criar jogos muito criativos e viciantes para o ambiente Web. Acho que o principal porém do Flash é que se o jogo for muito elaborado e pesado para ser jogado no navegador, provavelmente não será tão jogado quanto um minigame mais simples. Muitos programadores web, e web designers que tenham afinidade com programação, podem optar por este caminho para começar a estudar o desenvolvimento de games, devido a sua facilidade.

Jogos para Celular: Aqui começa a complicar um pouco, pois é uma técnologia mais complexas e requer mais empenho do programador, sem falar que um jogo feito para um determinado celular pode não funcionar adequadamente em outro – necessita ser portado. A principal linguagem utilizada para este desenvolvimento é o J2ME (Java 2 Mobile Edition), e pode ser usada com softwares como Eclipse e Netbeans, entre outros. Muitas empresas no Brasil trabalham com desenvolvimento de jogos para celular ou porting. São jogos de desenvolvimento rápido e que geram renda para a empresa, porém existem limites nestes jogos, pois o processamento da maioria dos celulares é fraco, o que pode comprometer jogos mais ambiciosos e favorecer, novamente, minigames mais simples. Existe também o desenvolvimento de jogos para iPhone e iPod, que utilizam um software gratuito da Apple, porém que só roda em Mac, que torna este tipo de desenvolvimento bem restrito.

Outros jogos: Uma pequena parte da indústria de games no Brasil está criando games que não são para Web ou para celular, são jogos para plataformas como Nintendo DS, PC e XBLA (Xbox Live Arcade). O desenvolvimento para estas plataformas são mais complexos e exigem mais dedicação, mas são experiências muito boas para conhecer muitas técnicas de programação de games avançadas, além de praticamente não ter limites para o que vocês quiser criar. Para PC, podemos criar games utilizando praticamente qualquer linguagem, mas as principais bibliotecas para o desenvolvimento de games são em C++ e Java. Para Nintendo DS, podemos criar Homebrew games com o devkitPro, que é um software para programar em C++ e gerar arquivos .nds para serem executados em emuladores de Nintendo DS, que torna o desenvolvimento muito legal pois você consegue ver como o seu jogo funciona em um DS emulado. Para a XBLA, podemos criar games utilizando o XNA Game Studio junto com Visual Studio C#, que é gratuito, você só precisa pagar se quiser ter uma conta premium para disponibilizar seus jogos na rede da Microsoft.

Eu, particularmente, estou optando por estudar o desenvolvimento de Homebrew para o Nintendo DS, pois quero estudar C++. Poderia até escolher o XNA, pois trabalho com C# a mais de 3 anos, ou desenvolver para celular já que tive Java nos 4 anos da faculdade, mas exatamente por isso escolhi começar estudar o desenvolvimento de jogos para DS, eu quero e preciso aprender melhor C++ e, por enquanto, estou apenas estudando C++ em jogos para PC na pós-graduação.

E com tudo isso, acabei esbarrando em uma dificuldade que deve ser a principal que irei enfrentar: não sou artista, sou programador! Ou seja, mesmo que eu faço algum jogo divertido, não vai ficar muito bonito, preciso encontrar algum artista que goste de pixel art para fazer jogos comigo, já que quero começar fazendo games 2D. Minha meta é montar um portifólio com demos de games diferentes em algumas plataformas, como as que citei acima.

No próximo post irei falar sobre o primeiro game em C++ com a biblioteca SDL que desenvolvi com meu grupo na pós-graduação e mostrar o game, até mais!

Panorama theme by Themocracy