AIBirds - jeiks.net

Propaganda
Angry Birds Basic Game Playing Software
version1.31
Por:
XiaoYu (Gary) Ge, Stephen Gould, Jochen Renz
Sahan Abeyasinghe, Jim Keys, Andrew Wang, Peng Zhang
Traduzido por:
Jacson Rodrigues Correia da Silva
Research School of Computer Science
The Australian National University
2014-05-06
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0
Unported License and can be accessed via http://www.aibirds.org/basic-game-playingsoftware.html
Sumário
Instalação..............................................................................................................................................1
Instalação do ambiente JAVA..........................................................................................................1
Instalação do Chrome......................................................................................................................1
Instalação do Software.....................................................................................................................1
Instalação do Plugin.........................................................................................................................1
Executando o Software....................................................................................................................2
Server-Client Architecture....................................................................................................................2
Angry Birds Extension.....................................................................................................................3
AI Agent...........................................................................................................................................3
Proxy................................................................................................................................................3
Porta de Comunicação S/C..............................................................................................................3
Módulo Vision.................................................................................................................................3
Obtendo MBRs................................................................................................................................4
Obtendo o Contorno Real (Real Shape)..........................................................................................5
Módulo Trajectory...........................................................................................................................5
O Agente Naive (standalone) – uma demonstração..............................................................................6
Agente Naive...................................................................................................................................6
Jogando com o Agente Naive...............................................................................................................7
Carregando a Janela do Jogo...........................................................................................................7
Executando o Agente Naive.............................................................................................................7
Criando seu próprio Agente Inteligente................................................................................................8
Representação dos Objetos..............................................................................................................8
Tire um Screenshot e Segmente a imagem......................................................................................9
Acessando o estado do Jogo............................................................................................................9
Módulo Trajectory.........................................................................................................................10
Efetuando tiros...............................................................................................................................10
Self-Manage mode....................................................................................................................10
Auto-Arrange mode...................................................................................................................11
Outros métodos úteis..........................................................................................................................11
Obter o tipo de pássaro do estilingue.............................................................................................11
Obter todo o suporte/recursos de um objeto..................................................................................11
Reachability...................................................................................................................................12
Compile utilizando o ANT.................................................................................................................12
1
Instalação
Instalação do ambiente JAVA
Este framework foi testado com o JAVA6 e superiores. Para checar qual é a versão do java instalada
em seu computador, execute o seguinte comando em seu terminal:
java -version
Você pode efetuar o download do ambiente java deste link:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Instalação do Chrome
O navegador Chrome pode ser obtido no link: https://www.google.com/chrome/browser/
Instalação do Software
Descompacte o arquivo zip com o software. Assumindo que o diretório do software é ./angrybirds/
Você terá os seguintes arquivos/pastas:
• A pasta external que contém todas as bibliotecas necessárias.
• A pasta src que contém todos os códigos fontes.
• A pasta plugin que possui uma extensão para interagir com o Chrome.
Instalação do Plugin
1. Abra o Chrome;
2. Vá em: chrome://chrome/extensions/
3. Clique na caixinha (checkbox) “Modo Desenvolvedor”;
4. Clique no botão “Carregar extensão descompactada...”;
5. Selecione a pasta plugin (que contém o arquivo manifest.json);
NOTA: Se os screenshots estão sendo gravados como arquivos PNGs transparentes, faça isso:
1. Abra o Chrome;
2. Vá em: chrome://flags/
3. Encontre a opção “Desabilitar WebGL” e marque-a.
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
2
Executando o Software
Através da linha de comando você pode executar o Agente Naive (veja a seção Executando o
Agente Naive), ver em tempo real a segmentação das imagens do jogo (veja seção Módulo Vision) e
ver em tempo real a trajetória de saída (veja seção Módulo Trajectory).
Server-Client Architecture
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
3
Angry Birds Extension
O plugin do chrome interage com o navegador Chrome. Ele oferece funcionalidades, como capturar
a janela do jogo, executar ações (ex.: mover o mouse, clicar e modificar o zoom). Para instalá-lo,
veja a seção Instalação do Plugin.
AI Agent
Um agente pode utilizar o módulo vision para analisar os cenários do jogo e o módulo trajectory
para planejar os tiros. Embora o jogo seja escrito em Java, o agente pode ser implementado em
outras linguagens, como C++, Python, etc.
Proxy
O servidor interage com a extensão do Angry Birds através do módulo proxy. As mensagens do
proxy são:
•
CLICK: clicar com o botão esquerdo do mouse;
•
DRAG: arrastar o cursor de um lugar para outro;
•
MOUSEWHEEL: rolar a rodinha do mouse;
•
SCREENSHOT: capturar a imagem da janela atual do jogo
O agente não precisa de acessar o componente proxy.
Porta de Comunicação S/C
A porta de comunicação Servidor/Cliente recebe mensagens dos agentes e envia os feedbacks de
volta após o servidor executar as ações indicadas pelas mensagens. As mensagens se encaixam nas
seguintes categorias:
•
Mensagens de Configuração;
•
Mensagens de Consulta (Query);
•
Mensagens de ação dentro do jogo (In-Game);
•
Mensagens de seleção de nível.
A sintaxe das mensagens pode ser encontrada em /doc/ServerClientProtocols.pdf
Módulo Vision
O módulo Vision é composto de dois componentes de segmentação de imagem. Um dos
componetnes segmenta uma imagem e gera uma lista de Retângulos de Limites Mínimos (MBR)
dos objetos essenciais da imagem. Os elementos essenciais incluem {“Sling”, “Red Bird”, “Yellow
Bird”, “Blue Bird”, “Black Bird”, “White Bird”, “Pig”, “Ice”, “Wood”, “Stone”, “TNT”,
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
4
“TrajPoints”} (traduzindo: {“Estilingue”, “Pássaro Vermelho”, “Pássaro Amarelo”, “Pássaro Azul”,
“Pássaro Preto”, “Pássaro Branco”, “Porco”, “Gelo”, “Madeira”, “Pedra”, “Dinamite”,
“TrajPoints”}).
O outro componente gera formas reais ao invés de MBRs. Você pode utilizar ambos para processar
um screenshot.
Obtendo MBRs
Geralmente são necessários 100ms para processar o MBR de um cenário. A seguir tem-se um
exemplo do resultado da segmentação (MBRs).
Para exibir a segmentação em tempo real, você deve executar o aplicativo com o comando:
java -jar ABSoftware.jar -showMBR
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
5
Obtendo o Contorno Real (Real Shape)
Geralmente são necessários 300–500ms para processar o Contorno Real. Além dos objeto
essenciais, essa segmentação de imagem pode reconhecer colinas e o chão. Colinas são os
obstáculos da cor marrom escuro que não serão afetados ou destruídos por objetos do jogo. A seguir
tem-se um exemplo do resultado da segmentação (Real Shape).
Para mostrar essa segmentação, você deve executar o aplicativo com o comando:
java -jar ABSoftware.jar -showReal
Módulo Trajectory
O módulo Trajectory estima a trajetória que o pássaro seguirá dado um particular ponto de
lançamento (relativo ao tiro do estilingue). Nós utilizamos uma constante de velocidade para todos
os tiros do mesmo nível e utilizamos o ponto de lançamento e a localização do estilingue para
determinar o ângulo de lançamento a. Com isso, nós podemos computar as velocidades horizontais
e verticais como v cos(a) e v sen(a), respectivamente.
Com as velocidades iniciais em mãos, nós utilizamos as leis físicas clássicas de Newton para
estimar a o caminho parabólico que o pássaro vai seguir. A função predictTrajectory dentro do
módulo Trajectory retorna uma lista de pontos que o pássaro vai seguir dado um certo ponto de
lançamento. Para facilitar o planejamento dos tiros, o módulo Trajectory fornece uma função
(chamada estimulateLaunchPoint) para estimar o ponto de lançamento a partir do fornecimento de
um destino desejado (por exemplo, o centro de um dos porcos detectados). A função utiliza a
seguinte equação para calcular o ângulo: θ=arctan
(
v 2±√ v 4 −g( gx 2+2 yv 2 )
gx
)
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
6
Onde (x,y) são as coordenadas normalizadas do ponto de destino relativos ao estilingue (utilizando
o tamanho do estilingue como escala) e a gravidade g é definida como 1 unidade. Dois ângulos são
obtidos dessa equação e a função retorna dois pontos de lançamento correspondentes em um
ArrayList de Points.
Note que quando um tiro é fabricado, o ângulo atual de lançamento a é sempre um pouquinho
diferente do arco tangente do vetor de lançamento e a diferença varia de nível para nível. Da mesma
forma, as velocidades normalizadas são um pouquinho diferentes entre os níveis. A variação no
ângulo e na velocidade são levados em conta na predição das trajetórias e nos pontos de
lançamento. O módulo trajectory provê um método (adjustTrajectory) para ajustar essas duas
mudanças utilizando a informação do último tiro, de modo que a precisão dos tiros seguintes é
melhorada.
Observe também que devido as variações no nível do pixel no local do estilingue, pássaro e efeitos
devido à escala, os caminhos estimados pelo módulo Trajectory são somente aproximados. Os
Agentes devem devem levar isso em conta quando planejam seus tiros.
Para mostrar a segmentação em tempo real, você pode executar o aplicativo com o comando:
java -jar ABSoftware.jar -showTraj
Exemplo da saída:
O Agente Naive (standalone) – uma demonstração
Agente Naive
O Agente Naive foi criado para demonstrar como construir um agente baseado nos módulos
providos, nomealmente, o plugin do Chrome, o módulo vision e o módulo trajectory. O agente
naive é chamado “naive” (tradução: tolo) por que ele dispara o pássaro diretamente no porco sem
raciocínio algum.
O código pode ser encontrado em: /src/ab/demo/NaiveAgent.java
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
7
Jogando com o Agente Naive
Carregando a Janela do Jogo
Para carregar a janela do jogo, faça:
1. Abra o Chrome;
2. Maximize a janela do navegador;
3. Digite “http://chrome.angrybirds.com/” na barra de endereços e pressione ENTER;
4. Selecione versão SD e clique em Play;
5. Selecione o episódio POACHED EGGS e permaneça na página de seleção de níveis.
(Página de seleção de níveis)
Por favor, mantenha a aba do jogo visível. Você não precisa de manter a janela do navegador na
frente das outras janelas. Por exemplo, você pode minimizar a janela do navegador após carregar o
jogo, mas garantindo que a aba do jogo esteja selecionada.
Executando o Agente Naive
Para executar o Agente Naive, faça:
1. Carregue o jogo no Chrome (veja seção Carregando a Janela do Jogo);
2. Abra o terminal (janela de comandos);
3. Vá ao diretório do jogo;
4. Então, execute no terminal o comando:
java -jar ABSoftware.jar -na [1-21]
substituindo [1-21] pelo nível que você desejar. O nível inicial é 1 por padrão.
Ex.: “java -jar ABSoftware.jar -na 2” começará o agente Naive no nível 2. Obsercação: Você não
pode acessar um nível antes de desbloqueá-lo.
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
8
Criando seu próprio Agente Inteligente
Representação dos Objetos
Para cada objeto de um screenshot, o módulo vision criará um objeto java sobre ele. Este objeto é
especificado dentro do ABObject.java que estende java.awt.Rectangle. A classe ABObject tem
quatro atributos principais: x e y da coordenada do canto superior esquerdo, width (largura) e height
(altura).
A classe ABObject tem um atributo indicando o tipo de objeto de um objeto do jogo. Os tipos de
objetos são: {“Hill”, “Sling”, “Red Bird”, “Yellow Bird”, “Blue Bird”, “Black Bird”, “White Bird”,
“Pig”, “Ice”, “Wood”, “Stone”, “TNT”} (traduzindo: {“Colina/Morro”, “Estilingue”, “Pássaro
Vermelho”, “Pássaro Amarelo”, “Pássaro Azul”, “Pássaro Preto”, “Pássaro Branco”, “Porco”,
“Gelo”, “Madeira”, “Pedra”, “Dinamite”}).
O atributo “hollow” indica se um objeto está com cavidade (tem um buraco no meio) ou não.
Observação: A segmentação MBR não distingue entre objetos com cavidade e objetos sólidos.
Nós classificamos as formas dos objetos do jogo em três grupos: Circle (círculo), Rect (retângulo) e
Poly (polígono) (referem-se a /src/ab/vision/real/shape). Há uma classe java correspondente para
cada grupo e as classes javas estendem o ABObject.java, mantendo assim todos os métodos e
atributos do ABObject.
•
•
Circle: representa uma fórmula circular do centro do círculo e do raio.
Rect: representa um retângulo de um ângulo arbitrário. Além dos quatro atributos que
especificam a MBR, a classe Rect representa o desenho real de um retângulo, possuindo mais
três atributos: pwidth, plength e angle.
O pwdith e o plength abrigam
o tamanho do menor e do
maior borda respectivamente.
•
Poly: representa um polígono utilizando java.awt.Polygon. Triângulos são representados assim.
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
9
Tire um Screenshot e Segmente a imagem
É muito simples tirar um screenshot e segmentá-lo. O seguinte fragmento de código exibe o
processo.
//Start the game proxy
ActionRobot aRobot = new ActionRobot();
//Capture an Image
BufferedImage screenshot = aRobot.doScreenShot();
// Initialize the vision component
Vision vision = new Vision(screenshot);
// Get a list of MBRs of all the pigs in the screenshot
List<ABObject> pigsMBR = vision.findPigsMBR();
// Get a list of real shapes of all the pigs in the screenshot
List<ABObject> pigsReal = vision.findPigsRealShape();
Como pode ser visto do código, nós fornecemos uma visão macro (veja /src/ab/vision/Vision.java)
que gerencia os dois componentes de segmentação. O método findPigsRealShape() utiliza a
segmentação com contorno real para obter a lista de porcos enquanto o método findPigsMBR()
utiliza a segmentação MBR. Sob os componentes de segmentação ocorre o reconhecimento de todas
as categorias de objetos. A segmentação MBR não detecta a colina/morro enquanto a segmentação
com contorno real não reconhece o TNT. Então, o método findTNTs() utiliza a segmentação MBR e
o método findHills() utiliza a segmentação com contorno real (real-shape).
Acessando o estado do Jogo
Há cinco estados principais do jogo:
1. “WON”: uma página mostra o placar final e as estrelas que você ganhou.
2. “LOST”: um grande porco fala que você perdeu.
3. “PLAYING”: o jogo ainda não acabou.
4. “LEVEL SELECTION”: a página de seleção de níveis.
5. “LOADING”: o jogo está sendo carregado neste momento e uma barra de progresso é
apresentada sobre a página.
Por favor, consulte /src/ab/vision/GameStateExtractor.java para detalhes.
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
10
Módulo Trajectory
Uma vez que você sabe seu objetivo, você precisa do módulo trajectory para planejar os tiros. Para
obter o conjunto de pontos de lançamento estimados dados para um objetivo (destino), você pode
chaamar o método estimateLaunchPoint(Rectangle, Point). Este método necessita do MBR do
estilingue e to ponto de destino.
//Initial a trajectory planner
TrajectoryPlanner tp = new TrajectoryPlanner();
//Get the estimated points
List<Point> pts = tp.estimateLaunchPoint(sling, target);
Por favor, consulte /src/ab/planner/TrajectoryPlanner.java para detalhes.
Efetuando tiros
Um Tiro (Shot) contém seis parâmetros (x, y, dx, dy, t_shot, t_tap). Os primeiros quatro parâmetros
especificam o caminho do mouse de (x,y) à (x+dx, y+dy). T_shot é o tempo que o pássaro será
colocado para ser lançado. T_tap especifica o intervalo entre o tempo de liberação e o tempo de
tocar na tela (clicar) após isso. O tempo é mensurado em milissegundos. Você pode submeter uma
lista de tiros ao servidor e ele pode executar um por um de acordo com a ordem.
Mais detalhes sobre efetuar tiros podem ser vistos na seção Mensagens das Ações Dentro do Jogo,
em ServerClientProtocols.pdf (Pode ser encontrado no diretório “doc”).
Self-Manage mode
Digamos que você deseja atirar dois pássaros seguindo as correspondentes instâncias de tiro:
1) Shot (x,y,dx,dy, 5000,2000);
2) Shot (x,y,dx,dy, 13000,5000);
Você pode passar os dois tiros ao servidor e ele seguirá a seguinte linha do tempo:
5000
7000
13000
18000
(shot 1)
(tap 1)
(shot 2)
(tap 2)
> Tempo
Observação> t_tap especifica o intervalo entre o lançamento e o tempo correspondente ao tapping
(que é o ato de bater na tela após o lançamento para ativar a característica do pássaro).
Quando você especificar o tempo do tiro (shot), por favor tenha atenção que:
1) Evite fazer um tiro (shot) e um tap ao mesmo tempo. Ex.: Os seguintes tiros estão com conflito:
Shot (x,y,dx,dy, 5000,3000); Shot (x,y,dx,dy, 8000,5000);
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
11
2) No jogo, há um intervalo entre dois tiros. Você não pode atirar um pássaro imediatamente após o
outro tiro. O intervalo é de aproximadamente 5 segundos. Então, por favor, ajuste o t_shot e
assegure-se que o tempo entre dois tiros é maior que 5000.
3) O tempo do tap do primeiro tiro não pode ser após atirar o segundo pássaro.
Auto-Arrange mode
Nós fornecemos outra forma conveniente de atirar os pássaros. Isso pode ser utilizado se você não
quiser se importar sobre o tempo exato. Nós podemos organizar o tempo de tiro para você. Basta
definir o t_shot de cada tiro da sequẽncia como 0 (zero). Por exemplo:
1) Shot (x,y,dx,dy, 0,3000);
2) Shot (x,y,dx,dy, 0,5000);
O primeiro tiro será feito no tempo 0 (zero) e o segundo tiro será feito no tempo 5000. Além disso,
o primeiro tap ocorre no tempo 3000 + 0 = 3000 e o segundo tap ocorre no tempo 5000 + 5000 =
10000.
Observe que se você quer que o servidor organize os tiros para você, você terá que garantir que
todos os campos t_shot serão definidos para 0 (zero) na sequência de tiros desejada.
O servidor tratará a seguinte sequência com conflitos como auto-gerida:
1) Shot (x, y,dx,dy, 0,3000);
2) Shot (x,y,dx,dy, 0,5000);
3) Shot (x,y,dx,dy, 10000,5000);
Outros métodos úteis
Obter o tipo de pássaro do estilingue
Você pode obter o tipo de pássaro do estilingue utilizando o método getBirdTypeOnSling() (veja
/src/ab/demo/other/ActionRobot.java). Este método fará um zoom no estilingue, obterá um
screenshot e segmentará a imagem para obter a lista de pássaros. O método então ordenará a lista
para encontrar o pássaro mais alto e retornará o tipo desse pássaro.
Obter todo o suporte/recursos de um objeto
O método isSupport(ABObject o1, ABObject o2) (veja /src/ab/utils/ABUtil.java) retornará
verdadeiro se o1 suporta o2. O método determina a relação dos objetos checando se a borda
superior do MBR de o1 está situada na região de suporte (apresentada como o retângulo pontilhado
da figura a seguir) do MBR do o2.
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
12
A região de suporte é o retângulo com o (x,y, width, height) como (o2.x – intervalo, o2.y +
o2.height – intervalo, intervalo * 2 + o2.width, intervalo * 2). O intervalo é ajustável. Na figura, o
intervalo é de 5px.
O método getSupporters(ABObject o2, List<ABObject> objs) retorna uma lista contendo um
subconjunto de objs que suportam o2.
Como você percebeu, este método não é compatível com o suporte de retângulos angulares. Você
terá que fazer sua própria estratégia para realizar uma checagem disso.
Reachability
O método isReachable(Vision vision, Point target, Shot shot) (veja /src/ab/utils/ABUtil.java) retorna
true se o ponto (target/destino/alvo) é alcançavel (sem obstruções) pelo tiro (shot).
O método primeiro obtém uma lista de todos os pontos da trajetória de um tiro e guarda (preserva)
aqueles que estão a esquerda do alvo. Tipo assim: a coordenada x do ponto é menor que o algo.
Então, o método checa se qualquer um dos pontos contidos no MBR de qualquer bloco (madeira,
gelo e pedra), ou se tem um RGB similar a cor de uma colina/morro. O método retorna true
(alcançavel) quando estes pontos não existem.
Você pode também desenvolver sua própria estratégia para determinar a alcançabilidade do pássaro.
Compile utilizando o ANT
Você pode utilizar o ANT para compilar o código fonte pela linha de comando. Ant é uma biblioteca
Java e uma ferramenta em linha de texto que possui a missão de direcionar o processo descrito nos
arquivos de compilação (build), compilando as dependências e gerando o resultado almejado.
Para mais informações, acesse: http://ant.apache.org/
Você pode efetuar o download do ANT em: http://ant.apache.org/manualdownload.cgi
É necessário ter o ANT 1.7 ou superior.
Para compilar o código fonte, vá ao diretório do software e execute: ant compile
Para gear o executável “jar”, execute: ant jar
This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License and can
be accessed via http://www.aibirds.org/basic-game-playing-software.html. It was translated by: Jacson RC Silva
Download