aula11_xna

Download Aula11_XNA

If you can't read please download the document

Upload: cristiano-marcal-toniolo

Post on 14-Dec-2015

212 views

Category:

Documents


0 download

DESCRIPTION

Programação para jogos com a plataforma .Net

TRANSCRIPT

  • Curso: Desenvolvendo Jogos 2d Com C# E Microsoft X NA

    Conteudista: Andr Luiz Brazil

    TORNANDO A ESPAONAVE INIMIGA MAIS INTELIGENTE META

    Tornar a espaonave inimiga mais gil e inteligente. OBJETIVOS

    Ao final da aula, voc deve ser capaz de:

    1. Fazer a espaonave inimiga tentar escapar dos tiros di sparados pelo jogador; 2. Fazer a espaonave inimiga atirar na nave do jogador ; 3. Fazer a espaonave inimiga se aproximar da nave do j ogador.

    PR-REQUISITOS

    1. Conhecer a ferramenta XNA Game Studio, conceito abordado na aula 2;

    2. Possuir um computador com as ferramentas Visual C# e XNA Game Studio instaladas, conforme explicado na aula 3;

    3. Ter o seu projeto de jogo atualizado conforme o contedo da aula 9, que inclui a a verificao de colises entre os tiros disparados e a es paonave inimiga.

  • Introduo

    Na aula anterior aprendemos a programar efeitos duradouros dentro do jogo, tais

    como exploses. Acrescentamos o efeito de exploso quando uma espaonave inimiga

    era acertada pelo tiro disparado pela nave do jogador.

    Agora vamos trazer um pouco mais de inteligncia ao jogo. Aprenderemos como

    programar algumas tticas para a espaonave inimiga se tornar mais desafiadora.

    Figura 11.1

    Fonte: http://www.carteret.edu/IntranetHome/Admissions/images/thinking.jpg (Jefferson, favor redesenhar)

    Caixa de nfase

    Inteligncia Artificial a programao de aes automticas

    a serem tomadas pelos objetos do jogo de acordo com os

    acontecimentos ocorridos durante o jogo.

    Fim da Caixa de nfase

    Como podemos tornar a espaonave inimiga mais intelig ente?

    Precisamos programar algumas aes automticas a serem tomadas pela

    espaonave inimiga, com base nas aes que o jogador est tomando durante o jogo.

    Quais aes automticas podem tornar a espaonave inimig a mais inteligente?

    Se esquivar dos tiros disparados pelo jogador;

    Atirar na espaonave do jogador;

    Se aproximar da espaonave do jogador.

    O que inteligncia artificial?

  • Escapando dos tiros

    Vamos programar a espaonave inimiga para tentar se es quivar dos tiros

    disparados pelo jogador.

    Passo 1: Adicione o mtodo Proximo classe Espaonave, para verificar se um

    objeto est prximo da espaonave. Este mtodo muito importante e ser a base para

    todos os outros testes que iremos fazer.

    // Testa a proximidade em relao a um objeto public bool Proximo( int p_proximidade, int p_posicaox_objeto, int

    p_posicaoy_objeto) { // Testando se o objeto est prximo da espaonave if (_posicaox + _textura.Width + p_proximidade > p_po sicaox_objeto && _posicaox < p_posicaox_objeto + p_prox imidade && _posicaoy + _textura.Height + p_proxim idade > p_posicaoy_objeto && _posicaoy < p_posicaoy_objeto + p_prox imidade) { return true ; } else return false ; }

    O teste para verificar se o objeto est prximo da espaonave bastante

    semelhante ao teste de coliso, apenas inclui mais um valor de proximidade para verificar

    quando o objeto est chegando mais perto da espaonave.

    Passo 2: Acrescente um mtodo Escapar classe Espaconave para fazer com

    que ela se movimente na direo oposta aos tiros disparad os no jogo quando estes se

    aproximarem dela

    // Fugir de um tiro public void Escapar( int p_posicaox_objeto, int p_posicaoy_objeto, int

    p_posicaox_maxima, int p_posicaoy_maxima) { // Testando se o objeto est prximo da espaonave if ( Proximo(50, p_posicaox_objeto, p_posicaoy_objeto ) ) { // Tiro abaixo e esquerda - mover para cima e dir eita if (p_posicaox_objeto >= _posicaox && p_posicaoy_obje to >

    _posicaoy) { Mover(1, p_posicaox_maxima, p_p osicaoy_maxima); Mover(4, p_posicaox_maxima, p_p osicaoy_maxima); } // Tiro abaixo e direita - mover para cima e esqu erda if (p_posicaox_objeto < _posicaox && p_posicaoy_objet o >

    _posicaoy) { Mover(1, p_posicaox_maxima, p_p osicaoy_maxima);

  • Mover(2, p_posicaox_maxima, p_p osicaoy_maxima); } } }

    Repare que o mtodo Escapar recebe quatro parmetros: as posies x e y do

    objeto do qual a espaonave est tentando escapar e as posies-limite x e y da tela.

    Observe que o movimento da espaonave sempre na dire o contrria posio

    atual do objeto em relao espaonave, ou seja, se o objeto est abaixo e esquerda

    da espaonave, por exemplo, esta se movimentar para cima e para a direita.

    Passo 3: Acrescente ao mtodo de atualizao do jogo ( Update ) uma instruo

    para chamar o mtodo Escapar da espaonave inimiga. O melhor local para fazer isso

    logo aps a movimentao de cada tiro. Veja como ficou:

    // Movendo os tiros do jogo foreach ( Tiro oTiro in TirosDisparados.GetRange(0,TirosDisparados.Count)) { oTiro.Mover(); // Inimigo foge dos tiros NaveInimiga.Escapar(oTiro.PosicaoX(),

    oTiro.PosicaoY(), this .Window.ClientBounds.Width, this .Window.ClientBounds.Height);

    Atividade Prtica 1 Atende ao Objetivo 1

    Seguindo os trs passos descritos anteriormente, abra o seu projeto de jogo na

    ferramenta Visual C# e programe o mtodo Escapar da classe espaonave para fazer a

    espaonave inimiga tentar escapar dos tiros disparados pela nave do jogador.

    Fim da Atividade Prtica 1

    Atirando contra o jogador

    Vamos agora programar a espaonave inimiga para atacar a espaonave do

    jogador atirando contra ela.

    Passo 1: Acrescente um mtodo Atacar classe Espaconave para fazer com que

    ela se decida se ir atacar caso algum objeto esteja se aproximando dela.

    // Atacar um objeto inimigo public bool Atacar( int p_posicaox_objeto, int p_posicaoy_objeto) { if (Proximo(200, p_posicaox_objeto, p_posicaoy_objeto )) return true ; else

  • return false ; }

    Repare que o mtodo Atacar apenas uma chamada ao mtodo Proximo com o

    valor 200, ou seja, apenas decide se a espaonave deve o u no atacar com base na

    proximidade do objeto inimigo em relao espaonave .

    Passo 2: Ajuste o mtodo Atirar da classe Espaonave para que receba um novo

    parmetro, que a direo do tiro.

    public void Atirar( int p_direcao_tiro , GraphicsDevice p_dispositivo_grafico, string p_local_textura_tiro, List p_lista_tiros)

    { Tiro oTiro; // Cria um tiro

    oTiro = new Tiro (_potencia_tiro, p_direcao_tiro , _velocidade_tiro, _posicaox, _posicaoy);

    // Carrega a textura do tiro oTiro.CarregarTextura(p_dispositivo_gra fico, p_local_textura_tiro); // Ajusta a posio inicial do tiro oTiro.PosicaoX(oTiro.PosicaoX() + (_tex tura.Width /2)); if (p_direcao_tiro == 3) // Tiro para baixo { oTiro.PosicaoY(oTiro.PosicaoY() +

    _textura.Height); } // Acrescenta o tiro na lista de tiros do jogo p_lista_tiros.Add(oTiro); }

    Observe que foi acrescentado tambm um ajuste para a posio inicial y do tiro

    caso a direo do tiro seja para baixo (direo 3). Ist o foi feito para que o tiro saia abaixo

    da textura da espaonave inimiga e no por dentro dela .

    Passo 3: Acrescente ao mtodo de atualizao do jogo ( Update ) uma instruo

    para chamar o mtodo Atacar da espaonave inimiga. O melhor local para fazer isso

    logo aps a movimentao da espaonave do jogador. Veja como ficou:

    if (teclado.IsKeyUp( Keys .Space) && apertou_tiro) { apertou_tiro = false ; } // Atirando contra o jogador if (NaveInimiga.Atacar(NaveJogador.PosicaoX(),

    NaveJogador.PosicaoY()))

  • { NaveInimiga.Atirar(3,graphics.GraphicsDev ice,

    "../../../Content/Imagens/tiro.png" , TirosDisparados);

    }

    Atividade Prtica 2 Atende ao Objetivo 2

    Seguindo os trs passos descritos anteriormente, abra o seu projeto de jogo na

    ferramenta Visual C# e programe o mtodo Atacar da classe espaonave para fazer a

    espaonave inimiga tentar atirar contra a nave do jogad or.

    Fim da Atividade Prtica 1

    Se aproximando do jogador

    Vamos agora programar a espaonave inimiga para se ap roximar da espaonave

    do jogador, indo na sua direo quando esta chega per to.

    Passo 1: Acrescente um mtodo Aproximar classe Espaconave para fazer com

    que ela se movimente na direo da nave do jogador qu ando esta ficar prxima dela.

    // Se aproximar do objeto public void Aproximar( int p_posicaox_objeto, int p_posicaoy_objeto, int

    p_posicaox_maxima, int p_posicaoy_maxima) { // Testando se o objeto est longe da espaonave if (Proximo(250, p_posicaox_objeto, p_posicaoy_objeto )) { // Objeto abaixo e esquerda - mover para baixo e esquerda if (p_posicaox_objeto >= _posicaox && p_posicaoy_obje to > _posicaoy) { Mover(3, p_posicaox_maxima, p_p osicaoy_maxima); Mover(2, p_posicaox_maxima, p_p osicaoy_maxima); } // Objeto abaixo e direita - mover baixo e direit a if (p_posicaox_objeto < _posicaox && p_posicaoy_objet o > _posicaoy) { Mover(3, p_posicaox_maxima, p_p osicaoy_maxima); Mover(4, p_posicaox_maxima, p_p osicaoy_maxima); } } }

    Repare que o mtodo Aproximar bastante semelhante ao mtodo Escapar ,

    sendo que a espaonave, neste caso, se movimenta na mesma d ireo que o objeto, indo

    de encontro a ele quando este se aproxima.

  • Passo 2: Acrescente ao mtodo de atualizao do jogo ( Update ) uma instruo

    para chamar o mtodo Aproximar da espaonave inimiga. O melhor local para fazer isso

    logo aps a movimentao da espaonave do jogador. Vej a como ficou:

    if (teclado.IsKeyUp( Keys .Space) && apertou_tiro) { apertou_tiro = false ; } // Aproximando o inimigo do jogador NaveInimiga.Aproximar(NaveJogador.PosicaoX(),

    NaveJogador.PosicaoY(), this .Window.ClientBounds.Width, this .Window.ClientBounds.Height);

    // Atirando contra o jogador if (NaveInimiga.Atacar(NaveJogador.PosicaoX(),NaveJog ador.PosicaoY())) { NaveInimiga.Atirar(3,graphics.GraphicsDevice,

    "../../../Content/Imagens/tiro.png" , TirosDisparados); }

    Atividade Prtica 3 Atende ao Objetivo 3

    Seguindo os dois passos descritos anteriormente, abra o seu projeto de jogo na

    ferramenta Visual C# e programe o mtodo Aproximar da classe espaonave para fazer

    a espaonave inimiga agir na ofensiva, se aproximando da nave do jogador quando esta

    chega perto dela.

    Fim da Atividade Prtica 3

    Atividade Prtica 4 Atende ao Objetivo 1

    Existe uma pequena falha no cdigo do jogo. Repare qu e a espaonave inimiga

    tenta escapar dos seus prprios tiros. Ajuste o cdigo do jo go de forma que a espaonave

    inimiga tente escapar apenas dos tiros disparados pela espaonave do jogador.

    Dica: Ser necessrio criar na classe Tiro um atributo para indicar quem disparou o

    tiro.

    Fim da Atividade Prtica 4

    CAIXA DE FRUM Informao sobre Frum

  • ! "#$ %##!()

    *+,-./*0/,-123+

    CAIXA DE ATIVIDADE Informao sobre Atividade on-line

    4445 %##!() ! " *+./*0/,-/6*7*,/,-

    Resumo

    Inteligncia Artificial a programao de aes automticas a serem tomadas

    pelos objetos do jogo de acordo com os acontecimentos ocorridos durante o jogo.

    Para tornar a espaonave inimiga mais inteligente, p odemos programar as

    seguintes aes automticas com base nas aes que o jogador est tomando

    durante o jogo:

    o Se esquivar dos tiros disparados pelo jogador;

    o Atirar na espaonave do jogador;

    o Se aproximar da espaonave do jogador.

    O mtodo mais importante a ser criado na classe Espaonave o mtodo

    Proximo . Ele serve para verificar se um objeto est prximo da espaonave. Este

    mtodo muito importante e ser a base para todos os outros testes que iremos

    fazer. Este mtodo bastante semelhante ao mtodo ColisaoSimples do jogo.

    Tambm precisaremos criar os mtodos Escapar, Atacar e Aproximar , para que

    a espaonave tome as aes descritas acima.

    o No mtodo Escapar , a espaonave se movimenta na direo contrria do

    objeto em questo;

    o No mtodo Atacar , a espaonave atira contra o objeto em questo, tentan do

    acerta-lo;

  • 5

    o No mtodo Aproximar , a espaonave se move na mesma direo que o

    objeto em questo.

    Fim do resumo