Upload
internet
View
111
Download
0
Embed Size (px)
Citation preview
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?