Existe um livro muito bom chamado J2ME Game Programming (primeira edição).

Capa do livro
Escrito por Martin J. Wells, o livro é bem completo e explica em detalhes como programar celulares utilizando Java. Além disso, é uma excelente fonte de técnicas para programar jogos 2d (incluindo trigonometria, cenários, raycasting, isometria e uma infinidade de temas interessantes que podem ser aplicados para outros ambientes…).
O livro pode ser adquirido através da Amazon (apenas em inglês).
Apesar de ser um bom livro, possui algumas desvantagens tais como revisão mal finalizada e humor excessivo em alguns pontos, mas que não alteram o valor do conteúdo do livro.
Atualmente ele possui duas edições: a segunda edição é a mais atual (voltada para o MIDP 2.0 e a primeira para o 1.0.
Bons estudos.
November 30th, 2008
Hoje venho falar de um assunto muito importante: foco.
Foco é de extrema importância na vida (seja na execução de um trabalho difícil, nos estudos ou paciência para persistir) e principalmente para quem está estudando programação de jogos.
Um exemplo que aconteceu comigo: antigamente eu pesquisava diversos tutoriais sobre programação de jogos em geral (sobre diversas linguagens e tecnologias), dava uma lida por cima e guardava comigo.
Isto acabou me ajudando ??? Sim e não…
Sim pois acabei juntando uma boa biblioteca pra pesquisar e que me ajuda a resolver alguns problemas que eu possa ter no futuro.
Não pois sinceramente não “aprendi direito” deste jeito. O simples fato de ficar “apenas na pesquisa” não me deu o tempo necessário pra praticar. Resultado: não dá pra abraçar o mundo, é melhor focar em algo (quando estamos aprendendo) do que querer ver e fazer tudo o que tem de novo, interessante, etc.
Então baseado no que eu passei, segue abaixo algumas dicas para você ter foco e não se perder nessa longa caminhada:
- faça um objetivo por vez (lembre-se que o conhecimento se constrói em cima de conhecimento, logo existem temas que você estuda que dependem do conhecimento e domínio prévio de outros temas, aprenda a detectar isto e corra atrás…);
- faça uma lista do que você precisa estudar (vou dar um exemplo mais abaixo de uma lista que estou utilizando) e foque um assunto por vez, dedique alguns dias & semanas para cada assunto e você verá seus conhecimentos evoluindo;
- Se quiser aprender a fazer jogos pra web, aprenda flash ou silverlight mas não os dois… Quer aprender a fazer jogos 3d com alguma API? Foque ou no OpenGL ou no Direct 3d (mas não nos dois (pegaram o espirito…). Quer aprender alguma linguagem? Escolha uma e foque sua energia nela;
- Mais uma vez: conhecimento se constrói em cima de conhecimento. Para se ter conhecimento deve se ter uma base sólida que você consegue estudando e focando (no início). Depois fica mais fácil passar este conhecimento para outros ambientes;
- Ouvir músicas que não distraem muito ajudam na hora de concentrar e focar no problema em mãos.
- Façam exercicios: ajuda a manter o corpo e o cérebro saudáveis facilitando a resolução de problemas difícieis e a capacidade de concentração (para focar é claro).
Mais um exemplo: no item dois comentei a respeito de fazer uma listagem de coisas a fazer e a estudar, atualmente possuo um rascunho do que eu estou fazendo (pode não ser a lista mais completa, mas me ajuda a saber o que eu quero, o que preciso focar, o que ja sei, etc…).
- C++
- templates
- classes (incluindo construtores, de cópia e destrutores)
- namespaces
- ponteiros e referências
- sobrecarga de operadores
- herança
- polimorfismo
- STL
- friends
- game loop
- controle de fps
- sprites
- tiles
- background scrolling
- menu básico
- detecção de colisão
- boudingbox (plane exclusion)
- esfera
- triângulo
- intersecção entre dois segmentos de reta
- matemática
- seno & coseno
- tabelas lookup
- vetores
- matrizes
- matemática de ponto fixo
- geometria
- algebra linear
- fisica
- gravidade
- velocidade linear (um pouco mais complicado do que parece)
- friccao
- balistica
- leis de newton
- network
- ai
- pathfinding
Quando digo por exemplo para focar em uma tecnologia & ambiente é porque com o passar do tempo de estudo você já terá uma certa familiaridade com ele e não perderá mais tempo fazendo inicializações, enfrentando problemas diversos de adaptação. Com isso conforme for estudando novos assuntos, poderá facilmente aplicá-los na sua base ja existente (acelerando o aprendizado e permitindo que você foque no novo material).
É claro, a maioria das técnicas aprendidas (incluindo as mais avançadas que você só aprendeu por persistir e ter foco) podem ser aplicadas em outras ocasiões e ambientes (então o fato de você focar em um ambiente trouxe vantagens ao invés de desvantagens, pois permite uma adaptação mais rápida para novos ambientes e conceitos).
Conclusão
O que eu quis mostrar aqui é que a falta de foco pode atrapalhar bastante nos estudos. No geral é melhor ter um pássaro na mão do que dois voando.
Sintam-se a vontade para ler e deixar suas dicas também.
November 13th, 2008
Segue mais algumas dicas e conselhos interessantes para aprender a programar jogos eletrônicos:
- Estude códigos fonte: esta dica é essencial, códigos fonte escondem verdadeiros tesouros, técnicas sendo utilizadas, estruturação de projeto, documentação, construções da linguagem, etc. Essas são algumas das coisas que você encontrará lendo um código fonte, mas o importante é que você verá a coisa na prática, verá o que é possível fazer (muitas coisas você nem terá idéia de que era possível). Gaste um pouco do seu tempo e estude códigos fonte. Futuramente farei um guia para auxiliar o estudo de códigos fonte;
- Com o tempo de utilização e programação, você irá desenvolvendo sua própria biblioteca utilitária de funções (super importante) para melhorar a produtividade pessoal, pode ser um projeto teste ou apenas um arquivo que não compila mas é importante ir guardando esses pequenos pedaços úteis de código pois no futuro serão muito úteis (provavelmente se você tem o costume de ler códigos fonte já possui vários desses “nacos”);
- No C e C++ o domínio de ponteiros é fundamental (mais do que parece, principalmente pelo C ser meio que uma linguagem de baixo nivel muito utilizado em programação de microcontroladores e dispositivos embarcados), para o inicante começar a entender e dominar ponteiros, o interessante é ele trabalhar com strings no C (vetores de caracteres) e principalmente: ESTRUTURAS DE DADOS (o pulo do gato para entender ponteiros);
- C é uma linguagem pequena e concisa, C++ é uma linguagem mais complicada e possui um poder de expressão maior, mas ambas dão conta do recado no que se refere à programação de jogos eletrônicos. Estude as duas se possível (ou parta direto para o C++, não é necessário aprender C para aprender o C++ embora eu recomende), saiba os prós e contras de cada uma;
- Estude estruturas de dados, veja o conceito, desenhe no papel o seu funcionamento, estruturas de dados são fundamentais para a organização de dados e o entendimento de diversos conceitos na ciência da computação, além disso, a implementação de listas linkadas em linguagem C e manipulação de vetores de chars serve como uma excelente prática de ponteiros;
- Entenda como funciona o hardware de um IBM PC, se você pegar um livro de assembly e der uma “passada por cima” poderá ter um pouco dessa visão;
- Estude sobre teoria geral de sistemas operacionais: saiba os conceitos envolvido no mundo dos sistemas operacionais em geral: threads, processos, escalonamento, saiba como seu sistema operacional organiza e permite o acesso à memória e dispositivos;
- Não existe só C e C++ para programação de jogos, se você sabe os conceitos pode aplicá-los em outros ambientes e linguagens (celulares com J2ME), Flash para a Web, não se prenda a um ambiente, principalmente se você pretende programar consoles.
As dicas abaixo foram selecionadas e traduzidas de um artigo do site Gamasutra (http://www.gamasutra.com/features/20010117/abrash_01.htm). Eu separei as que achei mais relevante:
- Os três segredos para o sucesso são:
1) Trabalho duro,
2) Trabalho duro, e
3) Trabalho duro.
- Aprenda fazendo. Pensar é bom, mas a única maneira de você realmente aprender algo é fazendo você mesmo e finalizando, o que é mais difícil do que parece porque entregar software não é um ato natural (obrigado ao David Stafford por esta frase). Aceite a realidade: nenhum software será perfeito, e a perfeição é um alvo móvel de qualquer maneira. Faça as concessões necessárias e finalize o projeto;
- Siga a sombra dos gigantes. Existem poucas idéias novas no mundo; leia o que os outros fizeram ao invés de ficar tentando inventar tudo você mesmo;
- A maior parte do sucesso da programação se baseia na engenharia e integração e finalização e ser flexível, ao invés de pura invenção. Claro, é divertido reinventar as coisas, mas existe uma quantidade enorme de coisas que você precisa saber, então é difícil fazer tudo você mesmo. Além do mais, existe um monte de coisas legais para descobrir depois que você aprender o que já foi resolvido;
- Aprenda o máximo de matemática que você conseguir. Então aprenda um pouco mais. A indústria está movendo dos generalistas, programadores fazem-tudo para programadores com grandes conhecimentos em áreas como física. Programar em si é fácil; é o expertise em áreas intensivas de conhecimento que irão diferenciar os programadores no futuro;
- Seja paciente. Demora um ano para ficar competente em algo novo, três anos para se tornar um especialista;
- Abrace as mudanças, ou assista elas chegarem e as deixe para trás. Aceite que os objetivos, técnicas, e regras irão mudar constantemente;
- Faça um glossário dos termos que você desconhece, procure na Internet, livros, viu uma sigla e não sabe o que é Google ou Wikipedia nela :), aprenda a estudar.
- Utilize toda informação a sua disposição.
Possui alguma dica interessante? Não deixe de enviar. Contribua para espalhar o aprendizado sobre desenvolvimento de jogos no Brasil.
Referências
Gamasutra
July 15th, 2008