Robocode - Funções

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.

Índice

anguloRelativo

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)); 
Observação: Sempre "Right", nunca use "Left" para essa função porque não da certo.

mira

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);

dancinha

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();

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;
	}
}

No evento onWin digite:

dancinha2();

dancinha3

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);
		}
	}
}

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ê 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());

tiroFatal

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);
}

pertoParede

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]