|
|
| |
August 26th, 2008
Finalmente depois de um longo período sem internet em casa agora tudo se normalizou: estou com internet em casa novamente e de quebra a algum tempo inseri um novo layout no blog (espero que tenham gostado).
Aproveitando que agora posso realizar atualizações mais frequentes no blog, pensei em dar uma mudança no foco e uma diversificada: antes o meu foco original era apenas a linguagem C e a biblioteca Allegro (ainda continuo com este foco) mas pretendo passar a utilizar apenas a linguagem C++ nos exemplos (acho que compensa um pouco mais de complexidade na flexibilidade que terei ao utilizar classes para exemplificar alguns conceitos). Também pretendo postar alguns tutoriais simples sobre programação em celulares (tenho me dedicado bastante nesta plataforma e estou gostando bastante).
Falando em mudança de foco, a minha idéia inicial era publicar artigos sobre “conceitos” em separado e depois dar um pequeno exemplo prático, mas pelo que eu vi, é muito mais fácil já dar um exemplo prático (e explicá-lo) já aplicando o conceito. Exemplo: ao invés de explicar detecção de colisão, gameloop etc, seria melhor mostrar um exemplo já aplicando isto em um jogo e depois ir dissecando um por um.
Seguindo esta linha creio que o pessoal irá aprender mais e se divertir mais no processo.
Também andei acompanhando a movimentação do tráfego do blog, partes mais acessadas e percebi que o tutorial de trigonometria anda bastante acessado (muito obrigado pessoal). Isto me fez perceber que ele precisa de uma revisão (e uma boa reescrita) mas acima de tudo: mais exemplos práticos.
Bom, na verdade foi mais um desabafo para vocês saberem que eu estou vivo e como pretendo fazer as coisas daqui pra frente.
Obrigado pessoal e até a próxima.
Sugestões? Críticas? Sou todo ouvidos.
July 24th, 2008
Olá pessoal.
Mês que vem (Agosto/2008) o blog passará por algumas mudanças e talvez fique fora do ar alguns dias.
Em especial terá um novo layout e um novo foco nos artigos.
Fiquem ligados.
July 15th, 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 14th, 2008
Olá.
Recentemente para fins de teste me aventurei a fazer um jogo para celular e acabou saindo o VMPong.

VMPong rodando em todo o seu esplendor…
Para esta tarefa eu queria verificar:
- qual a dificuldade real de se fazer um jogo para celular;
- quais ferramentas, plataformas e ambientes disponíveis;
- quais são as possibilidades.
Como eu queria algo “livre” e estava curto em dinheiro, a minha melhor opção era sem dúvida o Java. Após algum tempo verificando a página de tecnologias de mobilidade da Sun, resolvi dar um chance e botar a mão na massa.
O primeiro passo foi conseguir ter acesso às ferramentas necessárias, neste quesito eu apelei para o NetBeans. Um ambiente completo e integrado para desenvolvimento Java (incluindo claro, módulos para desenvolvimento mobile).

No processo todo, aprendi algumas lições:
- ferramentas para desenvolvimento Java são muito boas, em especial o NetBeans dá conta do recado com o seu ambiente integrado;
- sempre teste no aparelho, emuladores são muito diferentes e no meu caso (no meu celular V3), o celular é muito mais lerdo do que o emulador;
- celulares são MUITO diferentes de serem programados. Cada variável declarada, cada memória alocada deve ser pensada com atenção pois os recursos são muito escassos (MUITO escassos);
- a parte mais difícil do processo todo foi conseguir passar o jogo para o celular (realmente complicado, vale um artigo inteiro por si só);
- se você curte otimizar o código ao máximo vai se divertir bastante.
- as possibilidades são grandes.
- ver um jogo que você fez rodar em seu celular é muito bacana (todo mundo devia experimentar isso um dia :))…
No geral, utilizando conceitos básicos de game loop e colisão, consegui fazer um pong simples e rápido para o celular (o problema inicial foi se acostumar com o “feeling” de espaço e tempo da plataforma.
As possiblidades para jogos para celulares são grandes, em especial conforme eles aumentam de capacidade, as coisas ficam muito mais interessantes, mas por enquanto, o público alvo para este tipo de plataforma são os jogadores casuais (e com razão). Com o advento e adesão do OpenGL ES os celulares mais novos já suportam aceleração 3D (acessível através da API OpenGL (em uma versão reduzida)).
É possível fazer coisas muito mais bacanas (eu mostrei apenas a ponta do iceberg).
Como não poderia deixar de ser, o jogo pode ser baixado aqui (incluindo o código fonte completo com o projeto no NetBeans) . PS: o código fonte está em inglês, incluindo os comentários.
Bom estudo.
Espero ter ajudado. Qualquer sugestão não deixem de comunicar.
Links
Pensei em postar alguns links que encontrei, mas por enquanto existe um link muito bom em http://www.codebeach.com/index.asp?tabID=2&categoryID=25&subcategoryID=11 onde você pode encontrar diversos links para outros sites com muitos materiais sobre programação de games em J2ME.
June 18th, 2008
O site bdjogos recentemente marcou um ano de vida. Parabéns à todos os seus idealizadores, em especial ao Adriano que têm contribuído com conteúdo de qualidade sobre desenvolvimento de jogos.
Para quem não conhece, o bdjogos é um site nacional com conteúdo 100% exclusivo focado em desenvolvimento de jogos utilizando C++ e Allegro. O site possui um excelente conteúdo (voltado principalmente para iniciantes) com diversos tutoriais de fácil leitura em vários tópicos.
Que continue o bom trabalho, a comunidade só tem a ganhar. Não deixem de contribuir com o bdjogos (e com este humilde blog :)) também dando sugestões, participando do fórum e postando artigos.
Até.
May 26th, 2008
Olá,
Hoje vamos ver um tema bem simples: como utilizar arquivos de configuração no Allegro.
Os arquivos de configuração do Allegro podem ser utilizados para diversos fins (com suas devidas vantagens e desvantagens).
Vantagens
- mecanismo simples, fácil de utilizar
- sintaxe dos arquivos iguais à arquivos .INI (ou seja, muito simples)
- deixa alguns valores configuráveis, não necessitando de recompilação para testar novos valores
Desvantagens
- não é flexível, serve apenas para guardar valores (nada de tipos compostos como arrays, etc)
- os arquivos não são compactados e criptografados, qualquer um pode alterá-los
Definição
Os arquivos de configuração no Allegro nada mais são do que arquivos texto comuns formatados com uma estrutura parecido com arquivos .INI onde temos a seguinte estrutura:
// comeco do arquivo
[nomesecao]
rotulo=valor # comentario
// fim do arquivo
Aqui vemos os seguintes elementos:
nomesecao = nome da seção que contém as configurações (serve como uma maneira de organizar as configurações por partes)
rotulo = nome do rótulo que conterá um valor (e será referenciado em código)
valor = valor para o rótulo
Exemplo de um arquivo:
// comeco do arquivo
[graficos]
largura=640
altura=480
profundidade=16
telacheia=0
// fim do arquivo
No arquivo acima temos uma seção chamada “graficos” onde definimos algumas variáveis específicas para a resolução de tela.
Algumas observações adicionais retiradas do manual:
- toda variável que não estiver definida em uma seção automaticamente estará disponível em todas as seções
- o mecanismo de seções serve para implementar uma espécie de escopo onde é possível definir rótulos iguais para seções diferentes
Exemplo:
[video]
largura=640
altura=480
[monstro]
largura=10
altura=50
Acima podemos ver que a largura e altura do monstro diferem da altura e largura da seção “video”.
Implementação
Para utilizar arquivos de configuração no Allegro, precisamos seguir os passos abaixo:
- especificar o arquivo que contém os valores
- pegar o valor da seção e rótulo que queremos
- utilizar o valor
Para especificar o arquivo de configuração, utilizaremos a função “set_config_file” onde passamos um ponteiro de chars para o arquivo que queremos:
Exemplo:
char *nomeArquivo = “config.cfg”;
set_config_file(nomeArquivo);
Para pegar o valor de um determinado rótulo precisamos primeiro saber o tipo do valor que queremos. Atualmente o Allegro suporta os seguintes tipos:
- string: equivalente ao tipo “char *” no C. (const char *get_config_string(const char *section, const char *name, const char *def);)
- inteiro: equivalente ao tipo “int” no C. (int get_config_int(const char *section, const char *name, int def);)
- hexadecimal: equivalente ao tipo “int” no C. (int get_config_hex(const char *section, const char *name, int def);)
- float: equivalente ao tipo “float” no C. (float get_config_float(const char *section, const char *name, float def);)
Como vemos no protótipo das funções acima, elas compartilham alguns parâmetros em comum:
const char *section = nome da seção onde iremos especificar o rótulo
const char *name = rótulo que contém o valor
(int|float|const char *def) = valor padrão para o rótulo se nenhum valor for encontrado
Exemplo:
int largura = get_config_int(”graficos”, “largura”, 320);
A linha de código acima procura no arquivo de configuração na seção “graficos” pelo “rótulo” “largura” e atribui o valor à variável inteira “largura”, se o valor não for encontrado, a variável inteira “largura” terá então o valor 320.
Um exemplo mais completo:
Faça o download deste exemplo aqui.

Conclusão
Como você percebeu, a utilização dos arquivos de configuração depende da criatividade. Arquivos de configuração podem ser utilizados para guardar a lógica de gameplay de um jogo podendo ser alterado sem necessidade de recompilação do executável.
Existe muito mais flexibilidade disponível, recomendo uma leitura no manual pois existem funções para escrever nos arquivos e diversas outras não apontadas neste tutorial.
Exercícios
Agora que você já sabe o básico sobre arquivos de configuração, tente os exercícios abaixo:
- faça um programa que imprima um cubo na tela nas coordenadas iniciais x e y especificadas através de um arquivo de configuração
- utilizando a função makecol, faça uma função que limpe a tela com as cores lidas através de um arquivo de configuração (dica: faça um rótulo para cada cor, vermelho, verde e azul)
- faça uma pequena entidade que se move na tela e altere alguns parâmetros dela através de arquivos de configuração: velocidade, cor, talvez até o tipo (triângulo, quadrado, etc), as possiblidades são grandes.
Não deixe de dar a sua sugestão para artigos futuros.
Até a próxima.
May 9th, 2008
Olá pessoal.
Passei os últimos meses muito ocupado (vide a falta de posts) mas não abandonei o blog, pelo contrário: a produção de conteúdo continua a todo vapor. Um dos grandes defeitos deste blog é a postagem não frequente de conteúdo (apesar de não ter falta de conteúdo aqui eu vou passar a liberá-los com mais frequência).
Também andei fazendo diversas outras coisas ultimamente:
- programação para celulares utilizando j2me (fiz um pequeno pong)
- migração para linux (mandriva)
- comprei o livro Game Programming All in One third edition
Também terminei de escrever um artigo sobre como utilizar arquivos de configuração no Allegro e continuo escrevendo um artigo sobre vetores (o conceito matemático) aplicado à jogos.
Enfim, novidades virão.
Até a próxima.
February 27th, 2008

Olá pessoal.
Voltando finalmente à série de posts “semanais da semana” depois de um longo período “de molho” devido à maratona de trabalho intenso (muito intenso), como já foi discutido anteriormente, estudar códigos-fonte é uma das melhores maneiras de aprender a programar jogos porque você vê como as partes se interligam, como se aplicam determinadas técnicas, etc.
Existem diversos códigos fonte de jogos comerciais disponíveis para download, em especial a id Software sempre foi famosa por lançar o código de seus jogos alguns anos após o lançamento inicial.
Segue abaixo uma pequena compilação de alguns dos jogos da id Software pra você pegar e estudar (dos mais recentes para os mais antigos).
Quake 3

Uma das engines de maior sucesso da história (sucesso de vendas para a id) utilizada em diversos jogos comerciais, Quake 3 pegou todas as características das engines anteriores e melhorou em todos os aspectos: gráficos melhores com suporte à shaders e maiores resoluções devido ao hardware da época, ferramentas de edição melhoradas, etc.
quake3-132b-source.zip
Quake 2

Versão melhorada da engine do Quake, já com suporte nativo à plataforma win 32 (adeus DOS), código de networking melhorado e extensibilidade através de dlls (ao invés do antigo código QuakeC). Também trouxe melhorias na parte de modelos (novo formato md2) e a capacidade de trocar de renderizador em tempo real.
quake2.zip
Quake

Engine pioneira na época (1996) por utilizar polígonos arbitrários permitindo total imersão 3d. Feita para rodar em computadores 486 com 16mb de ram, ela era rápida e permitia uma grande flexibilidade através de uma linguagem de scripts chamada QuakeC. Mais tarde foi aperfeiçoada para rodar em ambientes windows (winquake) e suportar aceleralção 3d (glquake).
A id liberou junto o código fonte de todas as ferramentas utilizadas na edição do jogo (compilador QuakeC, editor de mapa, etc, não inclusos no pacote) que pode ser baixados no site do fabricante.
q1source.zip
Doom

Quem não se lembra do Doom? Wolfestein melhorado em todos os aspectos: os mapas possuem a possibilidade de ter paredes não ortogonais (como acontecia no Wolfestein), o chão pode ter inclinação, texturas no teto e no chão, efeitos de luz melhorados (com alguns truques na paleta de cores), etc.
Muito revolucionário para a época. Entretanto o código fonte original lançado (disponível para download abaixo) possui apenas suporte a Linux e sem som. Com o tempo foram criados novos “ports” e essas limitações foram corrigidas mas vale como aprendizado.
doomsrc.zip
Wolfestein 3D

Um dos primeiros jogos 3d da id Software, inovou ao utilizar uma técnica conhecida como “ray-casting” gerando imagens pseudo-tridimensionais e texturizadas com o hardware da época (286-4mb ram). A engine possui uma arquitetura de 16 bits e foi compilada com o Borland C 3.0
wolfsrc.zip
Possui algum código interessante? Quer ve-lo publicado aqui? Sabe de algum jogo comercial que teve sua fonte lançada recentemente? Não deixe de enviar o seu recado.
Valeu, até a próxima.
December 22nd, 2007
Aproveitando a época de festas, gostaria de mandar um Feliz Natal para todos.
Que o pessoal consiga realizar os seus pedidos neste ano que virá e que o natal sirva como uma renovação para coisas novas e boas que irão acontecer.
E aguardem, ano que vem será repleto de surpresas…
Muito sucesso à todos.
December 21st, 2007
Recentemente descobri um livro que ensina as técnicas básicas para programar jogos com Allegro e inclui diversos exemplos.

O autor desta façanha é o Jonathan S. Harbour.
O livro pode ser adquirido na Amazon.
Se você está com o inglês em dia eu recomendo fortemente. Mesmo se você não for comprar o livro, o site do autor possui os exemplos e são altamente didáticos.
|
| |