e-games: meu jogo com XNA

O SENAC São Paulo organizou sua primeira competição de jogos digitais, o e-Games, onde os concorrentes deveriam criar um jogo utilizando XNA. Além do jogo feito com XNA, foi necessário entregar um vídeo, documento de game design, apresentação, resumo e guia de instalação. O Download do jogo pode ser feito clicando aqui, ele necessita do .Net Framework 3.5 e Microsoft XNA Framework Redistributable 3.1 instalados para rodar, não é necessário instalar o jogo, apenas executar o SpaceShip4042.exe.

Tela inicial do jogo desenvolvido com XNA para o e-Games

Tela inicial do jogo desenvolvido com XNA


O prazo para entrega foi na última sexta-feira, e eu decidi participar disto uma semana antes e sozinho. Ou seja, tive apenas uma semana para fazer tudo isso, além de ter que trabalhar e ir para a faculdade. Como estava sem tempo, decidi criar uma versão do meu jogo de celular SpaceShip 4042 em XNA, pois já tenho todas as imagens para criar o jogo, além de ter todo o conceito pronto, só foi necessário programar.

Depois de uma semana dormindo menos de 4 horas por dia, virando noites programando, o resultado não foi exatamente o que eu imaginei, mas consegui terminar meu jogo com tudo que a versão de celular tem, com excessão de som, pois tive dificuldades com isto e estava sem tempo. Além disso, no lugar de um High Score, fiz um Ranking top 5.

Embora eu tivesse apenas que programar, tive vários problemas por não conhecer muitas coisas no XNA e não ter tempo suficiente para estudar melhor. O maior problema que tive foi com a detecção de colisão por pixel. No JME existe uma função que verifica a colisião entre dois Sprites, inclusive existe o tipo de dado Sprite. Já no XNA não é tão fácil assim, não existe Sprite e método de detecção de colisão pronto.

O método de colisão que utilizei consiste em verificar se existe a interseção entre a área da imagem dos dois Sprites que estão colidindo. Uma vez que esta interseção existe, vem a parte mais complicada que é verificar se existe a sobreposição dos pixels que não são transparentes na imagem, utilizando um vetor com a cor da cada pixel da imagem. Não é tão complicado quanto parece, mas é bem chatinho de fazer.

Resolvi o problema do Sprite criando uma classe com os atributos que achei necessários para a fazer a nave, os meteoros, os itens e os tiros. Os principais atributos são: um Vector2D para a posição do objeto, uma lista de Texture2D para guardar todos as imagens que compoem a animação do Sprite, um Rectangle para ser utilizado na detecção da colisão, um vetor de Color com as cores da imagem, um bool para a visibilidade, e inteiros para armazenar vida, frame da animação e movimentação do objeto. Criei métodos para desenhar, mover, esconder, causar dano e verificar se o sprite “morreu”.

Outro problema que tive, mas que foi simples de resolver, foi a animação, pois o XNA também não possui algo que facilite isto como o incrível arquivo GameDesign do JME. Utilizando um inteiro, controlei a animação do Sprite em cada quadro. Também tive dificuldades com a criação das telas e sua maniulação. Criei uma interface para telas, e todas as telas implementam os métodos default do XNA: Update, Draw e LoadContent, além de um para controlar a inicilização das variáveis. A classe principal do jogo inicia todas as variáveis que representam as telas e tem responsabilidade de controlar a exibição de cada uma, de acordo com o estado do jogo.

Tela do jogo com os três tipos de Sprite criados

Tela do jogo com os três tipos de Sprite criados

Se eu tivesse tido mais tempo, ou começado bem antes quando fiquei sabendo desde concurso, eu poderia ter feito muitas outras coisas e melhor, mas fiquei satisfeito em fazer um jogo em XNA em tão pouco tempo e sem conhecer tão bem as características desta tecnologia. Fiz muitas coisas básicas para um jogo 2D, e na minha opinião só faltou colocar som no jogo.

Assim como no JME, que tive dificuldades no começo, tive dificuldades com o XNA também, mas meus próximos jogos 2D nessas plataformas ficarão muito melhores, e provavelmente levarei menos tempo para programar, pois aprendi muitas coisas desenvolvendo para plataformas diferentes com tecnologias distintas. Praticamente tudo que utilizei aprendi fuçando nos exemplos do XNA Creators Club e nas dúvidas no forum, são ótimas fontes de informações.

Meu próximo passo agora é começar a estudar programação de jogos em 3D com C++. Este estudo é o primeiro passo para o meu TCC ano que vem, que provavelmente será um jogo em 3D com C++. Tenho algumas idéias para o jogo, mas nada decidido ainda, porém preciso aprender este tipo de programação, que eu tive contanto apenas no XNA para movimentação de modelos 3D simples na tela.


  1. eu says:

    Bom jogo! continua assim! eu tambem estou aprender XNA para fazer um jogo de naves para minha PAP deste ano…espero conseguir! se me podesses dar umas dicas agradeço…

  2. cicanci says:

    Olá! Obrigado pelo comentário!

    Um jogo de nave como eu fiz é bem simples de fazer, a única parte um pouco mais complicada é gerar vários meteoros e verificar a colisão dos tiros e da nave com eles. Isso é um pouco complicado, pois não pode ser feito de qualquer jeito. Dependendo de como for feito, pode deixar o jogo pesado. O legal é sempre remover da memória tudo que não estiver usando.

    Essa dica é meio geral, me fala as suas dúvida que eu tentarei te ajudar! Até mais!

  3. Eu says:

    Ola…A minha duvida e saber os conceitos básicos para poder fazer um jogo do tipo Space invader(como fazer animação da nave se tiver vários sprites para a nave etc..),criar um menu com opções,sair,top 3 best score…
    O que eu consegui aprender ate agora foi,aumentar a tela por o tamanho que eu quero,mudar de back groud,introduzir uma sprite e mover…
    se souberes algum curso ou tutorial em Pt ajudava muito…
    desde já agradeço a sua ajuda…

  4. cicanci says:

    Você pode encontrar muito material com exemplos de tudo isso que você precisa no site do XNA Creators Club, na área de educação. Tem muitos exemplos e tutoriais, inclusive em vídeo, que você pode baixar o código fonte para estudar.

    Espero ter ajudado! Até mais!

  5. eu says:

    Hum…okok vou dar uma vista de olhos no site…e ver se aprendo xD….

  6. Bruno Alves says:

    Olá pessoal!
    Parabens pelo jogo desenvolvido, ficou Simples e Objetivo! hehe

    Gostaria de saber o que é XNA primeiramente ??? é uma linguagem ???

    Depois, quero dizer que eu e minha equipe estamos criando um jogo, onde voces podem acompanhar a produção pelo site (www.leonasfate.com.br) e queria saber como faço para divulgar esse meu jogo aquii ???

    Se alguem puder me ajudar, agradeço desde já!

    • cicanci says:

      Olá Bruno!
      XNA é um framework que você pode utilizar junto com o Visual Studio para programar jogos com C# e publicar para PC ou Xbox Live (no Brasil isso não é possível =/). Mais informações: http://creators.xna.com/en-US
      Se você quiser posso adicionar o seu site na parte de links e blogs, mas não posso divulgar o seu jogo aqui pois este é o meu portfólio.
      Abraços!

  7. [...] « e-games: meu jogo com XNA final do e-games 2009 » concurso, e-games, senac, spaceship 4042, [...]

Leave a Reply