segunda-feira, 26 de setembro de 2011

Introdução ao uso de Estados em UnrealScript

Uma das grandes vantagens do UnrealScript em relação a outras linguagens é que ele já fornece suporte ao uso de Estados na própria linguagem. O conceito de Máquina de Estados Finitos (Finite State Machine) é essencial para a programação de jogos.

Vamos imaginar um exemplo bem simples. Temos um Inimigo no jogo que pode estar em um desses três estados: PERSEGUINDO, FUGINDO e PASSEANDO. As ações do Inimigo serão diretamente influenciadas pelo seu Estado atual, ou seja, se ele estiver PERSEGUINDO, deve se mover em direção ao jogador, se estiver FUGINDO deve se afastar do jogador, se estiver PASSEANDO irá se mover de forma aleatória.

Neste exemplo podemos definir algumas Transições entre os Estados da seguinte forma:
  • O Inimigo começa o jogo no estado PASSEANDO;
  • Se o Inimigo estiver no estado PASSEANDO e o jogador chegar perto do Inimigo, ele passa para o estado PERSEGUINDO;
  • Se o jogador atirar no inimigo ele passa para o estado FUGINDO;
  • Se Inimigo estiver no estado FUGINDO e o jogador está longe e não está atirando então passa para o estado PASSEANDO;
O pseudocódigo abaixo mostra como são definidos Estados em UnrealScript. Em cada estado foi definida uma versão diferente de um função chamada "moveIA()". Quando essa função for chamada a partir de um objeto do tipo Inimigo a versão que será executada dependerá do Estado atual deste objeto.
class Inimigo extends Actor;

//A palavra "auto" define o Estado inicial
auto state Passeando
{
  function moveIA(float DeltaTime)
  {
    //move em direção aleatória
    //Se jogador estiver próximo:
    //  GotoState('Perseguindo');
  }
} 
state Perseguindo
{
  function moveIA(float DeltaTime)
  {
    //move em direção ao jogador
  }
}
state Fugindo
{
  function moveIA(float DeltaTime)
  {
    //move em direção oposta ao jogador
  }
}

Para mais informações sobre Estados:
UnrealScript States

Nenhum comentário:

Postar um comentário