Inteligência Artificial em Jogos de Java ME MicroAI Engine.
Transcript of Inteligência Artificial em Jogos de Java ME MicroAI Engine.
Inteligência Artificial em Jogos de Java ME
MicroAI EngineMicroAI Engine
JavaME MicroAI
Palestrantes
• Marivaldo Cabral – Procwork, Analista Programador Java
• Reinaldo Ramos– Instrutor Apha Channel,
• Desenvolvimento de Jogos usando Game Studio
JavaME MicroAI
Conteúdo
• Conhecendo o micro ambiente JavaME;
• Arquitetura da MicroAI Engine;
• Detalhes dos principais comportamentos;
• Demonstrar sua utilização;
JavaME MicroAI
Conteúdo
• Conhecendo o micro ambiente JavaME;
• Arquitetura da MicroAI Engine;
• Detalhes dos principais comportamentos;
• Demonstrar sua utilização;
JavaME MicroAI
Conhecendo o micro ambiente JavaME
• Introdução de Configuração;– CDC: Configuração de Dispositivo Conectado
• 512 kilobytes para executar o Java;• 256 kilobytes para alocação em tempo de execução;
– CLDC: Configuração de Dispositivo Conectado Limitado;
• 128 kilobytes para executar o Java;• 32 kilobytes para alocação em tempo de execução;
JavaME MicroAI
Conhecendo o micro ambiente JavaME
• Como lidar com a ampla variedade de aparelhos:– Por exemplo, existem aparelhos que tem mais
recurso que outro;
• Conceito de perfil– Trata desta grande variações de recursos;– Flexibilidade à medida que a tecnologia muda;
JavaME MicroAI
Conhecendo o micro ambiente JavaME
• Maquinas Virtuais Java esta diretamente ligada as configurações:
– CDC - Tem as mesmas especificações para JavaSE;
– CLDC – Existe a implementação de referencia da Sun chamada de KVM:
• 40 a 80 kilobytes de memória;• 20 a 40 kilobytes para alocação;• Pode ser executada em processadores de 16 bits com 25 MHz
JavaME MicroAI
Conhecendo o micro ambiente JavaME
• Arquitetura Genérica
Sistema Operacional HospedeiroSistema Operacional Hospedeiro
Máquina Virtual JavaMáquina Virtual Java
ConfiguraçãoConfiguração
PerfilPerfil
JavaME MicroAI
Conteúdo
• Conhecendo o micro ambiente JavaME;
• Arquitetura da MicroAI Engine;
• Detalhes dos principais comportamentos;
• Demonstrar sua utilização;
JavaME MicroAI
Arquitetura da MicroAI Engine
• Motivação – Facilitar a criação de agentes nos jogos;
– Implementar comportamentos que possam ser reutilizados, como, por exemplo:
• Busca, Perseguição, Seguir caminho, etc...
• Projeto Referência– Craing Reynolds engenheiro da SCE
• Criador do Projeto OpenSteer (opensteer.sourceforge.net)
JavaME MicroAI
Arquitetura da MicroAI Engine<<interface>>
Behaviors
+seek(target : Vector2D) : Vector2D
+flee(target : Vector2D) : Vector2D
+arrive(target : Vector2D) : Vector2D
+pursuit(evader : BaseEntity) : Vector2D
+followPath(path : Path) : Vector2D
+evade(pursuer : BaseEntity) : Vector2D
<<interface>>
BaseEntity
+getPosition() : Vector2D
+getHeading() : Vector2D
+getVelocity() : Vector2D
AbstractBehaviors
-entity: BaseEnity
+AbstractBehaviors(entity : BaseEntity)
+calculate() : Vector2D
-behaviorType : int
#path : Path
+calculate() : Vector2D
SteeringBehaviors
Path
-pointList: Vector
-currentPoint: int
-looped: boolean
+Path(pointList: Vector)
JavaME MicroAI
Arquitetura da MicroAI Engine
• Utilização de engines em celular– Pontos fortes
• Aumento da produtividade;• Reuso de arquitetura;
– Pontos fracos• Aumento do consumo de memória;• Incompatibilidade entre aparelhos;
JavaME MicroAI
Arquitetura da MicroAI Engine
• Simulação ponto flutuante;
• Biblioteca MathFP– Representação através de inteiro;– Conversões:
• int Math.toFP(String)• int Math.toInt(int)
3 2 0 3 Ex: 32.03
Parte Inteira
Parte Flutuante
Inteiro = 4 bytes
JavaME MicroAI
Conteúdo
• Conhecendo o micro ambiente JavaME;
• Arquitetura da MicroAI Engine;
• Detalhes dos principais comportamentos;
• Demonstrar sua utilização;
JavaME MicroAI
Detalhes dos principais comportamentos
• Agente autônomo divido em três partes:– Selecionar ação;
• Definir qual comportamento;
– Direção (Steering)• Camada responsável por definir a trajetória;
– Locomoção• Tipo de agente e mecanismo de movimentação;
JavaME MicroAI
Detalhes dos principais comportamentos
• Comportamentos implementados:– Seek;– Flee;– Arrive;– Pursuit;– Evade;– Path Following;
JavaME MicroAI
Detalhes dos principais comportamentos
• Seek (Busca):– Base para maioria dos outros comportamentos
V
Velocidade Corrente
Velocidade Desejada
W
VD = W.pos – V.pos
VD = VD – V.vel
VD = W.pos – V.pos
VD = VD – V.vel
JavaME MicroAI
Detalhes dos principais comportamentos
• Flee (Fugir)– O oposto da busca
VD = V.pos - W.pos
VD = VD – V.vel
VD = V.pos - W.pos
VD = VD – V.velV
Velocidade Corrente
Velocidade Desejada
W
JavaME MicroAI
Detalhes dos principais comportamentos
• Arrive (Chegar)– Produz uma “desaceleração” sobre o alvo;
V
Velocidade Corrente
Velocidade Desejada
W
Enum{slow=3, normal=2, fast=1}Alvo = W.pos – V.posDist = Alvo.Length();
Se Dist > 0
Vel = Dist / (Enum * 0.3) Vel = min(Vel, V.maxVel) VD = Alvo * Vel / Dist VD = VD – V.velSenão VD = 0
Enum{slow=3, normal=2, fast=1}Alvo = W.pos – V.posDist = Alvo.Length();
Se Dist > 0
Vel = Dist / (Enum * 0.3) Vel = min(Vel, V.maxVel) VD = Alvo * Vel / Dist VD = VD – V.velSenão VD = 0
JavaME MicroAI
Detalhes dos principais comportamentos
• Pursuit (Perseguição)– Usado para interceptar o alvo;
V
Ponto de interceptação
W
Alvo
Velocidade
Direção
Desejada
JavaME MicroAI
• Pursuit (Perseguição) continuação
• Interceptação:– Proporcional a distância entre agente e o alvo;– Inversamente proporcional a soma das velocidades;
Alvo = W.pos – V.posPosRelativa = dot(V.Face, W.Face)
Se PosRelativa < -0.95 //(20 graus) VD = Seek(W)Senão Interceptação = Len(Alvo) / (V.MaxVel + W.vel) VD = Seek(W.pos + W.vel * Interceptação)
Alvo = W.pos – V.posPosRelativa = dot(V.Face, W.Face)
Se PosRelativa < -0.95 //(20 graus) VD = Seek(W)Senão Interceptação = Len(Alvo) / (V.MaxVel + W.vel) VD = Seek(W.pos + W.vel * Interceptação)
Detalhes dos principais comportamentos
JavaME MicroAI
Detalhes dos principais comportamentos
• Evade– Fuga com o estimativa de posição futura;
Alvo = W.pos – V.posPosicaoFutura = Len(Alvo) / (V.MaxVel + W.vel)VD = Flee(W.pos + W.vel * PosicaoFutura )
Alvo = W.pos – V.posPosicaoFutura = Len(Alvo) / (V.MaxVel + W.vel)VD = Flee(W.pos + W.vel * PosicaoFutura )
JavaME MicroAIDetalhes dos principais comportamentos
• Path Following– Usado para seguir um caminho pré-definido;
Inicio Fim Inicio
JavaME MicroAI
Detalhes dos principais comportamentos
• Path Following (continuação)
Se Distancia(Path.pontoAtual – PosicaoAgente) < 0 SetaProximoPonto()
Se Path.loopFechado VD = Seek(Path.pontoAtual)Senão VD = Arrive(Path.pontoAtual)
Se Distancia(Path.pontoAtual – PosicaoAgente) < 0 SetaProximoPonto()
Se Path.loopFechado VD = Seek(Path.pontoAtual)Senão VD = Arrive(Path.pontoAtual)
JavaME MicroAI
Conteúdo
• Conhecendo o micro ambiente JavaME;
• Arquitetura da MicroAI Engine;
• Detalhes dos principais comportamentos;
• Demonstrar sua utilização;
JavaME MicroAI
Demonstrar sua utilização• Atualização Física
– Usando Leis de Newton:• f = m*a;
– f - será obtido através dos comportamentos
– Atualização da velocidade:• v = at + u;
– u - representa uma constante para velocidade em t = 0
– Atualização da posição x = v *t
JavaME MicroAI
Demonstrar sua utilização
• Rotação
– a = b.x – a.x – b = b.y – a.y– ө = atan(a / b)
• O ângulo 0 e 90 graus
b
aө
JavaME MicroAI
Demonstrar sua utilização
• Rotação continuação– índice = ө / largura do frame
0
15
1 2 3 4 5 6 7
8 9 10 11 12 13 14
JavaME MicroAI
Demonstração
JavaME MicroAI
Referências
• Programming Game AI by Example– Mat Buckland
• OpenSteer - opensteer.sourceforge.net– Craing Reynolds
JavaME MicroAI
Perguntas?