Você pode digitar a função em qualquer lugar dentro do public class, no início ou no fim do código, a linguagem Java permite.
Essa função é muito utilizada, até pelos robôs do diretório samples. Nela você manda por parâmetro o ângulo(valor do tipo double) a ser deslocado pelo radar, ou pelo canhão, ou até mesmo do seu robô se você querer ir em direção ao inimigo, a função retornará se a volta menor será no sentido horário ou anti-horário.
public double anguloRelativo(double ANG) {
if (ANG> -180 && ANG<= 180) {
return ANG;
}
double REL = ANG;
while (REL<= -180) {
REL += 360;
}
while (ANG> 180) {
REL -= 360;
}
return REL;
}
No evento onScanedRobot ou onHitRobot digite:
//para mirar o radar no adversário. turnRadarRight(anguloRelativo(e.getBearing()+getHeading()-getRadarHeading())); //para mirar o canhão no adversário. turnGunRight(anguloRelativo(e.getBearing()+getHeading()-getGunHeading())); //para virar seu robô em direção do adversário turnRight(anguloRelativo(e.getBearing));
Isso na verdade é um procedimento e não uma função, criado em base da função anterior. Ela mira o canhão com mais rapidez e o código mais limpo. A função anterior já está embutida, ela não será mais necessária.
public void mira(double Adv) {
double A=getHeading()+Adv-getGunHeading();
if (!(A > -180 && A <= 180)) {
while (A <= -180) {
A += 360;
}
while (A > 180) {
A -= 360;
}
}
turnGunRight(A);
}
No evento onScanedRobot ou onHitRobot digite:
//mira o canhão contra o adversário mira(e.getBearing()); fire(2);
Procedimento que você usa para gozar do adversário ou comemorar quando ganhar um round.
public void dancinha() {
setAhead(5);
setTurnRight(360D);
setTurnGunLeft(360D);
setTurnRadarRight(30D);
}
No evento onWin digite:
dancinha();
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;
}
}
No evento onWin digite:
dancinha2();
Essa comemoração 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);
}
}
}
Malhando dos perdedores. Treme o robô como se estivesse rindo.
public void rizadinha() {
for (int i = 0; i < 50; i++) {
turnRight(30);
turnLeft(30);
}
}
Esse procedimento melhora o tiro do seu robô, você não disperdiçará 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());
Esse procedimento da um tiro baseado na energia inimiga, ela é muito boa para dar o último quando o adversário estiver com um tiro para morrer(energia < 12), porque seu robô não disperdiçará energia. Por exemplo, se o adversário 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 função você também 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);
}
Função 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);
}
antes de mandar seu robô andar escreva:
if(pertoParede()) {
back(100);
} else {
ahead(100);
}
[voltar]