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
Comandos para Atirar no Robocode
Até agora, seu robô sabe se movimentar e detectar outros robôs, mas ainda falta uma coisa essencial: como atacar os adversários. Afinal, o objetivo é ser o último robô de pé na arena!
1. O Método fire(double power)
O comando básico para atirar é o método fire, que dispara um projétil com a potência especificada.
Exemplo:
fire(1); // Dispara um projétil com potência 12. Potência de Fogo
A potência do tiro pode variar entre 0.1 e 3.0. A potência afeta:
- Dano Causado: Tiros com potência maior causam mais dano ao adversário.
- Energia Consumida: Atirar consome energia do seu robô proporcional à potência do tiro.
- Velocidade do Projétil: Tiros com potência menor são mais rápidos.
Tabela de Referência:
| Potência do Tiro | Dano Causado ao Inimigo | Energia Consumida | Velocidade do Projétil |
|---|---|---|---|
| 0.1 | Muito baixo | 0.1 | Muito rápido |
| 1.0 | Baixo | 1.0 | Rápido |
| 2.0 | Médio | 2.0 | Médio |
| 3.0 | Alto | 3.0 | Lento |
3. Condições para Atirar
Antes de atirar, é importante verificar se o seu robô tem energia suficiente.
Exemplo:
if (getEnergy() > 0.1) {
fire(1);
}Gerenciamento de Energia e Potência de Fogo
Atirar consome energia, e ficar sem energia deixa seu robô vulnerável. Vamos aprender a gerenciar isso.
1. Monitorando a Energia do Robô
Use o método getEnergy() para obter a energia atual do seu robô.
Exemplo:
double minhaEnergia = getEnergy();2. Ajustando a Potência com Base na Distância
É estratégico variar a potência do tiro de acordo com a distância do inimigo.
- Inimigo Perto: Use potência maior para causar mais dano.
- Inimigo Distante: Use potência menor para economizar energia e porque tiros de baixa potência são mais rápidos.
Exemplo:
public void onScannedRobot(ScannedRobotEvent e) {
double distancia = e.getDistance();
double potencia = Math.min(400 / distancia, 3);
fire(potencia);
}3. Evitando Ficar Sem Energia
Quando a energia do seu robô estiver baixa, talvez seja melhor evitar atirar e focar em se defender.
Exemplo:
if (getEnergy() > 20) {
fire(2);
} else if (getEnergy() > 10) {
fire(1);
} else {
// Energia baixa, evitar atirar
}Estratégias Básicas de Combate
Agora que seu robô sabe atirar, vamos aprender algumas estratégias para melhorar sua eficácia em combate.
1. Apontar a Arma com Precisão
Certifique-se de que sua arma está apontada na direção certa antes de atirar.
Exemplo:
public void onScannedRobot(ScannedRobotEvent e) {
double anguloParaInimigo = getHeading() + e.getBearing() - getGunHeading();
turnGunRight(anguloParaInimigo);
fire(1);
}2. Atirar Somente Quando a Mira Estiver Alinhada
Evite desperdiçar energia atirando quando a arma não está alinhada com o inimigo.
Exemplo:
public void onScannedRobot(ScannedRobotEvent e) {
double anguloParaInimigo = getHeading() + e.getBearing() - getGunHeading();
turnGunRight(anguloParaInimigo);
if (Math.abs(anguloParaInimigo) <= 5) { // Se o ângulo for pequeno
fire(2); // Atira com potência 2
}
}3. Prever o Movimento do Inimigo
Robôs adversários se movem, então antecipar onde eles estarão pode aumentar suas chances de acertar.
Exemplo Simples:
public void onScannedRobot(ScannedRobotEvent e) {
double velocidadeInimigo = e.getVelocity();
double anguloMovimentoInimigo = e.getHeading();
// Cálculo básico de predição (simplificado)
double tempoParaAlvo = e.getDistance() / (20 - 3 * firePower);
double futuroX = e.getDistance() * Math.sin(Math.toRadians(anguloMovimentoInimigo)) * tempoParaAlvo;
double futuroY = e.getDistance() * Math.cos(Math.toRadians(anguloMovimentoInimigo)) * tempoParaAlvo;
// Apontar arma para a posição futura estimada (necessário cálculos adicionais)
}Nota: A predição de movimento é um tópico avançado, mas é bom saber que existe!
Dicas para Combate Eficiente
- Mantenha-se em Movimento: Um robô parado é um alvo fácil. Mova-se enquanto atira.
- Gerencie sua Energia: Não gaste toda a energia em tiros poderosos se não for necessário.
- Conheça seus Oponentes: Observe o comportamento dos robôs adversários para adaptar sua estratégia.
Desafios Práticos
Desafio 1: Programe seu robô para aumentar a potência do tiro à medida que se aproxima do inimigo.
Desafio 2: Faça seu robô atirar apenas quando a arma estiver perfeitamente alinhada com o adversário.
Desafio 3: Implemente uma lógica para que seu robô recue quando sua energia estiver baixa.
Resumo da Aula
Nesta aula, aprendemos como programar ataques no Robocode. Exploramos os comandos para atirar, entendemos a importância de gerenciar a energia e a potência de fogo, e vimos estratégias básicas de combate para tornar seu robô mais eficaz na arena.
O que vem a seguir?
Na próxima aula, vamos aprender a evitar paredes e obstáculos, garantindo que seu robô se mova pela arena de forma segura e eficiente. Prepare-se para ensinar seu robô a navegar como um verdadeiro explorador!
