SIMULLADORR INTELLIGENTTE DE AIRHOCKEYY Desenvolvido em Java 6 Aceleração gráfica OpenGL (LWJGL) Engine física de alta precisão Efeitos sonoros Bernardo Dias, abril/2009. www.bernardoweb.n net CARACTERIZAÇÃO DO SISTEMA Agente Jogador Automático Classificação Agente baseado em Objetivo Percepções • • • • • • • Engine física Posição do disco Velocidade do disco Direção de movimento do disco Colisões do disco Posição dos objetos Velocidade dos objetos Direção de movimento do dos objetos Agente reflexivo Outras propriedades, como: com estado • Atrito da mesa • Áreas válidas para movimento dos objetos • Elasticidade do disco • Joystick Ações • • • • • Ficar parado Mover‐se para: o Defender o Atacar Mover os objetos Ajustar velocidades Realizar física de colisões Objetivos Ambiente Ganhar o jogo • • • • • 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 alimenta calcula NOVA ESTRATÉGIA é representada por SENSORES ajusta geram é analisado pela definem um PERCEPÇÕES CENÁRIO FUNÇÃO DE RACIOCÍNIO consulta CENÁRIO ANTERIOR ESTRATÉGIA ATUAL PILHA DE AÇÕES Cenário Estratégia 1 • Disco no campo adversário Defesa: acompanhar o disco no eixo X mantendo‐se nas proximidades do gol. • 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. 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. 3 • • • Disco no campo de atuação Defesa: acompanhar o disco no eixo X mantendo‐se nas proximidades do gol. Considerar reflexo imediato (sem delay nas Disco longe Disco com velocidade rápida percepções). 4 • • Disco no campo de atuação Disco perto Ataque: rebater o disco com força média / alta. • 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. 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”). 6 • O rebatedor está executando estratégia blocante Executar estratégia atual até o tempo determinado Ações 1. Esperar por um tempo dt; 2. Mover‐se com velocidade (Vx, Vy). 1. Mover‐se com velocidade (Vx, Vy). 1. Mover‐se com velocidade (Vx, Vy). 1. Mover‐se com velocidade (Vx, Vy). 1. Mover‐se com velocidade (Vx, Vy) por um tempo dt. Continuar movendo ou continuar esperando. DETECÇÃO DE COLISÕES Rebatedor (depois) Solução 1: Testar as posições finais (maioria das engines!) Solução 2: Cálculo analítico: traçar as retas de percurso e calcular o ponto exato de tangência dos corpos. Problemas: Disco (depois) Disco (antes) Rebatedor (antes) 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 < ta < t2. Sabendo que o passo do jogo foi de dt = t2 ‐ t1, existe um resíduo dt’ = t2 ‐ ta. 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 tb dessa colisão e reposicionar o disco conforme o tempo residual dt’’ = t2 ‐ tb. 5. No reposicionamento do item (4) o disco pode sofrer outra colisão com o próprio rebatedor no tempo tc , onde tb < tc < 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 Movimento do disco Decomposição das velocidades em R Vydisco Vxdisco X,Y Vyrebatedor Rebatedor Vxrebatedor • 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 M AIN GAME LOOP E NGINE . DO L OGIC () E NGINE . MOVE C OMPONENTS () E NGINE . VERIFICA C OLISAO () R A. DO L OGIC () DIFICULDADES ENCONTRADAS FICHA TÉCNICA • ESTUDO DA TECNOLOGIA OPENGL • SIMULAÇÃO EM TEMPO DISCRETO • SOLUÇÕES NUMÉRICAS PARA A FÍSICA DE COLISÕES E REFLEXÃO DE MOVIMENTO • CORREÇÃO DE OVERLAP DE OBJETOS SEM GERAR NOVAS COLISÕES • O PROBLEMA DO JOYSTICK SOBRE A BORDA DO PIXEL (COLISÕES INDEVIDAS) • OS PROBLEMAS NA QUINA DA MESA: o DISCO PARADO ETERNAMENTE o TREMULAÇÃO DO DISCO o TREMULAÇÃO DO REBATEDOR o SOBRECARGA SONORA o ESCAPAMENTO 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 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