Tutorial Robocode
Tutorial Robocode
64MB de RAM
Deve ter instalado o JSDK verso 1.3 em diante. (Se no tiver, baixe daqui a
verso 1.4 ), instale ento o Robocode. Clique neste arquivo e deixe que ele
se instale. Ao fim haver um cone na rea de trabalho do Windows com o
ttulo Robocode.
Regras
A batalha pode ser configurada: a quantidade de rounds, o tamanho do ring
em pixels, os robs que lutaro entre s. Pode escolher visualizar o nome em
baixo dos robs, as energias, os seus radares, e permitir a mudana de cor
durante a batalha.
O rob pode se movimentar para frente ou para traz e fazer curvas. O
canho(Gun) pode virar no sentido horrio e anti-horrio em 360 graus, e
dar tiros(Bullet) de fora >0 e <=3. Quando o rob fica
desabilitado(Disabled), ele perde seus movimentos, isso acontece quando
sua energia fica igual a 0. O rob "cego", a nica coisa que ele v so os
robs adversrios scaneado pelo radar(Radar), os tiros o radar no enxerga.
Todos os robs comeam cada round com energia 100, e os que ficarem com
energia abaixo de 0 vo sendo eliminados (explodem) restando apenas um, e
ento comea um novo round. No fim de todos os rounds a batalha acaba e
aparece uma tabela mostrando a pontuao e a colocao.
Perde energia quando:
bate na parede: (energia) - 1
bate em outro rob(os dois perdem): (energia) - 1
quando atira: (energia) - (poder_do_tiro).
quando leva um tiro: (energia) - (4 * poder_do_tiro_advesrio).
Ganha energia quando:
acerta um tiro no adversario: (energia) + (2 *
(energia_perdida_do_adversrio - poder_do_tiro).
anteriormente.
//Onde est escrito "Robot" digite no lugar "AdvancedRobot" que uma classe mais
avanada.
public void run() {
while (true) { // while() um comando de repetio. Como est sendo
mandado um parmetro
// "true", causar um loop infinito, fazendo repetir os comandos dentro
dele at a batalha acabar.
// Quando outro evento tiver sendo executado a repetio interrompida e
voltar de onde parou
// quando acabar de executar os comandos do evento.
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
}
}
public void onScannedRobot(ScannedRobotEvent e){
fire(1);
}
}
Eventos
sensato conhecer todos os eventos para ter a mente mais aberta quando for
comear a programar a inteligncia de seu rob.
Os eventos so chamados quando acontece algo especfico no decorrer do
combate. Alguns deles te enviam, por parmetro, dados do rob adversrio
em questo para voc trabalhar com esses valores dentro do evento.
Exemplo: se voc digitar "e.getBearing()" dentro de algum evento que
contm na classe da varivel, enviada por parmetro, o mtodo
"getBearing()" , como os tipos ScannedRobotEvent e HitRobotEvent,
retornar o ngulo do rob inimigo em questo. Sendo que "e" o nome da
varivel usada como parmetro, que pode ser qualquer outro.
INDICE:
Run
onScannedRobot
onWin
onHitRobot
onHitWall
onHitByBullet
onBulletHit
onBulletMissed
onBulletHitBullet
onDeath
onRobotDeath
onSkippedTurn
onCustomEvent
Run
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:
public void Run()
{
do
{
turnRadarLeft(360);
setAhead(200);
turnRight(300);
}while(true)
}
onScannedRobot
Executado quando o radar do seu rob encontra um adversrio.
um dos eventos mais importantes, pois a nica forma de saber a energia,
a distncia, o ngulo dos seus inimigos para poder atira nele. A no ser se
voc colidir com outro rob, que j seria um outro evento.
Metodos da classe ScannedRobotEvent:
Comandos
Tipo
Retorno
Descrio Retorno
getName()
getBearing()
String
double
getBearingRadians()
double
getDistance()
double
getEnergy()
getHeading()
double
double
getHeadingRadians()
double
getVelocity()
double
Exemplo:
public void onScannedRobot(ScannedRobotEvent Inimigo)
{
double angulo = Inimigo.getBearing();
double distancia = Inimigo.getDistance();
if ( distancia < 200 )
{
turnGunRight(angulo);
fire(2);
}
}
onWin
executado quando seu rob ganha o round.
J que aqui o round terminou, aproveite para programar uma risadinha, uma
dana, malhando dos derrotados. Ou para ele parar de andar, evitando que
bata na parede, perdendo energia.
Exemplo
public void onWin(WinEvent e)
{
turnRight(36000);
}
onHitRobot
executado quando seu rob bate em outro rob.
Aproveite que voc est bem perto do inimigo, vire o canho para ele e
mande um tiro de fora mxima, porque dificilmente errar.
Mtodos da classe HitRobotEvent:
Comandos
getName()
getBearing()
Tipo
Retorno
String
double
getBearingRadians()
double
getEnergy()
isMyFault()
double
boolean
Descrio Retorno
Retorna o nome do rob adversrio colidido.
ngulo em graus do rob adversrio em relao ao seu
rob
ngulo em radianos do rob adversrio em relao ao
seu rob.
Retorna a energia do rob adversrio.
Retorna true se foi seu rob quem originou o evento, e
false se foi o adversrio que bateu em seu rob.
Exemplo:
public void onHitRobot(HitRobotEvent INI)
{
turnRight(INI.getBearing());
fire(3);
}
onHitWall
executado quando seu rob colide com a parede.
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.
Mtodos da classe HitWallEvent:
Comandos
getBearing()
Tipo
Retorno
double
getBearingRadians()
double
Descrio Retorno
ngulo em graus da parede batida em relao ao seu
rob.
ngulo em radianos da parede batida em relao ao
seu rob.
Exemplo:
public void onHitWall(HitWallEvent e)
{
turnLeft(180);
}
onHitByBullet
executado 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.
Mtodos da classe HitByBulletlEvent:
Comandos
getName()
Tipo
Retorno
String
getBearing()
double
getBearingRadians()
double
getHeading()
double
getHeadingRadians()
double
getBullet()
Bullet
getPower()
getVelocity()
double
double
Descrio Retorno
Retorna o nome do rob adversrio que te acertou um
tiro.
Retorna o ngulo do rob adversrio em relao ao seu
rob.
ngulo em radianos do rob adversrio em relao ao
seu rob.
Retorna o ngulo em graus do rob adversrio em
relao a tela.
ngulo em radiaons do rob adversrio em relao a
tela.
Retorna o Bullet (tiro) do rob adversrio que atingiu
seu rob.
Retorna a fora do tiro.
Retorna a velocidade do tiro.
Exemplo:
public void onHitByBullet(HitByBulletEvent e)
{
ahead(100);
}
onBulletHit
executado quando seu tiro acerta um adversrio.
Mtodos da classe BulletHitEvent:
Comandos
getName()
Tipo
Retorno
String
getBullet()
Bullet
getEnergy()
double
Descrio Retorno
Retorna o nome do rob adversrio que voc acertou um
tiro.
Retorna o Bullet (dados do tiro) de seu rob que atingiu o
adversrio.
Retorna a energia do rob adversrio aps levar o tiro.
Exemplo:
public void onBulletHit(BulletHitEvent e)
{
Acertos++;
}
onBulletMissed
executado quando uma de suas balas colide com a parede(erra o tiro).
Mtodos da classe BulletMissedEvent:
Comandos
getBullet()
Tipo
Retorno
Bullet
Descrio Retorno
Retorna o Bullet (dados do tiro), de seu rob, que bateu na
parede.
Exemplo:
public void onBulletMissed(BulletMissedEvent e)
{
ERROS++;
}
onBulletHitBullet
executado quando uma de suas balas colide com outra bala.
Mtodos da classe BulletHitBulletEvent:
Comandos
getBullet()
getHitBullet()
Tipo
Retorno
Bullet
Bullet
Descrio Retorno
Retorna o Bullet (dados do tiro) de seu rob.
Retorna o Bullet do rob adversrio.
onDeath
executado se seu rob morrer.
Exemplo:
public void onDeath(DeathEvent e)
{
System.out.println(getName()+" morreu!");
System.out.println("Quantidade de inimigos ainda vivo: "+getOthers());
}
onRobotDeath
executado quando morre um adversrio.
Mtodos da classe RobotDeathEvent:
Comandos
getName()
Tipo
Retorno
String
Descrio Retorno
Retorna o nome do rob que morreu.
Exemplo:
public void onRobotDeath(RobotDeathEvent e)
{
if(Nome==e.getName())
Nome=null;
}
onSkippedTurn
Se voc estiver um longo tempo sem ao.
Exemplo:
public void onSkippedTurn(SkippedTurnEvent e)
{
turnGunLeft(360);
}
onCustomEvent
Quando um uso de condio "addCustomEvent" satisfeita.
Comandos
getCondition()
Tipo
Retorno
Condition
Descrio Retorno
Retorna a condio que gerou o evento.
Exemplo:
public void onCustomEvent(CustomEvent e)
{
}
Mtodos
Movimentao - Robot
Comando
ahead( double )
Parmetro
a distncia que o rob
dever percorrer.
back( double )
turnRight( double )
turnLeft( double )
turnGunRigth( double )
turnGunLeft( double )
turnRadarRigth( double
)
turnRadarLeft( double )
Descrio
Movimenta o rob para frente, uma distncia x
dada por parmentro. Se o rob bater em outro, ou
na parede antes de completar a distancia desejada o
mtodo interrompido.
Semelhante ao mtodo anterior, a nica diferena
que o rob move para traz.
Gira o rob para a direita (sentido horrio).
Gira o rob para a esquerda (sentido anti-horrio).
Gira o canho para a direita.
Gira o canho para a esquerda.
Gira o radar para a direita.
Gira o radar para a esquerda.
Movimentao - AdvancedRobot
Os comandos da classe AdvancedRobot que comeam com "set" eles funcionam como os
herdados da classe Robot. A diferena que enquanto o mtodo est sendo executado ele
continua executando as linhas de comando abaixo. Com isso possvel misturar
movimentos. Por exemplo, se tiver:
ahead(100);
turnRight(90);
o rob ir andar para frente e depois que tiver terminado de percorrer a distncia 100, ele
girar 90. Mas se tiver:
setAhead(100);
setTurnRight(90);
o rob andar para frente e girar 90 ao mesmo tempo, fazendo uma curva.
Comando
setAhead( double )
setBack( double )
setTurnRight( double )
setTurnLeft( double )
setTurnGunRigth( double )
setTurnGunLeft( double )
setTurnRadarRigth( double )
setTurnRadarLeft( double )
Parmetro
a distncia que o rob dever percorrer.
a distncia que o rob dever percorrer.
o ngulo em graus que o rob dever
girar.
o ngulo em graus que o rob dever
girar.
o ngulo em graus que o canho dever
girar
o ngulo em graus que o canho dever
girar
o ngulo em graus que o radar dever
girar
o ngulo em graus que o radar dever
girar
Descrio
Herdado do mtodo ahead.
Herdado do mtodo back.
Herdado do mtodo turnRight.
Herdado do mtodo turnLetf.
Herdado do mtodo
turnGunRigth.
Herdado do mtodo
turnGunLeft.
Herdado do mtodo
turnRadarRigth.
Herdado do mtodo
turnRadarLeft.
Movimentao - AdvancedRadiansRobot
Esses mtodos "Radians" so usados quando vai se trabalhar com PI, seno, cosseno,
tangente.
Os mtodos que comeam com "set" so como aqueles visto acima, que continuam lendo as
linhas de comando abaixo, misturando movimentos.
Comando
turnRightRadians( double )
turnRightRadians( double )
turnGunRightRadians( double )
turnGunLeftRadians( double )
turnRadarRigthRadians( double
)
turnRadarLeftRadians( double )
setTurnRightRadians( double )
setTurnLeftRadians( double )
setTurnGunRightRadians(
double )
setTurnGunLeftRadians( double
)
setTurnRadarRigthRadians(
double )
setTurnRadarLeftRadians(
double )
Parmetro
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
Descrio
Gira o rob para a direita.
Gira o rob para a esquerda.
Gira o canho para a direita.
Gira o canho para a esquerda.
Gira o radar para a direita.
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
o ngulo em radianos
Tiro - Robot
Comando
fire( double )
Parmetro
a fora do tiro, e subtraido da energia
de seu rob.
fireBullet(
double )
Descrio
Tiro - AdvancedRobot
Comandos
setFire( double )
setFireBullet(
double )
Parmetro
a fora do tiro, e subtraido da
energia de seu rob.
a fora do tiro, e subtraido da
energia de seu rob.
Descrio
Herdado do mtodo fire.
Herdado do mtodo fireBullet.
Parmetro
Descrio
Tipo do
Retorno
String
double
double
getY()
double
getWidth()
getHeight()
getHeading()
double
double
double
getGunHeading()
double
getRadarHeading()
getGunCoolingRate()
getGunHeat()
getVelocity()
double
double
double
double
Descrio do Retorno
Retorna o nome do rob.
Retorna a energia corrente do rob.
A posio X(eixo horizontal) do rob na arena de batalha. Quando
0(zero) ele estar encostado no lado esquerdo.
A posio Y(eixo vertical) do rob na arena de batalha. Quando 0(zero)
ele estar encostado na parte de baixo.
Retorna a largura do rob.
Retorna a altura do rob.
Retorna o ngulo em graus ( de 0 at 360 ) que o rob est virado. Se
retornar 0(zero) ele est virado para a esquerda, se retornar 90 ele est
voltado para cima.
Retorna o ngulo em graus que o canho est virado. Como no mtodo
anterior.
Retorna o ngulo em graus que o radar est virado.
Retorna quanto o canho est virando no momento corrente.
Retorna a velocidade do rob.
Tipo do
Retorno
double
getGunHeadingRadians()
double
getRadarHeadingRadians()
double
getTurnRemainingRadians()
getGunTurnRemainingRadians()
getRadarTurnRemainingRadians()
double
double
double
Retorno
Retorna a direo que o rob est voltado, em radianos
(de 0 at 2*PI).
Retorna o ngulo em radianos do canho est apontado
em relao a tela
Retorna o ngulo em radianos do radar est voltado em
relao a tela
Tipo do
Retorno
int
double
double
int
int
long
Retorno
Retorna o total de oponentes ainda vivos no round.
Retorna a altura da arena de batalha.
Retorna a largura da arena de batalha.
Retorna o total de rounds da batalha.
Retorna o nmero do round corrente.
Retorna o tempo do round. Quando inicia outro round o tempo volta a
0(zero). O tempo equivale ao nmero de quabgazul.jpgdros
mostrados.
Outros
Comando
doNothing()
scan()
stop()
stop( boolean )
resume()
setResume()
setStop()
setStop(
boolean )
finalize()
Parmetro
nenhum parmetro
nenhum parmetro
nenhum parmetro
nenhum parmetro
nenhum parmetro
nenhum parmetro
nenhum parmetro
Descrio
Funes
Voc pode digitar a funo em qualquer lugar dentro do "public class", no
incio ou no fim do cdigo, a linguagem Java permite.
INDICE:
anguloRelativo
mira
dancinha
dancinha2
dancinha3
risadinha
fogo
tiroFatal
pertoParede
anguloRelativo
Essa funo muito utilizada, at pelos robs do diretrio samples. Nela voc manda por
parmetro o ngulo(valor do tipo double) a ser deslocado pelo radar, ou pelo canho, ou at
mesmo do seu rob se voc querer ir em direo ao inimigo, a funo retornar se a volta
menor ser no sentido horrio ou anti-horrio.
adversrio
Obs: Sempre "Right", nunca use "Left" para essa funo porque no da
certo.
mira
Isso na verdade um procedimento e no uma funo, criado em base da funo anterior.
Ela mira o canho com mais rapidez e o cdigo mais limpo. A funo anterior j est
embutida, ela no ser mais necessria.
dancinha
Procedimento que voc usa para gozar do adversrio ou comemorar quando
ganhar um round.
public void dancinha()
{
setAhead(5);
setTurnRight(360D);
setTurnGunLeft(360D);
setTurnRadarRight(30D);
}
dancinha2
Aqui outro tipo de dancinha.
public void dancinha2()
{
setMaxVelocity(8D);
setTurnRight(dir * 30);
setTurnGunLeft(dir * 30);
setTurnRadarRight(dir * 30);
if(getTime() % (long)2 == 0L)
dir *= -1;
}
dancinha3
Essa comemorao sai atirando bala pra tudo que lado
public void dancinha3()
{
setMaxVelocity(5);
setTurnGunRight(10000);
while(true)
{
ahead(20);
back(20);
if (getEnergy() > 0.1)
fire(0.1);
}
}
risadinha
Malhando dos perdedores. Treme o rob como se estivesse rindo.
public void rizadinha()
{
for (int i = 0; i < 50; i++)
{
turnRight(30);
turnLeft(30);
}
}
fogo
Esse procedimento melhora o tiro do seu rob, voc no disperdiar energia
e o rob parar de atirar de muito longe quando a energia dele for menor que
15.
public void fogo(double Distancia)
{
if (Distancia> 200 || getEnergy() < 15)
fire(1);
else if (Distancia > 50)
fire(2);
else
fire(3);
}
Para usar:
fogo(e.getDistance());
tiroFatal
Esse procedimento da um tiro baseado na energia inimiga, ela muito boa
para dar o ltimo quando o adversrio estiver com um tiro para
morrer(energia <12), porque seu rob no disperdiar energia. Por
exemplo, se o adversrio estiver com energia=3, e voc der um tiro 3 voc
vai mat-lo e vai ganhar 3 de energia (3*2-3 =3), mas com essa funo voc
tambm matar e ganhar 5.15 de energia (3*2-0.85=5.15)
public void tiroFatal(double EnergiaIni)
{
double Tiro = (EnergiaIni / 4) + .1;
fire(Tiro);
}
Para usar:
if(e.getEnergy<12)
tiroFatal(e.getEnergy);
else
fire(2);
pertoParede
Funo que retorna true(verdadeiro) se seu rob est perto da parede
public boolean pertoParede()
{
return (getX()<50 || getX()>getBattleFieldWidth()-50 || getY()<50 ||
getY()>getBattleFieldHeight()-50);
}