Escolar Documentos
Profissional Documentos
Cultura Documentos
Manual de Instrues
Robocode
Manual de Instrues
Professores Orientadores:
Jairo Franciso de Souza
Victor Strele de Andrade Menezes
2
Sumrio
O que Robocode?........................................................................................................................... 5
Histria................................................................................................................................................ 8
A Liga Brasileira de Robocode........................................................................................................ 8
Como Instalar?................................................................................................................................. 10
Pr-Requisitos:............................................................................................................................ 10
Linux:............................................................................................................................................ 10
Windows:..................................................................................................................................... 13
Iniciando no Robocode.................................................................................................................. 15
Anatomia de um Rob............................................................................................................... 17
Primeiro Rob............................................................................................................................. 17
Criando um Rob................................................................................................................... 18
Primeiro Rob........................................................................................................................ 18
O Editor de Robs................................................................................................................. 18
Um Novo Rob....................................................................................................................... 19
Continuando a anlise.......................................................................................................... 21
Fogo Vontade!..................................................................................................................... 22
Compilando seu Rob........................................................................................................... 22
Fsica do Jogo.................................................................................................................................. 23
Coordenadas e Convenes de Direes...............................................................................23
Medies de Tempo e Distncia em Robocode....................................................................23
A Fsica Por Trs dos Movimentos dos Robs.......................................................................24
Rob, Canho e Rotao do Radar.......................................................................................... 24
O Projtil...................................................................................................................................... 25
Colises........................................................................................................................................ 25
Robocode API.................................................................................................................................. 26
Mtodos....................................................................................................................................... 26
Eventos......................................................................................................................................... 29
Analisando Estratgias.................................................................................................................. 34
Rob Fire..................................................................................................................................... 34
Rob RamFire............................................................................................................................. 35
Referncias:..................................................................................................................................... 37
3
O que Robocode?
4
Robocode vem com seu prprio instalador, editor built-in robo e compilador Java,
e s exige um Java Virtual Machine (JVM) previamente instalado. Assim, tudo que um
desenvolvedor precisa para comear fornecido com o arquivo principal Robocode
distribuio ( robocode-xxx-setup.jar ). O Robocode tambm suporta o desenvolvimento
de robs utilizando IDEs externas, como por exemplo, Eclipse , IntelliJ IDEA , NetBeans e
Visual Studio, que proporcionam um desenvolvimento melhor do que o editor de rob
do Robocode.
5
Histria
O jogo foi originalmente criado por Matthew A. Nelson, aka Mat Nelson, como um
esforo pessoal no final de 2000 e se tornou profissional quando ele o trouxe IBM, na
forma de um download AlphaWorks, em julho de 2001.
No incio de 2005, Robocode foi trazido para o SourceForge como Open Source na
verso 1.0.7. Neste ponto, o desenvolvimento de Robocode estava um pouco parado. No
entanto, a comunidade em torno de Robocode comeou a desenvolver suas prprias
verses, a fim de se livrar de bugs e tambm para colocar novas funcionalidades.As
Contribuies para o Robocode Open Source e depois no projeto RobocodeNG foram
feitas por Flemming N. Larsen.
Como nada parecia acontecer com Robocode em mais de um ano, Flemming
Larsen N. assumiu o projeto Robocode no SourceForge como administrador e
desenvolvedor em julho de 2006. O projeto RobocodeNG foi abandonado, mas a variante
Robocode 2006, que continha uma srie de contribuies da comunidade, foi
incorporada pelo Robocode Oficial com a verso 1.1. Desde ento, os lotes de novas
verses do Robocode tem sido lanados com mais e mais recursos e contribuies da
comunidade.
Recentemente (a partir da verso 1.7.2.0), a plataforma .NET passou a ser suportada,
atrves de um plug-in fornecido por Pavel Savara baseado em jni4net e desenvolvido por
ele prprio.
6
Como Instalar?
Pr-Requisitos:
JAVA 6 ou mais recente
Linux:
Antes de iniciar assegure-se que uma verso do JAVA 6, ou mais recente est instalado
no sistema:
Acesse um Terminal (ctrl + alt + T) e execute o comando:
java -version
Instalando o Robocode:
7
*O nome da sua Central de Programas pode variar de acordo com a sua verso.
8
3. Clique na opo Instalar e informe a senha de administrador quando solicitado e
aguarde o fim da instalao.
4. Se nenhum erro for reportado o Robocode est pronto pra usar, basta ir nos
aplicativos e abri-lo.
* Caso queira executar o Robocode com grficos melhores execute ele como
administrador:
Abra um Terminal (ctrl + alt + T) e execute os comandos:
sudo su
robocode
Windows:
Antes de iniciar assegure-se que uma verso do JAVA 6, ou mais recente est instalado
no sistema.
1. Acesse o Menu Iniciar / Executar e digite CMD
2. Aps abrir o Prompt de Comando digite:
java -version
9
O 6 de Java version 1.6.0_10 representa a verso instalada.
Executando o Robocode:
10
Iniciando no Robocode
Aps a instalao, primeiro, vamos executar uma batalha para ver como o jogo se
parece. Basta clicar no Menu Battle, em seguida, selecione New, como mostrado
na imagem abaixo:
Ser mostrada a tela New Battle, onde voc escolhe os robs e as opes para
uma batalha. Para esta batalha, vamos experimentar MyFirstRobot, RamFire e
Tracker. Adicione-os, clicando duas vezes em seus nomes (ou selecionando cada
uma e clicando em Add). A tela agora deve ser algo como isto:
11
Clicar em Next. A primeira opo da nova tela Number of Rounds.
H outros ajustes que podem ser feitos como o tamanho do campo de batalha, o
tempo de inatividade e a taxa de resfriamento da arma, mas por enquanto no
vamos modificar essas funes. Por fim, clique no boto Start Battle para
comear! Preste ateno para a pequena dancinha do Tracker quando ele ganha
rodadas.
Aps o fim da batalha exibida as estatsticas da partida:
12
Anatomia de um Rob
Body (Chassi) - Carrega a arma com o radar no topo. O corpo utilizado para
mover o rob para frente e para trs, bem como virar esquerda ou direita.
Radar - Montado sobre a arma e usado para localizar outros robs quando
movido. O radar pode virar esquerda ou direita. O radar gera eventos
onScannedRobot quando forem detectados robs.
Primeiro Rob
Criando um Rob
Criar um rob pode ser fcil. Fazer do seu rob um vencedor no . Voc pode passar
apenas alguns minutos sobre ele, ou voc pode passar meses e meses. Vou avis-lo que
escrever um rob pode ser viciante! Depois que voc terminar, voc vai observar a sua
criao, depois de passar por dificuldades no desenvolvimento, cometer erros e perder
tiros crticos. Mas como voc aprende, voc vai ser capaz de ensinar seu rob como agir e
o que fazer, onde ir, o que para evitar, e onde disparar. Deve se esconder em um canto,
ou saltar para a briga?
13
Primeiro Rob
Robocode vem com uma srie de Robs de exemplo para voc ter uma ideia e ver como
as coisas funcionam. Voc pode usar o Editor de Robs para ver todos eles.
Nesta seo, vamos usar o Editor de Robs para criar o seu prprio rob.
O Editor de Robs
Um Novo Rob
package Robo1;
import robocode.*;
//import java.awt.Color;
/**
* Robo1 criado por (seu nome aqui)
*/
public class Robo1 extends Robot
{
/**
14
* run: Comportamento Padro de Robo1's
*/
public void run() {
// A inicializao do rob deve ser colocada aqui
// setColors(Color.red,Color.blue,Color.green); // body,gun,radar
/**
* onScannedRobot: O que fazer quando voc v um outro rob
*/
public void onScannedRobot(ScannedRobotEvent e) {
// Substitua a prxima linha com o comportamento padro que voc desejar
fire(1);
}
/**
* onHitByBullet: O que fazer quando voc for atingido por uma munio
*/
public void onHitByBullet(HitByBulletEvent e) {
15
// Substitua a prxima linha com o comportamento padro que voc desejar
back(10);
}
/**
* onHitWall: O que fazer quando voc atingir uma parede
*/
public void onHitWall(HitWallEvent e) {
// Substitua a prxima linha com o comportamento padro que voc desejar
back(20);
}
}
Continuando a anlise
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
16
}
while(true) { } - Significa: Enquanto a condio true verdadeira, faa tudo o que est
entre as chaves { }.
Uma vez que true sempre verdadeiro, isso significa: Faa o que est entre chaves
sempre.
O rob vai seguir fazendo isso sempre, at que ele seja destruido, devido instruo
while(true).
No to ruim, certo?
Fogo Vontade!
O jogo chama seu mtodo onScannedRobot sempre que durante uma das aes voc
v um outro rob. Essa funo nos diz vrias informaes importantes sobre o rob - seu
nome, quanto de vida ele tem, sua posio, onde est dirigindo, sua velocidade, entre
outras funes.
Contudo, uma vez que este um rob simples, no vamos olhar para essas funes
agora. Vamos apenas atirar!
17
Primeiro salve seu rob selecionando a opo Save no menu File. Siga as instrues para
salvar o seu rob.
Agora compile ele selecionando Compile no menu Compiler.
Se o seu rob compilar sem nenhum erro, voc pode iniciar uma nova batalha com ele.
Feche a janela do editor e inicie uma nova batalha, dessa vez seu rob vai aparecer na
lista para ser escolhido.
Aproveite e aps a batalha volte ao editor e abra o cdigo dos outros robs para ver
como certas coisas so feitas.
Fsica do Jogo
Coordenadas e Convenes de Direes
Tempo (t): O tempo no Robocode medido em ticks. Cada rob recebe um turno por
tick.
18
1 tick = 1 turn
Medida de Distncia: As unidades do Robocode so basicamente calculadas em pixels,
com duas excesses. Primeiro, todas as distncias so medidas com dupla
preciso(double), ento voc atualmente pode mover uma frao de um pixel. Segundo,
Robocode dimensiona automaticamente as batalhas para baixo pra caber na tela. Neste
caso, a unidade de distncia atualmente menor do que um pixel.
Taxa Mxima de Rotao do Rob: (10 - 0.75 * abs(velocidade)) graus / turno. Quanto
mais rpido voc estiver se movendo, mais devagar ser para fazer curvas.
Taxa Mxima de Rotao do Canho: 20 graus / turno. Esta adicionada taxa atual de
rotao do rob.
Taxa Mxima de Rotao do Radar: 45 graus / turno. Esta adicionada taxa atual de
rotao do canho.
O Projtil
Dano: 4 * Potncia do Disparo. Se a Potncia do Disparo > 1, ele faz um dano adicional =
2 * (Potncia 1).
19
Velocidade: 20 3 * Potncia do Disparo.
Temperatura do Canho: 1 + Potncia do Disparo / 5. Voc no pode disparar se a
Temperatura do Canho > 0. Todas os canhes esto quentes no incio de cada rodada.
Energia Retornada no Disparo: 3 * Potncia do Disparo.
Colises
Com outro Rob: Cada rob toma 0.6 de dano. Se um rob esta se afastando da coliso,
ele no ser interrompido.
Com uma Parede: AdvancedRobots tomam abs(velocidade) * 0.5 - 1; (Nunca < 0).
20
Robocode API
Essa seo vai tratar de algumas das funes principais usadas no jogo, para ver todas as
funes disponveis acesse a Robot API:
http://robocode.sourceforge.net/docs/robocode/
Mtodos
ahead(double distancia) : void - Move o rob frente, pela distncia, em pixels,
passada como parmetro
back(double distancia) : void Move o rob para trs, pela distncia calculada em
pixels
doNothing() : void No fazer nada nesse turno, significa que o rob ir ignorar sua vez
fire(double intensidade) : void Dispara imediatamente um projtil. A intensidade
do disparo subtrado da energia do rob. Por isso, quanto maior a intensidade voc
pretende gastar com o disparo, maior tambm ser a energia retirada do seu rob.
O disparo far dano (4 * intensidade) se acertar outro rob. Se a energia for maior que 1,
ele vai fazer um dano adicional de 2 * (intensidade - 1). Voc recupera (3 * Intensidade)
de energia de volta se voc acertar o outro rob. Voc pode chamar
Rules.getBulletDamage : double para obter o dano que um disparo com uma
intensidade especfica vai fazer.
A intensidade do disparo especificado deve estar entre Rules.MIN_BULLET_POWER e
Rules.MAX_BULLET_POWER.
Note-se que o canho no pode ser disparado se estiver superaquecido, o que significa
que getGunHeat () vai retornar um valor> 0.
Exemplo:
// Disparar uma bala com potncia mxima se a arma est pronta
if (getGunHeat() == 0) {
fire(Rules.MAX_BULLET_POWER);
}
getEnergy() : double - Retorna o nvel atual de energia do rob
21
getGunCoolingRate() : double Retorna a taxa de resfriamento da arma, por turno
getGunHeading() : double Retorna a direo que a arma do rob est apontando, em
graus
getGunHeat() : double Retorna a temperatura atual da arma
getHeading() : double Retorna a direo que o chassi do robo est apontando, em
graus
getNumRounds() : int - Retorna o nmero de rounds na batalha atual
getNumSentries() : int Retorna quantos robs sentinela esto esquerda na rodada
atual
getOthers() : int - Retorna o nmero de oponentes que esto esquerda na rodada
atual.
getRadarHeading() : double - Retorna o ngulo em graus que o radar est virado.
getRoundNum() : int - Retorna o nmero do round atual
getTime() : long - Retorna o tempo de jogo do round atual
getVelocity() : double Retorna a velocidade do rob, medida em pixel/turno
getX() : double Retorna a posio X do rob. (0,0) no canto inferior esquerdo
getY() : double Retorna a posio Y do rob. (0,0) no canto inferior esquerdo
normalRelativeAngleDegrees(double angulo) : void - Funo muito utilizada para
normalizar o ngulo de um dos componentes do rob em relao um referencial.
setAllColors(Color cor) : void Define todas as cores do rob para a cor passada
como parmetro
22
setScanColor(Color cor) : void - Define a cor do arco do Scanner do rob.
Eventos
sensato conhecer todos os eventos para ter a mente mais aberta quando for comear a
programar a inteligncia de seu rob.
run() : void
executado quando o round for iniciado.
Diferente do que muitos pensam, esse evento s ser chamado novamente quando
iniciar outro round. Por isso muito comum e recomendado usar um loop infinito dentro
dele, para que seu rob nunca fique parado quando no tiver sendo executado outro
evento.
Exemplo:
23
public void Run() {
do {
turnRadarLeft(360);
setAhead(200);
turnRight(300);
} while(true)
}
um dos eventos mais importantes, pois a nica forma de saber a energia, a distncia,
o ngulo do seus inimigos para poder atira nele. A no ser se voc colidir com outro
rob, que j seria um outro evento.
Exemplo:
onWin() : void
executado quando seu rob ganha o round.
J que aqui o round terminou, aproveite para programar uma risadinha, uma dancinha,
malhando os derrotados ou para o seu rob parar de andar, evitando que bata na
parede, perdendo energia.
Exemplo:
24
}
Aproveite que voc est bem perto do inimigo, vire o canho para ele e mande um tiro
de fora mxima, porque dificilmente errar.
Exemplo:
Quando seu rob bate na parede, perde energia. Ento o mnimo que voc deve fazer
mudar a direo dele, seno ele vai ficar de encontro parede at perder toda a sua
energia.
Exemplo:
25
onHitByBullet(HitByBulletEvent evento) : void
Este mtodo chamado quando seu rob leva um tiro
Se a estratgia do seu rob ficar parado enquanto atira, bom utilizar esse evento
para sair do local de onde acabou de levar um tiro, para voc no se tornar um alvo fcil.
Exemplo:
Mtodos da classeBulletHitEvent:
Exemplo:
public void onBulletHit(BulletHitEvent e) {
acertos++;
}
Mtodos da classeBulletMissedEvent
getBullet() : Bullet - Retorna o Bullet (dados do tiro), de seu rob, que bateu na
parede.
Exemplo:
onDeath() : Void
26
executado se seu rob morrer.
Exemplo:
27
Analisando Estratgias
Analisando o cdigo de alguns dos robs de exemplo:
Rob Fire
public class Fire extends Robot {
int dist = 50; // cria uma distncia padro para se mover
/**
* run: Aqui esto as funes principais do Fire
*/
public void run() {
// Seta as cores
setBodyColor(Color.orange);
setGunColor(Color.orange);
setRadarColor(Color.red);
setScanColor(Color.red);
setBulletColor(Color.red);
/**
* Quando outro rob for detectado: Atira!
*/
public void onScannedRobot(ScannedRobotEvent e) {
// Se o outro rob est prximo, e ele tem bastante vida,
// dispara intensamente!
if (e.getDistance() < 50 && getEnergy() > 50) {
fire(3);
} // caso contrrio, atira com intensidade 1.
else {
fire(1);
}
// Depois de atirar chama o radar novamente,
// antes de girar o canho
scan();
}
/**
* Quando for atingido por um disparo:
* Gira perpendicularmente bala e avana um pouco.
*/
public void onHitByBullet(HitByBulletEvent e) {
turnRight(normalRelativeAngleDegrees(90 - (getHeading() -
e.getHeading())));
28
ahead(dist); //avana
dist *= -1;
scan();
}
/**
* Quando o rob bate em outro: Ajusta a mira pra ele e dispara
* intensamente
*/
public void onHitRobot(HitRobotEvent e) {
turnGunRight(turnGunAmt);
fire(3);
}
}
Rob RamFire
while (true) {
turnRight(5 * turnDirection);
}
}
/**
* onScannedRobot: Quando localiza um alvo ele mira e vai atrs
*/
public void onScannedRobot(ScannedRobotEvent e) {
29
} else {
turnDirection = -1; //caso contrrio, sentido anti-horrio
}
turnRight(e.getBearing());
ahead(e.getDistance() + 5); //calcula a distncia pro inimigo e
avana
scan(); // usa o radar novamente para localizar os oponentes
}
/**
* onHitRobot: Quando atingido, o rob mira o seu oponente e atira
* com intensidade
*/
public void onHitRobot(HitRobotEvent e) {
if (e.getBearing() >= 0) { // verifica o ngulo do oponente
turnDirection = 1; // e toma a direo
} else {
turnDirection = -1;
}
turnRight(e.getBearing());
30
Referncias:
http://compartilhartecnologia.blogspot.com.br/2011/05/verificando-versao-e-atualizando-o-java.html .
Acessado em 26 de Maio de 2016
31