segunda-feira, 19 de novembro de 2007

Microsoft XNA Framework

Este é um post que, sem dúvida nenhuma, pode ser considerado como muito geek, já que fala de uma coisa que, mesmo para muitos dos que são do mundo informático, é desconhecida.

Tive conhecimento desta framework em Março, numa das sessões do Microsoft Tech Days Lisbon 07, sessão esta que foi apresentada de uma forma brilhante por um senhor chamado Rob Miles. E, além da apresentação ter sido excelente, também o seu conteúdo foi muito interessante. Digamos que saí de lá com uma vontade imensa de experimentar aquilo.

Mas o que é então o XNA? Muito poderia haver a dizer sobre isto mas, resumidamente, trata-se de uma framework que integra um conjunto de ferramentas que facilita o desenho, gestão e desenvolvimento de jogos, quer para computador quer para a XBox, de uma forma muito ágil. Mais informações sobre XNA no site oficial ou na Wikipedia, para quem preferir passar à frente a conversa de marketing.

Para desenvolver algo utilizando XNA, é necessário instalar o seguinte, pela ordem indicada:
  1. Visual C# 2005 Express (~30MB)
  2. Visual C# 2005 Express SP1 (~25MB)
  3. XNA (~80MB)
A instalação não demora muito e é preciso ter em atenção que mesmo tendo outra versão do Visual Studio instalada, continua a ser necessário instalar na mesma a versão Express... Também fiquei um bocado surpreendido e vá-se lá saber o motivo disto...

Para quem tiver curiosidade em aprender XNA, pode dar uma vista de olhos nestes tutoriais, dos quais eu recomendo os seguintes:
e finalmente, o mais engraçado e que surge na sequência dos 3 anteriores e que permite obter um jogo minimamente funcional, o conhecido Asteroids:
Ver estes tutoriais e ir experimentado simultâneamente é muito bom e aprende-se facilmente, chegando mesmo ao ponto de uma pessoa se antecipar em relação ao tutorial. E ainda outra grande vantagem que não tinha referido: a linguagem de programação é, embora esteja explícita nos programas que é necessário instalar, uma linguagem muito alto nível, nomeadamente C#. Fantástico!

E agora coloca-se a pergunta: será que eu hoje acordei num estado qualquer maluco e geek, para me lembrar de experimentar isto, ao fim de tanto tempo depois de ter visto aquela apresentação em Lisboa? A resposta é não! Ou acham mesmo que eu ia passar uma tarde de um domingo a fazer isto?

Para a disciplina de MADS, era necessário escolher um tema de trabalho, que seria posteriormente desenvolvido de acordo com métodos ágeis, nomeadamente Extreme Programing (XP), aplicando para tal o conceito de Pair Programming.

A data imposta pelo professor para escolha de um tema estava prestes a terminar e, o pessoal já traumatizado com os plugins para o Eclipse (outro trauma...) desenvolvidos em LESO no ano passado, andava a ficar preocupado, pois caso não se indicasse tema, este seria "imposto".
Isto até ao dia em que eu, o Quim e a Susana estávamos a lanchar no bar da biblioteca e precisamente a faltar a MADS (mas a discutir o trabalho...) e aparece o Marco, que nem sequer tem a dita disciplina e propôs um jogo em XNA. Gostámos imediatamente da ideia e começámos logo ali a amadurecer pormenores para o jogo.

Já todos conhecíamos XNA e queríamos experimentar, aliado ao facto de ser em C# e consequentemente impedir o uso do Eclipse, tão venerado pelo professor, contribuiu imediatamente para um grande entusiasmo, especialmente o Quim, que adora C#. Os restantes membros do grupo, à falta de outras ideias, também aceitaram e ficou então decidido.
E entre todos, começámos logo ali a definir algumas coisas, com a ajuda posterior do Fábio e do Diogo, desta feita já no bar do meio. Aqui ficam alguns pormenores sobre o jogo:
  • Tema: Jogo das Apanhadas / Caçadinhas / Toca e Foge (2D)
  • Modos de jogo: single (todos contra todos), equipas (uma equipa tem de apanhar outra(s), os jogadores apanhados podem ser salvos), time trial (passar uma bomba que explode ao fim de X tempo) -- num PC e em LAN
  • Mapa: maior que o ecrã, de modo aos jogadores poderem esconder-se
  • Extras: veículos, armas, boost items
  • Bots: 2 níveis de dificuldade
Parece divertido, não é? Já que temos liberdade de escolha, porque não ser algo assim? Tal como dizem os tutoriais, desenvolver um jogo em XNA deverá ser quase ou mesmo tão divertido como jogá-lo... Sounds very geek...

E o principal problema: será que o professor aceita isto? Pois bem, aceitou! E como é necessário aprender XNA até à data da primeira iteração do projecto, dia 30 de Novembro, decidi fazer já os tutoriais e aprender qualquer coisa. Não acho que me vá esquecer até lá e de facto isto é bastante intuitivo e está bem documentado, portanto não acho que haverá grande crise.

E tendo acabado o tutorial 4, fiquei com o Asteroids a funcionar minimamente. Mas estava de tal maneira entusiasmado com aquilo, que decidi seguir a sugestão de continuar a implementar mais umas funcionalidades, nomeadamente:
  • carregar a arma da nave com mais tiros
  • passagens de nível (aumentando sempre o número de asteróides e as suas velocidades)
  • existência de vidas, com conceitos de perder / ganhar vidas e game over
  • highscore
  • novos sons
O jogo até ficou porreiro, criei um installer e tudo (não me chamem geek, porque com o Visual Studio faz-se em 5 minutos), e só não disponibilizo aqui porque aparentemente não funciona num PC que não tenha XNA instalado... Deveria funcionar, mas devem ser problemas de dependências ou DLLs, que não consegui resolver... Se por acaso um dia tiver tempo e volte a olhar para aquilo, tento descobrir porquê e meto o jogo aqui.

De referir que acho que exagerei no nível de dificuldade... Conseguir chegar ao nível 5 já não é mau, chegar ao 6 é muito bom e alcançar o 7 é de doidos... Cheguei ao 7 uma vez e foi game over quase instantaneamente, tal a quantidade de asteróides e a velocidade com que estes se deslocavam... Pobre da minha nave!

E chega de conversa geek, que já passa das 4 da manhã... O tempo passa... Felizmente que a entrevista com a Dra. Lígia Ribeiro, Pro-Reitora da UP é só às 14h30 e não às 9h, como inicialmente pensava!

Sem comentários: