25 Anos de Tetris. E uma dica para programadores iniciantes.

Se você está começando na programação de jogos hoje, que tal começar com um jogo lançado exatamente 25 anos atrás? Em 6 de Junho de 1984 foi lançado Tetris, conhece?
Para iniciantes, recomendo treinar desenvolvendo clones dos seguintes jogos: Tetris, Breakout (Arkanoid), Pac-Man e Super Mario, nessa ordem! Quer saber porque essa lista específica? Continue lendo…
Bem, conheci esta lista da seguinte maneira: pesquisando bibliotecas para jogos em Java, cheguei na Slick2D e fui ver seus tutoriais. Um deles foi criado por Tiago Costa (“spiegel”), proprietário da Foxhole Studios, de Portugal. A Foxhole é minúscula – na verdade acho que só tem ele… Mas no tutorial do Slick2D ele iniciava mostrado como criar um clone de Tetris e justificava sua escolha baseando-se em um artigo de Geoff Howland, dono da Lupine Games (criou o jogo “Emergency Rescue: Firefighters”).
A Lupine se destacou em uma certa época, mas depois sumiu. Não fez muitos jogos e não concluiu alguns projetos. Mas Geoff foi editor do GameDictionary.com e CEO do GameDev.Net, sendo referência no assunto. É um cara que fez seu primeiro jogo com 12 anos…
No artigo citado por Tiago Costa, Geoff explica porque o programador iniciante deve começar pelo clone de Tetris e depois fazer os outros que citei no início. Vejamos detalhes.
Começe pelo Tetris
É normal você iniciar no desenvolvimento de jogos sozinho (ou com um ou dois colegas) e pensar em criar, de cara, o próximo God of War. Assim de início não vai dar, vai por mim. Vai ser frustrante. Mesmo quando ouvimos dizer que o primeiro game de alguém já foi um sucesso, isso não significa que foi o primeiro de fato – a pessoa certamente fez o dever de casa e começou criando clones de jogos existentes, entendendo a máquina dos jogos e evoluindo aos poucos. Pense grande, mas começe pequeno.
E começar por onde? Tetris, diz Geoff. Veja porquê:
- Contém todos elementos de um jogo. Desde o menu até o chamado game loop – o coração do jogo.
- Exige implementação de ação em tempo real – mesmo sem intervenção do jogador a ação não pára.
- Não depende de arte especializada. Mesmo não sendo (ou não conhecendo) um artista, você consegue fazer uma versão tão boa como as comerciais.
- É divertido de jogar e seus amigos não vão se aborrecer em ser seus beta-testers.
Em seguida, Breakout
Aqui no Brasil acho que é mais conhecido o Arkanoid, que é um clone. O original (Breakout) foi criado em 1976 pelo próprio Nolan Bushnell, fundador da Atari. É aquele jogo onde você fica rebatendo uma bolinha e com ela vai quebrando tijolos no alto da tela.
Na verdade, a bolinha é um raio de luz que é rebatido por uma nave que precisa ultrapassar a barreira…
Esse é o próximo passo, depois do Tetris, porque:
- Adiciona colision detection (detecção de colisão) em um nível mais avançado. E isso você vai usar no resto da sua carreira de jogos.
- Adiciona regras simples de física para controlar a reflexão da bolinha dependendo do ângulo e da velocidade da nave. Ela também reflete ao bater no tijogos.
- Adiciona a mudança de fase – no Tetris temos praticamente uma fase só, que vai ficando mais rápida. Aqui temos fases separadas mesmo. Como isso muda o game loop?
- Adiciona level design (projeto de fases). Se jogador passa de fase, então ele deve ver algo diferente na próxima – o layout de blocos deve mudar. Para guardar esses layouts (podemos chamar de mapa de cada fase), será interessante criar alguma forma de armazenamento dados em disco.
Ainda é um jogo simples, mas veja que ele adiciona elementos importantes que você, enquanto programador de jogos, deve saber.
Próximo passo: Pac-Man
Esse é outro velho conhecido de todos. Não preciso falar muito dele, só preciso dizer que ele é o próximo passo porque:
- Adiciona, sobretudo, Inteligência Artifical. Nos jogos anteriores o jogador está sozinho. No Pac-Man, existem os fantasmas…
- Adiciona complexidade nos mapas das fases (que agora são labirintos) e no controle do jogador, que agora pode mover-se livremente em todas direções.
- Adiciona sprite animation (animação de sprite), que pode ser evitada nos jogos anteriores. Nesse não tem jeito: Pac-Man tem que mexer a boca, senão não é Pac-man. Os fantasmas também são animados.
- Já que utiliza animação, podemos utilizar sons também. Porque não?
A inteligência artificial é um passo grande. E não estou falando em apenas fazer os fantasmas ficarem andando aleatoriamente no labirinto. Tente reproduzir o funcionamento orginal do jogo, que tem três tipos de fantasmas:
- Agressor, que vai sempre em busca do jogador, dando um motivo para ele ter que fugir.
- Interceptador, que vai sempre ficar perto de uma encruzilhada próxima ao jogador, em direção oposta ao agressor. Assim, vai bloquear seu caminho quando o jogador estiver fugindo daquele. Outro interceptador fica no meio, para interceptar o jogador se ele tentar usar os túneis que levam de um lado ao outro da tela.
- Aleatório, que fica “mosqueando” em algum lugar por muito tempo, dificultando ao jogador de concluir aquela seção.
- E, naturalmente, todos fogem quando o jogador come a vitamina…
Finalmente, Super Mário
Geoff termina recomendando um projeto de side scroller, com plataformas, do tipo Super Mário Bros. Agora sim, estamos falando papo de gente grande.
- Provavelmente você vai querer usar uma máquina de tiles para representar seu “mundo” – que agora é maior do que uma tela. Essa é a principal evolução em relação aos anteriores.
- Mais ações para o avatar do jogador: andar, correr, pular, abaixar, etc. Mais animações. Aqui você vai depender da arte.
- Detecção de colisão com formas variadas (inimigos).
- Permitir ao personagem atirar – um tiro, em programação, significa um novo objeto introduzido no jogo em tempo real.
- Espaço para uma IA mais compelexa, com inimigos seguindo o jogador pelas plataformas.
- Level design muito mais complicado, incluindo (porque não) chefes de fase.
Este será um projeto bem próximo da maioria dos jogos que conhecemos e com boa abertura para implementar um roteiro (estória) criativo.
Conclusão
Olhando os pontos que são adicionados em cada projeto acima vemos como tem bastante complexidade adicionada em cada um deles. Tanto do Tetris para o Breakout, como deste para o Pac-Man. E do Pac-Man para o Super Mário nem se fala.
Vendo assim entendemos porque Geoff está correto: é muito difícil aprender tudo de uma vez. Temo que ir em passos evolutivos. Quem inicia direto pelo Super Mário, vai passar muito mais trabalho para entender cada subsistema porque vai estar vendo todos juntos e uns interferem nos outros.
Querm inica pelo God of War simplesmente não vai concluir o projeto. Vai ficar na idéia e com um personagem se movendo na tela e isso, por mais que pareça o contrário, está longe de ser um jogo.
Além disso, não faça o jogo apenas até o ponto onde dá para jogar. Vá em frente e dê o polimento, crie menus, uma abertura, instruções de como jogar, enfim, faça o produto fechado.
Por falar em produto, um aviso: não vá chamar seu jogo pelo nome do original. Você não pode chamar ele de Tetris (e nem usar a síbala “tris”, nesse caso) ou corre o risco de ser processado. Invente algo com o “o céu está caindo”.
Dê uma olhada no site da Foxhole. Tiago está agora trabalhando no clone de Breakout para o tutorial do Slick2D. Fez um cronograma bem organizado.
Artigo que deu origem a este:
http://www.gamedev.net/reference/design/features/makegames/default.asp
Postado em Sem categoria
.
.
Gostei dessa frase:
Pense grande, mas começe pequeno.
É bem o resumo do artigo. Parabéns ao Tetris!!
Deixe seu comentário