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]