Uma boa maneira de apreender a programar é jogando, esta é a minha ideia sobre este jogo. De maneira simples é possível aprender o básico de uma linguagem e ao mesmo tempo desenvolver o raciocino.

Robocode mistura o mundo de programação com competição. Tanto na linguagem Java como .Net, o jogo disponibiliza alguns códigos para facilitar o desenvolvimento dos robôs.

O que é o RoboCode ?

Robocode é um jogo de competição que permite que os robô do jogo sejam programáveis pelo usuário. O jogo fornece alguns métodos e classes que são usados na programação destes robôs, algumas classes tem mais recursos que outras, em geral temos a classe robocode.AdvancedRobot e a classe robocode.Robot

Antes da programação é necessário entender o básico do jogo. Primeiro, a regra é ganhar do oponente. Segundo, o robô na verdade é um tanque de guerra. Temos ainda mas três itens importante sobre o jogo, logo abaixo.


Movimentação – Os robôs têm três tipos de movimentos: o radar, a torre e a esteira, cada uma delas tem movimentos independentes.

Tiros – Os tiros são disparados pela torre e podem ter um dano diferente. Ao disparar é possível ajustar o dano do disparo, o método em Java para atirar é fire(1).

Munição – A munição é a própria energia do robô. Em outras palavras, se o robô atirar no oponente e errar o tiro o jogo irá descontar o tiro da energia do robô, mas caso o tiro acerte o jogo irá retirar a energia do oponente e adicionar no robô que acerto o alvo.

Quais os métodos ?

Os métodos necessários para criar um rodo do Robocode, estão descritos a seguir:

public void run()

Quando uma partida for iniciada pelo Robocode, o primeiro método a ser invocado será o método run() da classe do robô. Este método é onde seu código inicia e sempre deve estar em execução, em um loop até o final do jogo.

onScannedRobot(ScannedRobotEvent e)

O método onScannedRobot(ScannedRobotEvent e) é um dos mais importante para a lógica do seu robô, este método é invocado quando o radar encontrar algum alvo. No parâmetro deste método são enviadas as informações do alvo dentro do objeto ScannedRobotEvent, como por exemplo as informações de posição, nome, velocidade, distancia e outras informações do alvo. Com estas informações é possível calcular e montar uma boa estratégia

/**
*onScannedRobot: Quando o radar localizar um oponente o método será invocado.
*/
public void onScannedRobot(ScannedRobotEvent e){

	String nomeOponente = e.getName().;
	double posicaoRadar = getRadarHeading();
	double alvo = e.getBearing();
	double alvoVelocidade = e.getVelocity();
	double alvoDistancia = e.getDistance();

}

onHitWall(HitWallEvent e)

O método acima é invocado quando o robô bate na parede. A implementação deste método deve redirecionar o robô para que o mesmo não fique batendo na parede infinitamente.

onHitByBullet(HitByBulletEvent e)

Quando o robô levar um tiro do oponente este método será invocado. Aqui é possível fazer alguma estratégia para fugir dos tiros.

O Robocode possuí vários métodos, todos eles pode ser visto na documentação do jogo.


Criando meu primeiro robô

Primeiro vamos ‘Extender’ a classe Robot do Robocode, nela vamos sobrescrever o método run() e onScannedRobot(..). Primeiro vamos fazer o robô andar para frente, girar a torre 360 graus depois andar para traz, girar novamente a torre 360 graus e atirar no primeiro alvo que ele encontrar:

import robocode.*;

public class MyFirstRobot extends Robot {

	public void run(){
		setColors(Color.BLUE, Color.RED, Color.GRAY, Color.GREEN, Color.WHITE;
		while(true){
			ahear(100);//Move 100 pixels a frente
			turnGunRight(360);//vira a torre 360 graus a direita
			back(100);//anda 100 pixels para traz
			turnGunRight(360);////vira a torre 360 graus a direita
		}
	}

	public void onScannedRobot(ScannedRobotEvent e){
		fire(1);//Disparando tiro de dado 1;
	}

}

Links para competição: LIGA. FT – Unicamp
Robô para download: PriuliDestroyer – Primeira versão do robô do Felipe Priuli
Referencia: Robowiki.net Robocode Sourceforge
Repositório de Robos: Robocode Repository

Atualizado em 01/01/2012