Clique aqui e veja todas as aulas
Aula 2: Como Instalar o Robocode - Guia Passo a Passo !
Aula 3: Conhecendo a Linguagem Java
Aula 4: Explorando o Ambiente do Robocode
Aula 5: Criando seu Primeiro Robô no Robocode
Aula 6: Movimentação Básica – Fazendo seu Robô se Mover
Aula 7: Usando o Radar – Detectando Outros Robôs
Aula 8: Programando Ataques – Armas e Fogo
Aula 9: Evitando Paredes e Obstáculos
Aula 10: Estratégias Defensivas no Robocode
Aula 11: Implementando Estratégias Simples de Batalha
Aula 12: Depurando e Testando seu Robô
Aula 13: Técnicas Avançadas de Programação no Robocode
Aula 14: Participando de Batalhas e Torneios
Aula 15: Dicas para Otimizar o Desempenho do seu Robô
Aula 16: Conclusão – A Jornada no Mundo do Robocode
A Importância da Defesa no Robocode
No Robocode, não basta apenas atacar os inimigos com toda a força. Um robô eficaz é aquele que consegue evitar ser atingido enquanto aproveita oportunidades para contra-atacar. Afinal, como diz o ditado: "A melhor defesa é uma boa defesa" (ou algo assim).
Movimentação Evasiva
A movimentação é uma das principais ferramentas defensivas que você tem à disposição. Movimentos imprevisíveis dificultam que os inimigos acertem seu robô.
1. Movimentos Aleatórios
Mover-se de forma aleatória pode confundir os oponentes e tornar seu robô um alvo mais difícil.
Exemplo:
import java.util.Random;
public void run() {
Random random = new Random();
while (true) {
setAhead(100 + random.nextInt(200)); // Avança entre 100 e 300 pixels
setTurnRight(random.nextInt(90) - 45); // Vira entre -45 e 45 graus
execute();
}
}2. Técnica de "Oscilação" (Swaying)
Alterne constantemente entre avançar e recuar enquanto muda a direção.
Exemplo:
public void run() {
while (true) {
setAhead(100);
setTurnRight(30);
execute();
setBack(100);
setTurnLeft(30);
execute();
}
}3. Movimentos em Zigue-zague
Essa técnica torna mais difícil para os inimigos preverem sua trajetória.
Exemplo:
public void run() {
while (true) {
setAhead(150);
setTurnRight(45);
execute();
setAhead(150);
setTurnLeft(90);
execute();
}
}Bloqueio e Absorção de Danos
Embora não possamos adicionar escudos ao robô (ainda não inventaram no Robocode), podemos minimizar os danos recebidos com algumas estratégias.
1. Gerenciamento de Energia
Evite ficar com energia baixa, pois seu robô se move mais lentamente e fica vulnerável.
- Economize Energia: Evite atirar desnecessariamente quando a chance de acertar for baixa.
- Monitoramento Contínuo: Use
getEnergy()para ajustar sua estratégia conforme o nível de energia.
2. Reduzindo o Dano de Colisões
Colidir com outros robôs ou paredes causa dano. Utilize sensores para evitar essas situações.
Exemplo:
public void onHitRobot(HitRobotEvent e) {
back(50); // Recuar ao colidir com outro robô
}3. Reação a Ser Atingido
Quando seu robô é atingido, você pode programá-lo para executar ações defensivas.
Exemplo:
public void onHitByBullet(HitByBulletEvent e) {
setTurnRight(90 - e.getBearing()); // Muda a direção em 90 graus
setAhead(100);
execute();
}Como Se Defender de Ataques Adversários
Além de se mover de forma evasiva, é importante reagir aos ataques dos inimigos de maneira estratégica.
1. Análise do Atacante
Quando for atingido, identifique de onde veio o tiro e ajuste seu movimento.
Exemplo:
public void onHitByBullet(HitByBulletEvent e) {
double anguloInimigo = e.getBearing();
turnRight(-anguloInimigo);
ahead(150);
}2. Desviar de Tiros
Embora não seja possível ver os projéteis, movimentos erráticos e mudanças de velocidade dificultam que os inimigos acertem você.
Dicas:
- Altere a Velocidade: Use
setMaxVelocity()para variar a velocidade máxima. - Mude de Direção Frequentemente: Evite se mover em linha reta por muito tempo.
3. Utilizar Eventos de Escaneamento
Ao detectar um inimigo, ajuste sua posição para evitar possíveis ataques.
Exemplo:
public void onScannedRobot(ScannedRobotEvent e) {
double distancia = e.getDistance();
if (distancia < 200) {
// Se o inimigo estiver perto, mova-se rapidamente
setTurnRight(90 - e.getBearing());
setAhead(100);
} else {
// Se estiver longe, mova-se lentamente e prepare-se para atacar
setTurnRight(e.getBearing());
setAhead(50);
}
execute();
}Combinação de Ataque e Defesa
Um robô eficaz sabe equilibrar ataque e defesa. Enquanto se defende, você pode procurar oportunidades para contra-atacar.
Exemplo:
public void onScannedRobot(ScannedRobotEvent e) {
double anguloParaInimigo = getHeading() + e.getBearing() - getGunHeading();
turnGunRight(normalizarAngulo(anguloParaInimigo));
if (getEnergy() > 50) {
fire(3); // Atira com potência máxima se tiver energia suficiente
} else {
fire(1); // Conserva energia com tiros mais fracos
}
// Movimento evasivo após atirar
setTurnRight(90 - e.getBearing());
setAhead(100);
execute();
}
public double normalizarAngulo(double angulo) {
while (angulo <= -180) angulo += 360;
while (angulo > 180) angulo -= 360;
return angulo;
}Dicas Finais para uma Defesa Sólida
- Seja Imprevisível: Não siga padrões fáceis de identificar.
- Mantenha a Calma: Não entre em pânico quando for atingido; use isso a seu favor.
- Aprenda com as Batalhas: Observe como os inimigos atacam e ajuste suas estratégias.
Resumo da Aula
Nesta aula, aprendemos a importância das estratégias defensivas no Robocode. Exploramos técnicas de movimentação evasiva, gerenciamento de energia e como se defender efetivamente de ataques adversários. Com essas habilidades, seu robô estará mais preparado para sobreviver e vencer as batalhas na arena.
O que vem a seguir?
Na próxima aula, vamos implementar estratégias simples de batalha que combinam tudo o que aprendemos até agora. Você verá como integrar movimentação, radar e ataque para criar um robô mais inteligente e eficaz. Prepare-se para elevar seu robô a um novo patamar!
