Robocode
“Build the best, destroy the rest! ”
Centro de Informática
Universidade Federal de Pernambuco
Sistemas Inteligentes – IF684
Arley Ristar – [email protected]
Baseado na apresentação de Diego Queiroz
© 2013 – Arley Ristar
Sumário
1.
2.
3.
4.
5.
6.
7.
8.
Introdução;
Instalando;
Como funciona o Robocode;
Como criar um robô;
Alguns comandos;
Alguns métodos;
Projeto da disciplina;
Exercício.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
2
Introdução
• O que é o Robocode:
Robocode foi criado como um jogo de
programação cujo objetivo é desenvolver um
tanque de guerra (em Java ou .NET) para
combater outros tanques em uma arena. As
batalhas são executadas em tempo real e com
representação
gráfica.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
3
Pré Requisitos
Para rodar o Robocode:
• Possuir Java 5.0 SE ou mais recente.
• A variável JAVA_HOME, setada para o diretório do Java.
- Windows: JAVA_HOME=C:\Program Files\Java\jdkα.β.γ.δ
- UNIX, Linux, Mac OS: JAVA HOME=/usr/local/jdkα.β.γ.δ
• E a variável PATH, que deve incluir o caminho para a
pasta bin do diretório de Java (JAVA HOME) que inclui o
java.exe para iniciar a JVM.
- Windows: PATH=%PATH%;%JAVA HOME%\bin
- UNIX, Linux, Mac OS: PATH=${PATH}:${JAVA HOME}/bin
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
4
Instalação
• O download da versão atual está disponível
em (ou google robocode, primeiro link):
http://sourceforge.net/projects/robocode/file
s/robocode/
• Depois de baixar, execute o .jar e este realizará
a instalação (java –jar robocode-α.β.γ.δsetup.jar).
• Após a instalação, para iniciar o robocode
utilize o ’robocode.bat’ (Windows) ou
‘robocode.sh’ (UNIX, Linux, Mac OS).
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
5
Como funciona o Robocode
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
6
Robôs, Robôs Everywhere
• Estrutura:
Canhão
Radar
Corpo
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
7
Anatomia de um Robô
Um robô consiste de três partes principais:
• Corpo - Carrega o canhão e o radar e permite
mover para frente, para trás e girar o tanque no
sentido horário e anti-horário.
• Canhão - Está montado no corpo do tanque e
dispara balas de energia com força variável além
de poder girar, também, no sentido horário e
anti-horário.
• Radar - Está montado na arma e é usado para
escanear por robôs enquanto o robô se move. Ele
pode girar em ambos os sentidos e gera eventos
onScannedRobot quando detecta algum robô.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
8
Tipos de Robô
Existem 4 tipos básicos de robô:
• Junior Robot - Usado para propósitos educacionais.
• Robot - Robô de implementação mais simples, com várias
funcionalidades prontas, possui todas as partes principais.
• AdvancedRobot - Robô que permite desenvolvimento mais
complexo, alterando partes implementadas de maneira
simples no Robot. Também possui as três partes básicas.
• Droid - Droids são robôs que não possuem radar,
precisando de orientação de outro robô para atirar de
forma mais eficiente. Recebem um bônus de energia por
não possuírem radar (20 unidades a mais de energia).
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
9
One Does Not Simply Win The Battle
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
10
Turnos
• O Robocode é baseado em turnos, porém é
possível ajustar a quantidade de turnos por
segundo aparentando tempo real.
• Geralmente ele é executado de 30 a 40 turnos
por segundo.
• Em um turno um Robot pode executar apenas
uma ação qualquer.
• Um AdvancedRobot pode executar várias
ações em um turno.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
11
Sistema de Coordenadas
• O sistema de coordenadas utilizado pelo
Robocode é o cartesiano.
• O sistema de ângulos é orientado ao norte.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
12
Tempo e Distância
• O tempo medido em ticks e cada robô recebe
um tick por turno.
• A distância é medida em pixels, mas com
precisão double, logo é
possível mover frações
de pixel.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
13
Movimento
• Robôs aceleram a 1px/turno2 e desaceleram a
2px/turno2.
• Velocidade é dada por v = at, mas nunca pode
exceder 8px/turno.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
14
Rotação
• A taxa máxima de rotação dos robôs é
definida por: (10 − 0.75 abs(velocidade))
graus/turno, ou seja, quanto mais rápido o
tanque anda, mais demora para rodar.
• A taxa máxima de rotação do canhão é de 20
graus/turno.
• A taxa máxima de rotação do radar é de 45
graus/turno.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
15
Balas
• O dano causado pelas balas é dado por:
4*firepower . Se o firepower > 1, então um dano
extra é causado: 2*(power − 1).
• A velocidade da bala é dada por: 20 - 3*firepower
e não é influenciada pela velocidade do tanque.
• Quando o canhão dispara, é gerado calor igual a 1
+ firepower/5. E se esse valor for maior que 0, o
canhão não pode atirar novamente até que
esfrie. Todas as armas iniciam com algum calor
no início de cada round.
• A energia recuperada pelo tanque ao atingir um
oponente é igual a 3*firepower .
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
16
Loop de Processamento do Simulador
A ordem em que o Robocode roda é a seguinte:
1. Robocode pinta o estado atual na tela.
2. Todos os robôs executam seus códigos até
que tomam algum ação (e então são
pausados).
3. O tempo é atualizado (time = time + 1).
4. Todas as balas se movem e checam por
colisão e isso inclui balas que acabaram de
ser atiradas.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
17
Loop de Processamento do Simulador
A ordem em que o Robocode roda é a seguinte:
5. Todos os robôs se movem (canhão, radar,
direção, aceleração, velocidade e distância,
nessa ordem).
6. Todos os robôs que podem detectar algo através
do radar recebem os sinais de radar agora
(também recebem mensagens do time, se
existirem).
7. Todos os robôs são retirados do pause e podem
tomar novas ações.
8. Cada robô processa sua fila de eventos.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
18
Como criar um Robô
• Duas opções:
- Criar diretamente pelo editor do robocode.
- Usar o Eclipse.
● Criando pelo editor:
1.
Robot >> Editor
2.
File >> New >> Robot
3.
Nome do robô (classe)
4.
Nome do pacote
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
19
Editor do Robocode
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
20
Editor do Robocode - Compile
• Após o robô pronto é hora de compilar:
1.
File >> Save
2.
Compiler >> Compile
• Agora é só brincar com ele .
1.
Battle >> New
2.
Em Available Robots -> Packages escolha o
pacote com nome que foi criado.
3.
Selecione o robô criado e um (ou mais)
adversários.
4.
TONIGHT, WE DINE IN HELL!! START BATTLE! !!
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
21
Robocode no Eclipse - Projeto
1.
2.
3.
4.
5.
6.
7.
8.
File >> New >> Project >> Java Project
Dê o nome do projeto.
NEXT!! (ou se virem no build path depois)
Libraries >> Add External JARs
Pasta robocode >> libs >> robocode.jar
+ >> Javadoc location: (None) >> Edit...
Browser >> Pasta robocode >> javadoc
Ok >> Ok >> Finish
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
22
Robocode no Eclipse - Projeto
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
23
Robocode no Eclipse - Criar Robô
1.
2.
3.
4.
New >> Class
Superclass: robocode.Robot (Ou AdvancedRobot)
Lembram de Thread? Pois é... Criem um run() { }
para indicar o que o robô deve ficar executando.
Quanto mais “inteligente” teu robô for, melhor.
Os métodos que recebem eventos (normalmente
iniciados em ‘on’) são ótimos para a criação das
regras de combate.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
24
Alguns Comando dos Robôs
●
●
●
•
•
•
•
•
ahead(100); → Move 100 pixels
turnGunRight(180); → Gira a arma 180º
back(100); → Move 100 pixels (para trás)
turnLeft(90); → Gira o robô em 90
turnRadarRightRadians(0.5) → Já deu pra
entender, né?
setFire(Rules.MAX_BULLET_POWER)
fire(1)
Observem a documentação (ou o ctrl+space
mesmo) e brinquem com os comandos.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
25
Alguns métodos para tratar eventos
Para criar regras pode-se sobrescrever alguns
métodos que são chamados quando ocorre
algum evento do tipo que estão recebendo.
• onHitByBullet → Acertado por uma bala.
• onScannedRobot → Quando achar um robô
no radar.
• onRoundEnded → Quando acabar um round.
Olhem a documentação e criem uma boa
estratégia (e que faça sentido).
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
26
Usando Robô Criado no Eclipse
• Dois modos:
1. No robocode: Options >> Preferences >>
Development Options >> Add e coloca o
caminho até a pasta do projeto.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
27
Usando Robô Criado no Eclipse
2. Copiar o .class (ou um jar) do robô para a
pasta robots.
• Depois disso é só usar como qualquer outro
robô .
• Para quem não quiser usar o editor do
robocode nem uma IDE, é só escrever um java
(usando algum editor de texto, como o vim) e
executar um ‘javac‘ copiando (ou linkando) o
class para a pasta robots.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
28
Projeto da Disciplina
• A competição realizada na disciplina terá duas
modalidades:
1. A equipe possui um Robot líder(Primeiro
robô registrado) e 4 droids (Decisão
centralizada).
2. Equipe possuindo 5 Robots (Decisão
descentralizada).
• O objetivo de cada competição é destruir o
time adversário, o sistema de scoring utilizado
será o mesmo do robocode.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
29
Exercício
• Crie um Robô Kamikaze :P.
• Quando ele detectar um robô ele se move (e o
canhão também) em direção a esse robô.
• Só atire quando achar um robô.
• Defina o poder de fogo de acordo com a distância
do outro robô (Fica a critério de vocês escolher
como fazer isso).
• Quanto mais longe, menor o poder de fogo.
• Se algum adversário morrer antes dele, print algo
e realize algum comando da sua escolha.
• Fazer isso AGORA!
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
30
Exercício 2
• Com o exercício anterior completo é hora de
aumentar a complexidade (mesmo que não faça
tanto sentido).
• Quando a Energia estiver em menos de 10, faça o
robô parar de atirar e mover o canhão e só andar
em direção ao adversário.
• Quando atingir um adversário, se a energia dele
for maior que 2 vezes a sua energia, ele perde as
esperanças e muda a cor para vermelho, se não
continua se movendo em direção ao adversário.
Sistemas Inteligentes – IF684
Introdução ao Robocode
© 2013 – Arley Ristar
31
Download

Robocode_IF684 - Centro de Informática da UFPE