Mostrando postagens com marcador Simuladores. Mostrar todas as postagens
Mostrando postagens com marcador Simuladores. Mostrar todas as postagens

domingo, 28 de junho de 2009

TORCS: O Simulador de Corrida Aberto

Estou fazendo um curso de pós-graduação na Unioeste sobre Desenvolvimento de Software e Novas Tecnologias. Até agora está um pouco chato, pois tá chovendo bastante no molhado, mas também já aprendi algumas coisas legais. Além disso, temos que desenvolver um artigo para o final do curso, sendo assim eu consegui juntar o útil com o agradável, ou seja trabalhar com desenvolvimento de jogos.

A versão final do artigo só deverá ser entregue em setembro de 2010, porém já tivemos que fazer um esboço do trabalho final. O título do trabalho que tenho até agora é: "Inteligência Artificial Aplicada a Evolução de Carros de Corrida sem Treinamento". Ainda não estou satisfeito com este título, pois acho que não sintetiza de forma clara o que quero fazer, mas como era só um esboço inicial ficou assim mesmo.

Neste projeto eu irei utilizar o jogo torcs, http://torcs.sf.net, e meu objetivo é utilizar técnicas de inteligência artificial para conseguir evolução de tempos de volta e que isto seja feito em tempo real, ou seja, durante a corrida. A idéia é fazer com que o "robô" seja sensível as mundanças da pista e tenha a sensibilidade para melhorar sua tocada, sendo assim ser capaz de chegar aos limites do carro.

O pessoal que desenvolve o torcs criou um tutorial muito legal sobre criação de "robôs": http://www.berniw.org/, através dele é possível desenvolver uma IA bastante completa, que permite um carro frear, acelerar (claro :-), passar marcha, voltar para a pista depois de uma rodada, realizar ultrapassagens e parar nos boxes.

Com todas estas características vou deixar um pouco de lado minhas brincadeiras com a CrystalSpace3D e vou me dedicar a terminar de implementar o que está descrito no tutorial, pois além de oferecer a implementação, existem muitas explicações e referências a documentações mais completas sobre os conceitos abordados. Uma ótima pedida a quem quer brincar com IA em jogos de corrida.

Com isso espero começar a contribuir também com o jogo, aproveitando o que já está implementado para oferecer um jogo completo de F1. Na verdade, não falta muito para se ter isso, o que já está implementado é bem legal para ser oferecido como um jogo, basta oferecer mais conteúdo relacionado a F1, tais como equipes e pistas. É claro que para fazer comparações com jogos comerciais ainda é necessário evoluir bastante, mas com toda a sinceridade, é o jogo de corrida mais legal que vi até agora para o mundo do software livre.

sábado, 3 de janeiro de 2009

Brincando com Jogos de Corrida

Desde muito pequeno eu sempre gostei de jogos de corrida, até mesmo porque eu sempre vencia meus irmãos :D.

O primeiro jogo/simulador de fórmula 1 que joguei foi o F1GP ou World Circuit. Tem uma página legal na wikipédia sobre ele: http://en.wikipedia.org/wiki/Formula_One_Grand_Prix_(Geoff_Crammond) e no YouTube tem um vídeo legal também: http://www.youtube.com/watch?v=ZPTN4hnuShw. Neste vídeo contém a abertura do jogo que até hoje me deixa emocionado :). Eu e meus irmãos passavamos horas jogando. Foi paixão a primeira jogada, ainda lembro até hoje a minha primeira vitória, em Mexico City, estava numa posição ruim, 13º, e fiz uma corrida perfeita, voei baixo, fiz melhor volta atrás de melhor volta e no final lembro que o meu pai imprimiu a classificação final... fahsdufashfasdufsdhfsuadfshdu, bons tempos!!!

Depois vieram os outros jogos da série, GP2, GP3 e GP4. Joguei todos e joguei muito! Até hoje arranjo um tempinho pra jogar GP4, apesar de ser um jogo de 2002, ainda consigo me divertir com ele, ainda mais no meu hardware modesto, que não rodam os jogos de F1 mais novos e mesmo se rodasse continuaria jogando GP4, pois já tive a oportunidade de jogar outros, mas sempre tem algum aspecto que me faz voltar, seja ele na IA, na física, na jogabilidade com o teclado, etc.

Hoje já estou com quase 25 anos, acabei de me formar em ciência da computação e mesmo antes de entrar na faculdade eu sempre quis desenvolver um jogo, porém por um motivo ou por outro sempre acabava mudando os planos e nunca passava da votande. Nas últimas semanas decidi mudar esta história e criar culhões :D. Finalmente comecei a estudar pra criar um jogo e até agora estou me divertindo bastante, apesar de quebrar a cabeça muitas vezes pra fazer algo funcionar. Ainda não comecei a estudar a parte de física a fundo pra deixar o jogo realístico, pois primeiro quero criar um jogo que se possa jogar :D. Isso parece contraditório, porém sou usuário/programador de Linux e neste ambiente é comum encontrar diversos jogos que não dá pra instalar e jogar. Tem que instalar, ficar procurando mods, pistas, add-ons em diversos lugares, aprender como instalá-los, etc, etc, etc... fora os jogos incompletos que possuem screenshots marivolhasas em seus sites, parece até que os desenvolvedores ficaram mais tempo programando pra conseguir uma screen legal, ao invés de um jogo legal e isso me deixa muito frustrado.

Sendo assim a minha idéia é começar com coisas simples, porém juntando todas elas seja possível se divertir ao menos de forma parecida como eu me diverti com o F1GP. Você entra no jogo, escolhe as opções e joga, e pode ficar jogando durante horas. Não me importo em fazer algo visualmente atrativo, mas algo atrativo como um tudo, se conseguir isso, tenho certeza que poderei agregar uma comunidade com interesse comuns. Ainda tenho ótimas lembranças das comunidades que participei durante todos os anos que fiquei jogando a série GP, a qual não apenas jogava, mas criava utilitários, patchs, pistas, carros, milhares de add-ons pra deixar o jogo mais legal. Mas por enquanto isso é apenas sonho, ainda tem muito trabalho pra que eu consiga qualquer coisa próxima disso, então vamos falar de uma coisa mais interessante, o que eu estou fazendo (pelo menos pra min é interessante :).

Primeiramente, decidi em utilizar um engine para jogos, pois caso contrário iria levar no mínimo 2 anos pra fazer uma que funcionasse, e ainda não seria muito boa, pra somente depois começar a desenvolver o jogo. Deste modo, comecei a pesquisar algumas engines em software livre/código aberto. Decidi que iria utilizar a Delta3D, mas depois de praticamente uma semana tentando compilá-la desisti. Depois disto decidi pela CrystalSpace3D (CS) a qual foi fácil fazer funcionar, além disso esta possui uma boa documentação introdutória, a qual está desatualizada, mas quebra um galho pra quem está inciando.

Tal engine possui diversos exemplos que podem ser estudados, modificados e executados imediatamente, além disso, possui capacidade de scripting através da linguagem python e de uma linguagem própria, além disso possui uma biblioteca construída sobre si denominada CEL, esta contém abstrações para facilitar a criação de entidades. Algo que achei bastante interessante quando li e que gostei mais ainda da idéia depois que comecei a ler Programming Game AI by Example.

Apesar de aparentar ser uma boa engine, com suporte a física, detecção de colisões, rede e som (os elementos que preciso pra desenvolver um jogo) possui alguns bugs (que estão sendo trabalhados) e como já disse, como a documentação é introdutória, muitas coisas é difícil de saber como deve ser utilizada, porém a comunidade de desenolvedores é bastante ativa e disposta em ajudar, até já obtive a recomendação de um jogo desenvolvido com a engine que está hospedado no site SourceForge.net, falando nisso, existem vários jogos desenvolvidos com a engine lá, o que é legal, pois pra quem está começando fica mais fácil aprender com pessoas que já têm experiência.

Depois disso, decidi criar uma pista. Não fazia a menor idéia de como fazé-lo, sendo assim a minha primeira idéia foi encontrar uma pista já pronta e encontrei, porém não satisfez as minhas necessidades, pois estava em um formato não suportado pela engine e que só abriria no 3D Studio Max. Deste modo optei por fazer algo utilizando o Blender e fui incentivado pelo pessoal da CS, pois este é o melhor programa suportado pela engine.

Como nunca tinha utilizado o Blender pesquisei na internet como desenvolver uma pista com ele e pra minha surpresa encontrei um ótimo tutorial a respeito. O resultado final que obtive não foi nada profissional, mas para quem não sabia nada de Blender (ainda me bato bastante pra fazer umas coisas simples) fiquei bastante satisfeito, pois pude ver minha pista carregada dentro da engine e até interagir com ela.

Nesta screenshot está a pista dentro do blender:



E esta é uma screenshot da mesma pista dentro da engine:



Como já havia dito, nada profissional, mas consegui criar estas coisas de forma relativamente fácil. Agora que já tenho uma pista (que precisa de alguns ajustes, na verdade são diversos, mas vou fechar o parêntese :) o meu próximo passo é colocar um carro pra andar sozinho aí. Acreditava que isso seria extremamente difícil, mas pelo que estou lendo até agora em Programming Game AI by Example esta não parece uma tarefa muito herculiana e acho que vou me divertir fazendo isso.

Assim que colocar um carro pra rodar aí faço uma nova postagem a respeito. Por hoje é só :D