domingo, 28 de outubro de 2012

Grafos & Ressurreição

Acalmem-se senhoras e senhores! O hiato do blog (essencial para que eu pudesse fechar o semestre com chave de ouro) felizmente terminou!

De acordo com o post escrito aqui, meu tempo livre é uma progressão geométrica de razão negativa diretamente proporcional ao momento do semestre, logo, quanto mais próximo do fim, menos tempo. Como consequência algumas das minhas atividades mais queridas tiveram que ser deixadas de lado para garantir a estabilidade da minha vida acadêmica, culminando no abandono do blog (porém sendo responsável também pelo jubilo de ter sido aprovado em todas as matérias).

Tendo finalmente sido liberto das minhas responsabilidades para com a faculdade, posso retomar a escrita e a pesquisa. E tenho muito a postar sobre os projetos e estudos que realizei durante o meu período de ausência aqui. Começando com grafos.

Como trabalho para faculdade desenvolvi em conjunto com o grandioso Nosirrahh e mais dois colegas a base para a criação de uma inteligência artificial em um sistema de batalha de RPG tático (no melhor estilo Shining Force II :D).

Para ser mais claro, nosso objetivo era criar a raiz de algo assim:



O sistema que desenvolvemos cria uma matriz de 50x50 cubos e gera obstáculos aleatoriamente. A partir daí o usuário pode escolher um método de busca (largura, profundidade ou gulosa) e se ela será limitada. O sistema então calcula o menor caminho entre a capsula (representando o inimigo) e o cubo escolhido como alvo, desviando dos obstáculos.

Alcançando o alvo

Foram implementadas cinco classes principais:

  • Nodo: Contém as informações de posicionamento, índice e filhos (cubos adjacentes) de cada cubo.
  • Lista: Conjunto de Nodos compilados para a execução dos métodos de busca.
  • MetodosDeBusca: Algoritmo base para o aplicativo. Implementa os três métodos de busca, Largura, Profundidade e Gulosa, os três com ou sem limite de busca. Utilizam a classe Lista e trabalham com os filhos de cada Nodo.
  • Batalha: Gera a matriz de posições e os obstáculos aleatoriamente. Recebe um parâmetro para a quantidade de linhas e colunas (no nosso caso 50 para ambas).
  • GameExecution: Concatena todas as classes anteriores e organiza a execução do jogo. Gera a matriz de cubos de acordo com a matriz gerada pela instancia da classe Batalha. Desenha também a interface final para o usuário e executa o método de busca de acordo com os parâmetros selecionados. É responsável pela ponte entre as classes funcionais e a aplicação em si.
Há também um artigo que discute a inclusão e execução de grafos em jogos, bem como um aprofundamento na discussão da aplicação das funcionalidades acima. Os interessado podem lê-lo clicando aqui.

E o aplicativo pode ser testado clicando aqui (ainda há alguns pequenos bugs, mas nada que impeça o funcionamento do programa).

Foi um post curto e apenas um mergulho do dedão do pé no assunto de grafos (as aplicações são semi-infinitas e essenciais pra jogos), mas serviu bem como pivô para a ressurreição do blog, que vai passar por uma fase agitada e rica em conteúdo agora que tenho tempo para retomar minhas atividades e investir em novos projeto. Qualquer dúvida ou sugestão, fale comigo ou com o já citado grandioso Nossirahh.

É bom estar de volta. :D

Um comentário:

  1. Show, excelente escolha, Shining Force é uma ótima referência de aprendizado =)

    ResponderExcluir