XNA e a sigla para XNA's Not an Acronym (XNA nao e um acronimo), que vem de uma brincadeira que a Microsoft decidiu fazer, pois muitos produtos dessa utilizam de acronimos em seus nomes.O XNA e um poderoso framework para desenvolvimento de jogos para as plataformas Windows, XBOX 360, Zune e, recentemente, Windows Phone 7. Utiliza a linguagem C# para a programacao e atualmente encontra-se na versao 4.0, que e parte integrante do kit de desenvolvimento do Windows Phone 7.Estrutura de um projeto Um jogo consiste basicamente em preparar o ambiente onde o jogo ira rodar (carregar os recursos necessarios, texturas, mapas...), manter o jogo em um laco de repeticao ate que uma condicao seja alcancada, por exemplo algum jogador vencer, e finalmente descarregar os recursos utilizados no jogo. Podemos representar esta estrutura utilizando o seguinte pseudocodigo:1- Inicializar recursos graficos, dispositivos de entradas e dispositivos de audio2- Iniciar o laco de repeticao, e em cada iteracao: - Capturar entradas - Realizar calculos, por exemplo: movimentos, colisoes, I. A - Verificar se o jogo terminou (se atende o criterio de fim estabelecido) - Redesenhar os objetos na tela, gerar as respostas para acoes do jogador3- Finalizar o laco4- Liberar os recursos utilizados O XNA possui recursos que agilizam o desenvolvimento, pois nao e necessario lidar com recursos de mais baixo nivel, e possivel focar-se apenas nos detalhes referentes ao jogo, por exemplo nao e necessario preocupar-se com detalhes de mplementacao do laco de repeticao anteriormente citado, pois o XNA possui toda a estrutura basica de um jogo em uma classe chamada Game.Ao criarmos um novo projeto utilizando o template Windows Game ja teremos uma classe (que herda da classe Game) que possui todos os metodos necessarios para a estrutura basica apresentada anteriormente, sao eles:Initialize() - O ponto de partida para inicializacao do jogoLoadContent() - O carregamento dos recursos necessariosRun() - Inicio do laco de repeticao Update() - Leitura de entradas, calculos, teste para o criterio de fim Draw() - Desenhar os objetos na telaUnloadContent() - liberar os recursos utilizadosAgora vamos a uma explicacao um pouco mais detalhada dos recursos apresentados nesta classe, por padrao chamada de Game1 (seu nome pode ser alterado sem qualquer problema).No inicio da classe encontramos duas referencias para as classes GrapchisDeviceManager e SpriteBatch, onde a primeira nos da acesso a recursos da placa de video e a segunda e utilizada para desenhar textos e imagens 2D no dispositivo grafico. Abaixo encontramos o construtor que instancia a variavel graphics com uma referencia para o dispositivo padrao (nossa tela) e a definicao do diretorio onde serao armazenados os recursos (imagens, sons, texturas...) do projeto. public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; }Apos o construtor nos encontramos o metodo Initialize que e chamado logo que o jogo e iniciado, mas antes deste entrar no laco de repeticao, e o local onde podemos carregar recursos que nao estao ligados ao dispositivo grafico, por exemplo a preparacao de arquivos de audio. Apos este temos o metodo LoadContent onde sao iniciados todos