SIMULADOR INTELIGENTE DE AIRHOCKEY Desenvolvid o em Java 6 A celeração gráfica OpenGL (LWJGL) Engine f ísic a de alta p r ecisão Efeitos sonoo ros Bernardo Dias, abril/2009. www.bernardoweb.net
CARACTERIZAÇÃO DO SISTEMA Agente Classificação Percepções Ações Objetivos Ambiente Jogador Automático Agente baseado em Objetivo Posição do disco Velocidade do disco Direção de movimento do disco Colisões do disco Ficar parado Mover se para: o Defender o Atacar Ganhar o jogo Engine física Agente reflexivo com estado Posição dos objetos Velocidade dos objetos Direção de movimento do dos objetos Outras propriedades, como: Atrito da mesa Áreas válidas para movimento dos objetos Elasticidade do disco Joystick Mover os objetos Ajustar velocidades Realizar física de colisões Avançar o passo de simulação Acessível Determinístico Não episódico Dinâmico Contínuo
COMPORTAMENTO DO JOGADOR AUTOMÁTICO AMBIENTE calcula NOVA ESTRATÉGIA alimenta é representada por PILHA DE AÇÕES SENSORES ajusta ESTRATÉGIA ATUAL geram PERCEPÇÕES definem um CENÁRIO é analisado pela FUNÇÃO DE RACIOCÍNIO CENÁRIO ANTERIOR consulta
Cenário Estratégia Ações Defesa: acompanhar o disco no eixo X mantendo se nas proximidades do gol. 1 Disco no campo adversário Aplicar tempo de reflexão em caso de colisões do disco; Limitar movimento em X a ± 1/6 com relação ao centro; Mover se com Vx próxima à do disco; Mover se com Vy aleatório em direção à linha de defesa; Cancelar Vy quando próximo da linha de defesa; Não calcular Vy se o cenário não mudou. 1. Esperar por um tempo dt; 2. Mover se com velocidade (Vx, Vy). 2 Disco no campo de atuação Disco longe Disco com velocidade lenta Ataque: rebater o disco com força baixa. Apenas ajustar a direção de V se o cenário não mudou. 1. Mover se com velocidade (Vx, Vy). 3 Disco no campo de atuação Disco longe Disco com velocidade rápida Defesa: acompanhar o disco no eixo X mantendo se nas proximidades do gol. Considerar reflexo imediato (sem delay nas percepções). 1. Mover se com velocidade (Vx, Vy). Ataque: rebater o disco com força média / alta. 4 Disco no campo de atuação Disco perto Calcular a velocidade do rebatedor (inputs: velocidade desejada de reflexão; velocidade atual do disco); Apenas ajustar a direção de movimento se o cenário não mudou. 1. Mover se com velocidade (Vx, Vy). 5 O rebatedor colidiu com o disco (ataque realizado) Defesa: voltar para a posição padrão (proximidades do gol). Essa estratégia visa reduzir a probabilidade de gol contra e starvation no rebate do disco (solução para o efeito basquete ). 1. Mover se com velocidade (Vx, Vy) por um tempo dt. 6 O rebatedor está executando estratégia blocante Executar estratégia atual até o tempo determinado Continuar movendo ou continuar esperando.
DETECÇÃO DE COLISÕES Rebatedor (depois) Solução 1: Testar as posições finais (maioria das engines!) Disco (depois) Rebatedor (antes) Disco (antes) Solução 2: Cálculo analítico: traçar as retas de percurso e calcular o ponto exato de tangência dos corpos. Problemas: 1. Ambos objetos estão em movimento (não é apenas geometria) 2. O disco sofre efeito do atrito (MUV) 3. A colisão ocorrerá um tempo t1 < t a < t2. Sabendo que o passo do jogo foi de dt = t2 t1, existe um resíduo dt = t2 t a. Deve se movimentar o disco para a posição correta num tempo dt 4. No período dt o disco pode sofrer outra colisão (lateral por exemplo). Deve se calcular o momento t b dessa colisão e reposicionar o disco conforme o tempo residual dt = t2 t b. 5. No reposicionamento do item (4) o disco pode sofrer outra colisão com o próprio rebatedor no tempo t c, onde t b < t c < t2, no qual o rebatedor estaria numa posição intermediária de seu movimento. Observe a recursividade (num mesmo passo do jogo!) e o aumento de complexidade se tivéssemos vários objetos movendo se no campo (o cálculo é possível?). Passo i do jogo (tempo = t1) Passo i + 1 do jogo (tempo = t2) Solução 3: Cálculo numérico: dividir o período dt em N frações e avançar o jogo em passos menores realizado o teste da solução 1. (implementado, com N ajustado de acordo com o objeto de maior velocidade no jogo).
REFLEXÃO DO DISCO Sentido da reflexão (reta R) Movimento do rebatedor Disco Vy disco Movimento do disco Decomposição das velocidades em R Vx disco Vy rebatedor Rebatedor Vx rebatedor X,Y As velocidades normais a R são anuladas (não há spin do disco); A componentes do disco sofrem perda elástica; A direção final é sempre a de R (eixo do rebatedor para eixo do disco)
MODELAGEM
FLUXOS DE EXECUÇÃO MAIN GAME LOOP ENGINE.DOLOGIC()
ENGINE.MOVECOMPONENTS() ENGINE.VERIFICACOLISAO()
RA.DOLOGIC()
DIFICULDADES ENCONTRADAS FICHA TÉCNICA E STUDO DA TECNOLOGIA O PENGL S IMULAÇÃO EM TEMPO DISCRETO S OLUÇÕES NUMÉRICAS PARA A FÍSICA DE COLISÕES E REFLEXÃO DE MOVIMENTO C ORREÇÃO DE OVERLAP DE OBJETOS SEM GERAR NOVAS COLISÕES Tamanho do jogo: 10,4 MB Linhas de código: (38p. em fonte 12 Times, A4) Bibliotecas Java: LWJGL, JINPUT Bibliotecas Nativas: JINPUT, LWJGL, OpenAL Sons (WAV): gol lento, gol rápido, colisão lateral, colisão com rebatedor Imagens (PNG alpha): disco, rebatedor, mesa, barra, placar O PROBLEMA DO JOYSTICK SOBRE A BORDA DO PIXEL ( COLISÕES INDEVIDAS) O S PROBLEMAS NA QUINA DA MESA: o D ISCO PARADO ETERNAMENTE o T REMULAÇÃO DO DISCO o T REMULAÇÃO DO REBATEDOR o S OBRECARGA SONORA o E SCAPAMENTO DO DISCO O PROBLEMA DE COLISÕES COM ESTADO FUTURO INVÁLIDO ( ROLLBACK) O PROBLEMA DE COLISÕES CONSECUTIVAS DO REBATEDOR E A DETECÇÃO DE EMPURRÃO DO DISCO ( DIVERGÊNCIA DO ÂNGULO DE REFLEXÃO) O EFEITO BASQUETE AUTOMÁTICO