Robocode
“Build the best, destroy the rest!”
Prof. Alexandre Monteiro
Baseado na apresentação de Diego Queiroz
‹#›
Contatos

Prof. Guilherme Alexandre Monteiro Reinaldo

Apelido: Alexandre Cordel

E-mail/gtalk: [email protected]
[email protected]

Site: http://www.alexandrecordel.com.br/fbv

Celular: (81) 9801-1878
Sumário
1. Introdução;
2. Instalando;
3. Como funciona o Robocode;
4. Como criar um robô;
5. Alguns comandos;
6. Alguns métodos;
7. Projeto da disciplina;
8. Exercício.
3
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.
4
Instalação


O download da versão atual está disponível em (ou google
robocode, primeiro link)
Abra como projeto em uma IDE
5
Como funciona o Robocode
6
Robôs, Robôs Everywhere

Estrutura:
Canhão
Radar
Corpo
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 antihorá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ô.
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).
9
One Does Not Simply Win The Battle
1
0
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.
1
1
Sistema de Coordenadas


O sistema de coordenadas utilizado pelo Robocode é o
cartesiano.
O sistema de ângulos é orientado ao norte.
1
2
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.
1
3
Movimento


Robôs aceleram a 1px/turno2 e desaceleram a 2px/turno2.
Velocidade é dada por v = at, mas nunca pode exceder
8px/turno.
1
4
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.
1
5
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 .
1
6
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.
1
7
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.
1
8
Como criar um Robô

Duas opções:
- Criar diretamente pelo editor do robocode.
- Usar uma IDE (Eclipse, Netbeans, etc).
●
Criando pelo editor:
1.
Robot >> Editor
2.
File >> New >> Robot
3.
Nome do robô (classe)
4.
Nome do pacote
1
9
Editor do Robocode
2
0
Editor do Robocode - Compile

Após o robô pronto é hora de compilar:
1.
2.

File >> Save
Compiler >> Compile
Agora é só brincar com ele .
1.
2.
3.
4.
Battle >> New
Em Available Robots -> Packages escolha o
pacote com nome que foi criado.
Selecione o robô criado e um (ou mais)
adversários.
TONIGHT, WE DINE IN HELL!! START BATTLE! !!
2
1
Robocode no Eclipse - Projeto
1.
File >> New >> Project >> Java Project
2.
Dê o nome do projeto.
3.
NEXT!! (ou se virem no build path depois)
4.
Libraries >> Add External JARs
5.
Pasta robocode >> libs >> robocode.jar
6.
+ >> Javadoc location: (None) >> Edit...
7.
Browser >> Pasta robocode >> javadoc
8.
Ok >> Ok >> Finish
2
2
Robocode no Eclipse - Projeto
Sistemas Inteligentes – IF684
Introdução ao Robocode
2
3
Robocode no Eclipse - Criar Robô
1.
New >> Class
2.
Superclass: robocode.Robot (Ou AdvancedRobot)
1.
2.
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.
2
4
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?

setFire(Rules.MAX_BULLET_POWER)

fire(1)

Observem a documentação (ou o ctrl+space mesmo) e
brinquem com os comandos.
2
5
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).
2
6
Usando Robô Criado no Eclipse

1.
Dois modos:
No robocode: Options >> Preferences >> Development
Options >> Add e coloca o caminho até a pasta do
projeto.
2
7
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.
2
8
Projeto da Disciplina

1.
2.

A competição realizada na disciplina terá duas
modalidades:
A equipe possui um Robot líder(Primeiro robô registrado)
e 4 droids (Decisão centralizada).
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.
2
9
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!
3
0
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.
3
1
Download

Robocode