terça-feira, 16 de dezembro de 2008

3º XNA Challenge Brasil

Foram prorrogadas as inscrições para o terceiro XNA Challenge Brasil.

Agora as inscrições podem ser feitas até o dia 31 de janeiro de 2009.

Mais informações

quarta-feira, 3 de dezembro de 2008

Dúvida - Xbox Live Community Games

As principais dúvidas que surgiram entre nossos leitores nas ultimas semanas foi quais países podem vender seus jogos no Xbox Live Community Games e quando será possivel, nós, do Brasil, Uruguai e Portugal, vender nossos jogos também.

Desenvolvedores de quais países poderão vender seus jogos no Xbox Live Community Games?

Em seu lançamento, somente usuários premium do creators club dos seguintes países podiam vender seus jogos pelo Xbox Live Community Games:
  • Estados Unidos(claro! rs)
  • Canadá
  • Reino Unido
  • França
  • Itália
  • Suécia
  • Noruega
  • Dinamarca
  • Irlanda
  • Espanha
  • Netherlands

E nós do Brasil, Portugal, Uruguai...?

Prometeram ir expandindo o suporte e aos poquinhos irem possibilitando criadores de outros países a também vender seus jogos via o Community Games.

Em menos de 1 mês de seu lançamento já trouxeram essa realidade a usuários premium do creators club de mais três países:
  • Singapura
  • Australia
  • Nova Zelândia
Provavelmente, muito em breve poderemos "ganhar a vida" vendendo nossos jogos feitos com o XNA Game Studio no Xbox Live Community Games.

Concurso de Mini-Games

Foram prorrogadas as inscrições para o primeiro concurso de mini-games da revista oficial do Xbox360 no Brasil.
Agora as inscrições podem ser feitas até o dia 15 de janeiro de 2009. Alteração realizada para possibilitar a participação de diversos estudantes que entram de férias, agora, no final do ano.

Alguns dos prêmios também foram divulgados:

  • 1o lugar: Visual Studio 2008, Controller do Xbox360 sem fio, assinatura da revista Xbox360 e o livro "Beggining XNA 2.0 Game Programming - From Novice To Professional"
  • 2o lugar: Jogo do Xbox360, Webcam e o livro "Beggining XNA 2.0 Game Programming - From Novice To Professional"
  • 3o lugar: Jogo do Xbox360
Mais informações e o regulamento completo em: http://www.sharpgames.net/concursoROX/

terça-feira, 18 de novembro de 2008

Errata - Nosso Primeiro Jogo 2D - Parte 4

Algumas imagens da Parte 4 do Nosso Primeiro Jogo 2D estavam erradas mas já foram consertadas.

Gostaria de agradecer ao José Roberto e ao Gilton pelo alerta do erro que passou despercebido. Acabei consertando o meu projeto mas esquecendo de atualizar as imagens do blog.

Agora tudo já está em seu devido lugar. As imagens que encontravam-se erradas eram as img_35.jpg e img_36.jpg. Em ambas faltava a exclamação que negava a condicional, ou seja, se os aviões não estivessem no retangulo que representa a tela eles deveriam ser considerados "mortos".

Aqui abaixo também estão as imagens corrigidas:

img_35

img_36

Gostaria de pedir desculpas a todos que acompanham o blog e meus tutoriais pelo ocorrido.
Leo Camello

Concurso de Mini-Games

A revista oficial do Xbox360 no Brasil está lançando seu primeiro concurso de mini-games com o apoio da SharpGames e da Microsoft.

O objetivo do concurso é criar um mini-game com no máximo 100 linhas de código utilizando o XNA Game Studio que deve ser submetido ao site do concurso até o dia 30 de novembro de 2008.

A divulgação dos vencedores será feita na Revista Oficial do Xbox360 em janeiro de 2009.

Mais informações e o regulamento completo em http://www.sharpgames.net/concursoROX/

quarta-feira, 12 de novembro de 2008

Xbox LIVE Community Games - O que é?

Neste post farei uma breve introdução ao que é o Xbox LIVE Community Games.

Xbox LIVE Community Games

Agora, os jogos que fizermos, podem ser jogados por milhões de jogadores no Xbox LIVE e ainda podemos receber em dinheiro por isso.
A partir do dia 19 de novembro de 2008, jogos feitos com o XNA Game Studio, após serem revisados e aprovados, podem ser vendidos via Xbox LIVE.

Como isso Funciona?

Sendo um usuário Premuim do XNA Creators Club, será possível submeter qualquer jogo completo de Xbox360 que você criar no XNA Game Studio a comunidade do Creators Club para revisão. Outros usuários Premium irão avaliar seu jogo para certificar de que ele é seguro de jogar. Se tudo correr bem e seu jogo for aprovado, você poderá definir um preço para ele entre 200 e 800 pontos que as pessoas pagarão para baixar seu jogo no Xbox LIVE Marketplace.

Dessa maneira você pode receber em dinheiro até 70% da areecadação do seu próprio jogo e dependendo do sucesso dele ainda poderá aparecer em evidencia no Xbox360 e em propriedades online da Microsoft.

quinta-feira, 6 de novembro de 2008

Tutorial - Nosso Primeiro Jogo 2D - Parte 4

Neste tutorial veremos, passo a passo, como criar um jogo 2D simples. Este tutorial foi baseado nos videos Begginers Guide 2D encontrados no site creators.xna.com.

Esta é a quarta parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio. Aqui veremos como criar as aeronaves inimigas para que apareçam em posições randomicas do canto direito da tela.


Adicionando e Inicializando as Variáveis Relacionadas as Aeronaves

Agora vamos então começar a trabalhar para colocarmos os inimigos no nosso jogo. No arquivo Game1.cs, na classe Game1, abaixo de onde declaramos as variáveis previousgamepadstate e previouskeyboardstate iremos declarar mais uma série de variáveis ligadas as aeronaves inimigas. Assim como fizemos com os mísseis, os inimigos também terão um número máximo e um array, mas além disso teremos as velocidades mínima e máxima possiveis a uma aeronave inimiga, e a altura mínima e máxima onde é possível um inimigo aparecer. Teremos também uma variável que gerará um valor randomico para nós sempre que precisarmos.

Assim como fizemos com os mísseis, temos que inicializar nosso array de inimigos. Vamos então ao método LoadContent() e abaixo do for onde inicializamos nosso array de mísseis vamos instanciar nosso array de inimigos e inicializar cada posição desse array com o uso de um loop.


Atualizando as Aeronaves Inimigas


Depois de inicializar nossos inimigos vamos então ao método Update() e abaixo da chamada ao método UpdateCannonMissiles() vamos fazer outra chamada, só que agora ao método UpdateEnemyPlanes(). Como fizemos no caso dos mísseis, esse método ainda não existe e teremos que implementa-lo.

Para criar o nosso método vamos ao final do método Update() e depois da chave que termina esse método vamos implementar o nosso método UpdateEnemyPlanes(). Esse método irá "matar" as aeronaves inimigas assim que elas forem saindo da tela para que novas aeronaves possam ser desenhadas na tela.

Ainda estamos considerando apenas o caso de a aeronave inimiga "morrer" por sair da tela para redesenha-las. Assim ainda no método UpdateEnemyPlanes() utilizaremos um bloco else logo após o bloco if em que checamos se o inimigo está "vivo". Nesse bloco tornaremos o inimigo vivo de novo e faremos ele nascer em uma nova posição aleatória e com uma nova velocidade aleatória.


Desenhando e Alterando o Tamanho dos Inimigos na Tela


Agora já podemos desenhar as aeronaves inimigas na tela. Usaremos um overload do método Draw do SpriteBatch que nos possibilide alterar a escala da nossa Sprite visto que se desenhassemos a imagem original as aeronaves ficariam muito maiores que o resto dos objetos do jogo e não ficaria tão legal o visual do nosso jogo.

Se não nos esquecemos de nenhum detalhe podemos rodar nosso jogo e teremos aeronaves se movimentando da direita para a esquerda a alturas e velocidades aleatórias.


Resumo


Nesta quarta parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio vimos como criar e desenhar as aeronaves inimigas na tela em posições e com velocidades aleatórias e também mudando seu tamanho ao desenha-las.

Na quinta parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio veremos a destruição das aeronaves inimigas devido colisão dos nossos mísseis com as mesmas e também como manter e visualizar a pontuação em nosso jogo.

segunda-feira, 3 de novembro de 2008

Novidade - XNA Game Studio 3.0

Já está disponível para download a versão 3.0 do XNA Game Studio.

- XNA Game Studio 3.0

Essa nova versão traz diversas novas funcionalidades que continuam facilitando o desenvolvimento de jogos para PC(Windows), Xbox360 e agora também a possibilidade de desenvolver para o Microsoft Zune.

Outro aspecto que chama bastante atenção e que foi lançado junto a essa nova versão é a distribuição dos jogos por meio do Xbox Live Community Games no Xbox360 o que transforma em realidade a possibilidade de os usuários do Xbox Live verem, comprarem e jogarem jogos que você criou, desde que você seja um membro Premium do XNA Creators Club.

Algumas novidades bem interessantes nessa versão 3.0 do XNA Game Studio:

- Experimente antes de comprar: Agora pode-se criar um modo trial no jogo que criamos, o que possibilita aos jogadores experimentarem nosso jogo antes de realizar a compra.

- Convidar amigos: Podemos colocar nos jogos multiplayer do Xbox Live que criarmos uma opção para que os jogadores convidem, de dentro do jogo, seus amigos para jogarem juntos.

- Integração com o Visual Studio: A versão 3.0 do XNA Game Studio tem suporte ao C# 3.0, LINQ e a maioria das versões do Visual Studio 2008 o que facilita ainda mais a vida do desenvolvedor.

As principais diferenças entre a versão 2.0 e a versão 3.0 do XNA Game Studio podem ser encontradas aqui.

O XNA Game Studio 3.0 é requesito para a subimissão de jogos para o Xbox Live Community Games.

terça-feira, 28 de outubro de 2008

Tutorial - Nosso Primeiro Jogo 2D - Parte 3

Neste tutorial veremos, passo a passo, como criar um jogo 2D simples. Este tutorial foi baseado nos videos Begginers Guide 2D encontrados no site creators.xna.com.

Esta é a terceira parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio. Aqui veremos como criar e desenhar os mísseis que o canhão do nosso navio irá disparar para acertar as aeronaves inimigas. Veremos também o conceito de array, como declarar uma constante e alguns tipos de loop que a linguagem C# nos oferece.

Adicionando e Inicializando Mais Algumas Variáveis

Para a criação dos mísseis que o nosso canhão irá disparar contra as aeronaves inimigas teremos que adicionar novas variáveis a nossa classe GameObject, no arquivo GameObject.cs. Se esse arquivo não estiver aberto, dê um duplo clique nele no Solution Explorer. Uma das variáveis que iremos adicionar é do tipo Vector2 e a chamaremos de velocity, ela tem o objetivo de armazenar a velocidade do deslocamento do míssil disparado. A segunda variável que iremos adicionar será do tipo bool e a chamaremos de alive, sua função é identificar se o missil ainda está "vivo", ou seja, se ele ainda pode ser vusualizado em nossa tela.


Como fizemos com nossas outras variáveis, vamos inicializa-las no construtor da nossa classe GameObject. Logo abaixo da inicialização da nossa variável center, vamos inicializar nossas variáveis velocity e depois a nossa variável alive. Como tanto o missil como o canhão são objetos do tipo GameObject devemos ter o cuidado de inicializar as variáveis com valores "neutros" que não causem nenhum efeito indesejável no jogo e podemos muda-las mais adiante, fora da classe GameObject, pelo objeto a que pertence. Iremos inicializar a nossa variável velocity como um vetor Zero e nossa variável alive com o valor false.


Instanciando e Carregando Nossos Mísseis

Agora poderemos voltar ao nosso arquivo Game1.cs e declarar na classe Game1, uma constante do tipo int e de nome maxCannonMissiles, que indicará o número máximo de mísseis que poderão aparecer na tela ao mesmo tempo, e um array GameObject[] de nome cannonMissiles, que conterá nossos mísseis. Ao declararmos uma constante usamos antes de seu tipo a palavra reservada const que caso por engano tentemos mudar o valor dessa constante durante a codificação do nosso jogo nos proporcionará erros. O tipo GameObject[] indica um array que nada mais é do que um conjunto de elementos do tipo GameObject organizados de forma sequencial e que podem ser acessados por um indice.


Depois disso vamos até o método protected override void LoadContent() e abaixo de onde inicializamos a posição do nosso canhão vamos instanciar nosso array de mísseis. Esse array terá tamanho maxCannonMissiles. Logo abaixo inicializaremos cada missil utilizando um loop para percorrer o array do início ao fim. Para aqueles que não conhecem, o loop for(,,) funciona da seguinte forma. Fornecemos a ele um inteiro que usaremos como contador que geralmente é o i, depois ele compara o contador com uma condição, que no nosso caso o loop vai acontecer enquanto i for menor que o tamanho do nosso array, e em seguida realizamos um incremento ou decremento do contador, no nosso caso o incrementamos fazendo i++. Quando a condição se torna falsa, no nosso caso quando i for maior ou igual ao tamanho do array o loop é quebrado. Dentro do nosso for vamos inicializando cada elemento do array pelo seu indice cannonMissiles[i] sabendo que o i vai variando de 0 até o tamanho do nosso array.


Atualizando Misseis, Tratando Entradas e Disparos

Tendo instanciado e inicializado nosso array e nossos misseis podemos ir ao método protected override void Update(GameTime gameTime) e dentro dele chamaremos o método UpdateCannonMissiles() logo abaixo do trecho de código onde limitamos a rotação do nosso canhão e acima do base.Update(gameTime).


O método UpdateCannonMissiles() ainda não existe e nós iremos implementá-lo. Nele faremos a atualização da posição de nossos mísseis. Então, no final do método protected override void Update(GameTime gameTime), abaixo da chave que indica seu fim, iremos implementar nosso método. Utilizaremos o loop foreach() que percorre todos os elementos do nosso array sem necessitarmos de um contador. A diferença entre ele e o loop for(,,) é que o foreach() incondicionalmente percorre o array do início ao fim e no for(,,) podemos estabelecer uma condição de parada.


Temos que criar também o método que irá disparar nossos mísseis. Para isso necessitamos de mais duas variáveis na classe Game1 e iremos declara-las logo abaixo de onde declaramos nosso array cannonMissiles. Essas variáveis que iremos declarar são do tipo GamePadState e KeyboardState e usaremos elas para guardar o ultimo estado em que o controle do xbox360 ou o teclado se encontravam a cada quadro.


Podemos voltar ao método protected override void Update(GameTime gameTime) e logo abaixo de onde limitamos a rotação do canhão e acima do método UpdateCannonMissiles() vamos checar se o jogador pressionou o botão A do controle do xbox360 ou a barra de espaço do teclado. Para que fique mais interessante, vamos impedir que hajam disparos continuos caso o jogador mantenha pressionado qualquer um desses botões checando se o estado anterior do botão A do controle do xbox360 ou a barra de espaço era "não pressionado". Caso ele pressione qualquer um desses botões de disparo chamaremos a função FireCannonMissile() que realizará o disparo do missil. Devemos também ao final de tudo atualizar o valor das nossas variáveis de estado do controle e do teclado para que funcionem corretamente a cada quadro.


Vamos agora implementar nosso método FireCannonMissile() logo abaixo do fim do método protected override void Update(GameTime gameTime) e acima do método UpdateCannonMissiles(). Ele verifica se os misseis do nosso array ainda estão na tela, caso algum não esteja podemos disparar outo missil. Assim ele define a posição inicial do missil como sendo a posição do canhão, a rotação da imagem do míssil como sendo a mesma rotação da imagem do canhão (por isso fizemos as duas imagens no mesmo sentido), e a velocidade junto a direção que o missil será atirado.


Temos que fazer uma atualização no método UpdateCannonMissiles() para que possamos "matar" os mísseis que estiverem fora da nossa tela. Logo abaixo de onde atualizamos a posição do nosso missil no método UpdateCannonMissiles() vamos checar se o missil ainda está na tela, o que é uma tarefa bem simples por termos o nosso viewportRect.


Desenhando os Mísseis na Tela

Para finalizarmos temos que desenhar os nossos misseis na tela. Assim no método protected override void Draw(GameTime gameTime), para termos os misseis desenhados antes do canhão e dar a impressão que eles estão saindo de dentro do canhão temos também que colocar o código para desenha-los antes do código para desenhar o canhão. Então usaremos um loop para desenhar cada missil do nosso array na tela.


Se não nos esquecemos de nenhum detalhe e não cometemos nenhum erro podemos rodar nosso jogo e já ver nosso canhão atirando os misseis ao pressionarmos a barra de espaço do teclado ou o botão A do controle do xbox360.


Resumo

Nesta terceira parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio vimos como criar e desenhar os mísseis que o canhão do nosso navio irá disparar para acertar as aeronaves inimigas. Vimos o conceito de array, como declarar uma constante e alguns tipos de loop que a linguagem C# nos oferece.

Na quarta parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio veremos como criar as aeronaves inimigas para que apareçam de posições randomicas do canto direito da tela.

terça-feira, 21 de outubro de 2008

Tutorial - Nosso Primeiro Jogo 2D - Parte 2

Neste tutorial veremos, passo a passo, como criar um jogo 2D simples. Este tutorial foi baseado nos videos Begginers Guide 2D encontrados no site creators.xna.com.

Esta é a segunda parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio. Aqui veremos como criar uma nova classe para representar os outros objetos do nosso jogo. Com essa classe iremos carregar o canhão do navio no nosso projeto. Iremos também desenha-lo na tela e faze-lo girar com os comandos do teclado ou de um controle do xbox360.

Criando e Modificando a Classe GameObject

Vamos criar uma nova classe que representará os objetos do nosso jogo. Vamos clicar com o botão direito do mouse no nó que representa nosso projeto, o Belonave no Solution Explorer, clicando em Add->New Item..., selecionaremos o Template: Class na janela que aparece, daremos o Name: GameObject.cs e clicamos em Add.


Vemos que o XNA Game Studio criou para nós um arquivo praticamente vazio chamado GameObject.cs. Voltaremos então ao arquivo Game1.cs e bem no começo do arquivo temos os using. Iremos copiar todos os using de Game1.cs e coloca-los no lugar dos using que foram criados no GameObject.cs. Como cada objeto que criaremos em nosso jogo tem sua própria imagem, posição, rotação e centro, nós criaremos em nossa classe GameObject essas variáveis. A variável que representa a imagem do objeto será do tipo Texture2D e seu nome sprite, a que representa a posição do nosso objeto será do tipo Vector2 e seu nome position, assim a que representa a rotação do objeto será do tipo float e seu nome rotation e a que representa o centro da imagem é do tipo Vector2 e seu nome center.


Em seguida vamos declarar o construtor da nossa classe GameObject. O construtor é o método que chamamos ao criarmos um novo objeto. Em geral esse método inicializa tudo o que for necessário para a utilização do objeto. No caso do nosso construtor da classe GameObject, além de inicializarmos todos os seus parametros, ele irá receber uma Texture2D que será a imagem do objeto que desejamos desenhar na tela. Iniciaremos a posição como sendo zero, a rotação como sendo zero, atribuiremos a imagem que recebemos a nossa variável sprite e calcularemos o centro tendo esse as coordenadas metade da largura da imagem em X e metade da altura da imagem em Y.


Instanciando, Carregando e Desenhando o shipCannon

Agora vamos voltar ao Game1.cs. Logo abaixo de onde declaramos a backgroundTexture e o viewportRect vamos declarar nossa variável shipCannon, que será o canhão do nosso navio, e é do tipo GameObject.


Iremos inicializa-lo para podermos desenha-lo na tela do nosso jogo. No método protected override void LoadContent(), logo abaixo do Load<>() que fizemos para o backgroundTexture vamos instanciar o shipCannon como um novo GameObject que recebe um Load<>() da imagem do shipCannon e logo após isso vamos inicializar a posição do nosso canhão para posiciona-lo junto ao nosso navio desenhado no backgroundTexture.


Vamos ao método protected override void Update(GameTime gameTime) do Game1.cs, adicionaremos o código necessário para rotacionar o nosso canhão e assim podermos mirar nos nossos inimigos. Como vimos no nosso primeiro tutorial o método Update(GameTime gameTime) é o responsável por atualizar nosso jogo a cada quadro, é nele que codificamos todas as alterações de lógica que queremos fazer em cada objeto do jogo. Vamos adicionar primeiramente o código pare entrada do controle do xbox360 e após o código para entrada do teclado. Esses códigos farão nosso canhão rodar tendo seu centro como eixo. No caso do controle do xbox360, a rotação ocorre de acordo com a variação da alavanca para a esquerda e para a direita. No caso do teclado ocorre quando as teclas da direita ou da esquerda forem pressionadas. O código #if !xbox e #endif faz com que o trecho de código entre eles seja compilado em caso de atender a condição que no caso é ser diferente de xbox. O método Clamp() do MathHelper serve para limitarmos a rotação do nosso canhão.


Para desenharmos o canhão de nosso navio na tela, vamos ao método protected override void Draw(GameTime gameTime) mas não usaremos o mesmo Draw() do spriteBatch que usamos para o backgroundTexture, usaremos um overload do método que aceita outros argumentos. A versão que usaremos nesse caso recebe a imagem, a posição, o retangulo que é um argumento opicional, a cor, a rotação, a origem da rotação, a escala, efeitos e a profundidade.


Se não nos esquecemos de nada e nem cometemos nenhum erro podemos rodar nossa aplicação. Veremos o nosso navio já com seu canhão e esse atende as entradas do teclado e do controle do xbox360.


Resumo

Nesta a segunda parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio vimos como criar uma nova classe para representar os outros objetos do nosso jogo. Instanciamos essa classe e carregamos o canhão do navio no nosso projeto. Também o desenhamos na tela e o fizemos girar com os comandos do teclado ou de um controle do xbox360.

Na terceira parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio veremos como criar e desenhar os mísseis que o canhão do nosso navio irá disparar para acertar as aeronaves inimigas. Veremos também o conceito de array, como declarar uma constante e alguns tipos de loop que a linguagem C# nos oferece.


sexta-feira, 17 de outubro de 2008

XNA Challenge Brasil - O que é?

Neste post falarei um pouquinho sobre o XNA Challenge Brasil.

O XNA Challenge Brasil

É o maior concurso brasileiro de desenvolvimento de jogos para PCs e XBOXs utilizando a plataforma XNA Game Studio. Organizado pela Microsoft, incentiva estudantes, professores e entusiastas a criarem jogos com o XNA Game Studio abordando determinados temas.


Atualmente este concurso encontra-se em sua terceira edição e as inscrições para esta edição estão abertas.

- 3° XNA Challenge Brasil

A temática desse ano é "Resolver os problemas mais difíceis do Mundo" que são baseados nos desafios identificados pela ONU:
  • Pobreza
  • Saúde Materna
  • Desenvolvimento Colaborativo
  • Educação
  • Igualdade entre Gêneros
  • Aids e outras Enfermidades
  • Mortalidade Infantil
  • Sustentabilidade
Ao participar do XNA Challenge Brasil, a equipe também poderá participar do Imagine Cup 2009 na categoria Desenvolvimento de Jogos, com o mesmo projeto pois o tema é o mesmo e os critérios de classificação são similares.

O Concurso


O XNA Challenge Brasil é dividido em três etapas.

A primeira etapa é classificatória onde 10 equipes serão selecionadas para as semifinais. O prazo de submissão do jogo será até o dia 15/12/08 as 23:59.

A segunda etapa é a fase semi final onde 5 equipes serão selecionadas para a final. Essas equipes devem submeter um resumo da implementação do jogo, demo do jogo no formato, video do jogo e o código-fonte do jogo até o dia 26/01/09 as 23:59.

A terceira etapa é a fase final do concurso. Nela, as 5 equipes finalistas deverão apresentar seus jogos pessoalmente para a comissão julgadora. Deverão também enviar no dia da apresentação final um resumo descritivo da implementação, o jogo final e o codigo-fonte do mesmo, alé de uma apresentação em powerpoint.

A Premiação


Haverá premiação para os três primeiros lugares e para um escolhido do juri popular. O escolhido pelo juri popular será escolhido pela platéia no dia da apresentação dos cinco finalistas e receberá um kit com um controle do Xbox360 sem fio e um jogo Microsoft para PC para cada participante da equipe. O terceiro lugar recebe um kit contendo Lifechat VX 3000 e um jogo Microsoft para PC para cada participante da equipe. O segundo lugar da competição recebe um kit contendo mouse SideWinder e Lifechat VX 3000 para cada integrante da da equipe. O prêmio para a equipe que vencer o XNA Game Challenge é uma viagem internacional para um representante da equipe conhecer a sede da Microsoft em Seattle e um Xbox para cada outro integrante.

terça-feira, 14 de outubro de 2008

Tutorial - Nosso Primeiro Jogo 2D - Parte 1

Neste tutorial veremos, passo a passo, como criar um jogo 2D simples. Este tutorial foi baseado nos videos Begginers Guide 2D encontrados no site creators.xna.com.

Esta é a primeira parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio. Aqui vamos rever como criar um novo projeto e como adicionar imagens ao nosso projeto. Vamos ver também como carregar e desenhar na tela uma imagem de fundo no nosso jogo.

No nosso jogo teremos basicamente um navio, seus mísseis e aviões. O objetivo do jogo é, controlando o canhão do navio, conseguir acertar o maior número de aviões que passarem voando na tela.

Criando um Novo Projeto

Primeiramente vamos começar criando um novo projeto. No Visual C# 2005 Express Edition vamos no menu File->New Project..., ou apenas Ctrl+Shift+N. Selecionaremos como Project Type: XNA Game Studio 2.0 e como Template: Windows Game. O Name do projeto eu chamei de Belonave e procurando na Wikipédia temos a seguinte definição: "Belonave é a designação de qualquer tipo de embarcação, fluvial ou marítima, para utilização em combate.", o que tem muito a ver com nosso jogo. Também selecionaremos o Location que acharmos melhor para armazenarmos nosso projeto em nosso PC. Em Solution escolheremos a opção Create a new Solution, deixaremos a opção Create directory for solution marcada e clicaremos em OK.


Salvando as Imagens e Adicionando ao Projeto

Agora que criamos nosso novo projeto, já podemos ver no Solution Explorer os arquivos que o compõem. Ainda não modificaremos nenhum arquivo. Antes vamos baixar e adicionar ao projeto as imagens que usaremos em nosso jogo. Clique em cada imagem abaixo e, com o botão direito do mouse, salve elas em seu PC com os seguintes nomes:

backgroundTexture:

shipCannon:

cannonMissile:

enemyPlane:



Para organizarmos melhor nossas imagens, após telas salvo em nosso PC, vamos voltar ao Visual C# 2005 Express Edition e vamos clicar com o botão direito do mouse em Content, no Solution Explorer, Add->New Folder e nomearems essa nova pasta como Sprites. Mais uma vez na Wikipédia encontramos a seguinte definição: "Sprite é um objeto gráfico bi ou tridimensional que se move numa tela sem deixar traços de sua passagem.". Nessa pasta ficarão armazenadas todas as imagens que usaremos em nosso projeto.
Clicando com o botão direito do mouse na pasta recém criada, no Solution Explorer dentro de Content, Add->Existing Item e vamos ao local onde salvamos nossas imagens. Selecionaremos e adicionaremos cada uma delas.


Carregando e Desenhando a Imagem de Fundo

Depois que já tivermos todas as imagens adicionadas ao projeto na pasta Sprites vamos começar a modificar nosso código. Caso ainda não esteja aberto, abriremos o arquivo Game1.cs clicando duas vezes nele no Solution Explorer. Com o arquivo aberto, procuraremos a classe Game1 dentro dele. Abaixo de GraphicsDeviceManager graphics; iremos declarar a variável que será responsável pela imagem de fundo do nosso jogo. Essa variável será do tipo Texture2D e se chamará backgroundTexture. Abaixo de nossa variável backgroundTexture vamos declarar outra variável, que será responsável por definir a área máxima que um objeto poderá ter. Esta será do tipo Rectangle e a chamaremos de viewportRect. Essas variáveis que acabamos de declarar ficaram acima do SpriteBatch spriteBatch; que é uma classe do XNA framework que utilizaremos para desenhar todas as imagens que usamos nesse tutorial.


Para carregarmos nossa imagem de fundo no nosso jogo, vamos ao método protected override void LoadContent() que como vimos em nosso primeiro tutorial, é um método que é chamado quando o jogo inicia e ele carrega todas as imagens que precisamos durante o jogo. Logo abaixo de spriteBatch = new SpriteBatch(GraphicsDevice); vamos carregar nossa imagem de fundo na nossa variável backgroundTexture. Para isso vamos usar o método Load<>() da classe Content Manager.


Ainda no método protected override void LoadContent(), abaixo da atribuição que acabamos de fazer para carregar nossa imagem de fundo, vamos instanciar nosso viewportRect atribuindo a ele as nossas medidas da tela começando em (0, 0) e termonando em (width, height) da Viewport.


Agora que a carregamos, desenharemos a nossa imagem de fundo na tela. Para isso usaremos a classe SpriteBatch spriteBatch; e nosso Rectangle viewportRect; que acabamos de inicializar. Vamos então ao método protected override void Draw(GameTime gameTime). Como vimos no nosso primeiro tutorial o método Draw() é o responsável por redesenhar a tela a cada quadro. É nele que a tela é limpa e que desenhamos cada objeto que desejamos que apareça no nosso jogo. Abaixo do graphics.GraphicsDevice.Clear(Color.CornflowerBlue); vamos acrescentar o bloco que nos permite desenhar na tela.
Iniciamos com o método Begin() do spriteBatch, desenhamos com o método Draw() do spriteBatch e ao terminarmos finalizamos com o método End() do spriteBatch. No método Begin() podemos passar como parametro o SpriteBlendMode.AlphaBlend que nos permite desenhar imagens com transparencia. No método Draw() iremos passar como parametros nossa textura, um retangulo que especifica onde a sprite será desenhada, e uma cor que por default estamos usando o branco. O método End() não recebe parametros.


Se não tivermos esquecido de nada, podemos rodar nossa aplicação sem erros e conseguiremos ver a janela do nosso jogo já com a nossa imagem de fundo no lugar.


Resumo

Nesta primeira parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio revimos como criar um novo projeto e como adicionar imagens ao nosso projeto. Vimos como carregar e desenhar na tela uma imagem de fundo no nosso jogo.

Na segunda parte do nosso tutorial de como criar um jogo 2D com o XNA Game Studio veremos como criar uma nova classe para representar os outros objetos do nosso jogo. Com essa classe iremos carregar o canhão do navio no nosso projeto. Iremos também desenha-lo na tela e faze-lo girar com os comandos do teclado ou de um controle do xbox360.


sábado, 11 de outubro de 2008

Imagine Cup - O que é?

Neste post falarei um pouquinho de uma das maiores competições de desenvolvimento de jogos com o XNA Game Studio.

A Imagine Cup

É uma competição anual patrocinada e organizada pela Microsoft. Ela une jovens interessados em tecnologia ao redor do mundo com o objetivo de resolver alguns desafios. Ela tem diversas categorias e uma delas é a de desenvolvimento de jogos.

- Imagine Cup Website

Essa competição foi iniciada em 2002 e tem aumentado rapidamente no número de competidores. Em 2008 houveram 210.000 inscritos de mais de 100 países para competir em uma das nove categorias da competição.



A Categoria Desenvolvimento de Jogos

Nessa categoria a equipe competidora deve inventar um jogo usando o XNA Game Studio e o Visual Studio. A cada ano mudam os temas que os jogos devem ilustrar. Para 2009 o tema é "Imagine um mundo onde a tecnologia ajude a resolver os problemas mais dificeis que enfrentamos hoje."

Em 2008 o tema foi Sustentabilidade Ambiental e a equipe vencedora foi brasileira. A equipe Mother Gaia Studio venceu a final do Imagine Cup que ocorreu em Paris com seu jogo City Rain.


City Rain é um jogo de pixel art 2D isométrico que mistura um puzzle criativo com um simulador de planejamento urbano focado na ecologia e na sustentabilidade ambiental. No jogo você é o prefeito de uma cidade que deve decidir qual é a melhor maneira de construir uma cidade lucrativa e também ambientalmente sustentavel.

A Competição

O Imagine Cup acontece em três etapas sendo a primeira qualificatória, a segunda as semi finais e a terceira as finais. Em 2009 as finais ocorrerão no Egito. Na primeira etapa as equipes criam e enviam o material de seu jogo que deve consistir basicamente em um demo jogável com pelo menos uma fase implementada que consiga passar a jogabilidade do jogo, a descrição do jogo e as instruções. Na segunda etapa a equipe deve submeter o jogo completo e um sumário do jogo. E na terceira etapa cada equipe terá 30 minutos para apresentar seu jogo a uma banca que irá julga-lo.


A Premiação

Os premios para os semifinalistas é um Premium Membership de 12 meses no Creators Club para cada integrante da equipe. Caso a sua equipe vá para a final ela ganha uma viagem para a cidade onde será realizada a final incluindo passagens, estadia e alimentação. A equipe que vencer a final ainda leva 25 mil dolares para serem divididos igualmente entre os integrantes da equipe, e um pacote com livros e um voucher para Certificação da Microsoft. A equipe na segunda posição recebe 10 mil dolares e a que fica em terceiro 5 mil dlares.

Eu já me empolguei de participar, e você?