Conceitos técnicos de Robocode
Depois dos conceitos básicos sobre o robocode, descritos neste post, vamos aprofundar mais o estudo da plataforma nesta postagem.
Pra início de conversa, toda classe criada para ser um robô deve extender a classe Robot, do pacote robocode.Robot. A classe Robot tem vários métodos abstratos, que podem ser chamados para executar uma ação, ou sobreescritos quando você deseja tratar alguma ação. Alguns métodos são usados para configurar o seu robô, outros, são chamados quando determinado evento acontece.
Os principais eventos para a execução de uma ação são:
-
setColors(Color bodyColor, Color gunColor, Color radarColor) - Muda respectivamente a cor do corpo, arma e radar do robô;
-
ahead(double pixels) - Move o robo para frente uma quantidade X de pixels;
-
back(double pixels) – Move o robo para trás uma quantidade X de pixels;
-
turnRight(double degree) – Gira o robô para a direita;
-
turnLeft(double degree) – Gira o robô para a esquerda;
-
turnGunRight(double degree) – Gira a arma para a direita;
-
turnGunLeft(double degree) – Gira a arma para a esquerda;
-
turnRadarRight(double degree) – Gira o radar para a direita;
-
turnRadarLeft(double degree) – Gira o radar para a esquerda;
-
fire(double power) : Dispara o canhão com a en
-
getBattleFieldWidth() : Obtém a largura (em píxels) do campo de batalha;
-
getBattleFieldHeight() : Obtém a altura (em píxels) do campo de batalha;
-
getX() : Obtém a coordenada “x” do robô:
-
getY() : Obtém a coordenada “y” do robô;
-
getHeading(): Obtém a direção do robô em graus;
-
getGunHeading(): Obtém a direção da arma em graus;
-
getRadarHeading(): Obtém a direção do radar em graus;
-
getDistance(): Obtém a distância do oponente em pixels.
-
getBearing(): Obtém o ângulo do oponente em relação a você.
Os principais eventos para tratamento de uma ação são:
-
run() : Principal método a ser sobrecarregado, é o método chamado quando o robô é iniciado; Ex:
@Override public void run(){ setColors(Color.blue,Color.yellow, Color.red); }
-
onScannedRobot(ScannedRobotEvent e) : Método chamado quando um robô é escaneado; Ex:
@Override public void onScannedRobot(ScannedRobotEvent e) { double distance = e.getDistance(); double power = distance >= 50 ? 2 : 1; fire( power ); }
-
onHitByBullet(HitByBulletEvent E) : Método chamado quando seu robô é atingido por um tiro; Ex:
@Override public void onHitByBullet(HitByBulletEvent e) { back(10); }
-
onHitWall(HitWallEvent e) : Método chamado quando seu robô atinge uma parede do campo de batalha; Ex:
@Override public void onHitWall(HitWallEvent e) { back(20); }
Obs: dentro do método run(), deve ser criado um loop infinito, que será sempre executado pelo robô. Ex:
@Override
public void run(){
setColors(Color.blue,Color.yellow, Color.red);
//Loop infinito do robô
while(true) {
turnRight(180);
ahead(100);
turnGunRight(90);
back(100);
turnGunRight(90);
}
}
Com essas informações, você ja pode criar um bom robô para a competição de robocode.