Robocode

Aprendendo a guerrear em java

PET Teleinformática @ 2015

http://www.peteti.ufc.br

Agenda

  • História
  • O que é RoboCode?
  • Exemplo de batalha
  • Criando uma batalha e um robô
  • Como seu robô funciona
  • Aprendendo sobre o seu robô e como controla-lo
  • Idéias
  • Dicas

História

  • Robocode é um jogo open source iniciado por Mathew Nelson, com contribuições de Flemming N. Larsen e Pavel SARAVA que trabalham em Robocode para mantê-lo atualizado e corrigir seus erros.
  • No início de 2005, Robocode foi trazido para SourceForge  como open source com Robocode na versão 1.0.7

O que é Robocode?

  • Simulador de um tanque robô
  • Batalhas
  • Armas
  • de Fogo
  • Batidas
  • Você escreve seu programa para controlar seu robô
  • e destruir o robô de seus inimigos
  • Java ou .NET

Exemplo de Batalha

Como seu Robô Funciona

  • Baseado em um tanque
  • Arma
  • rotação
  • fogo
  • Radar
  • rotação
  • detecção de robôs inimigos
  • Veículo
  • rotação
  • frente
  • trás

Restrições do Robô

  • Energia
  • Utilizado nas operações do robô
  • No disparo, pode ser definido a quantidade de energia utilizada
  • É recuperada quando acerta-se outro robô
  • Calor
  • Um canhão só dispara quando o seu calor estiver em zero.
  • O calor gerado é proporcional a potência do disparo.

Movendo seu Robô

  • stop()
  • ahead(double distance)
  • back(double distance)
  • turnLeft(double degree)
  • turnRight(double degree)

 

Ajustes de Movimento

  • setAdjustGunForRobotTurn (boolean flag)
  • setAdjustRadarForRobotTurn (boolean flag)
  • setAdjustRadarForGunTurn (boolean flag)

Movendo sua Arma

  • turnGunLeft(graus)
  • turnGunRight(graus)
  • fire(poder)
  • dano que vem do seu rôbo
  • poder máximo é 3

Usando o Radar

  • O radar está na arma
  • mover a arma move o radar
  • a arma está apontando para o alvo
  • turnRadarLeft(graus)
  • turnRadarRight(graus)
  • onScannedRobot (ScannedRobotEvent)

Eventos

  • onScanedRobot (ScannedRobotEvent)
  • onBulletHit (BulletHitEvent)
  • onHitRobot (HitRobotEvent)
  • onHitWall (HitWallEvent)
  • onWin (WinEvent)

Sabendo sobre seu Robô

  • getX() / getY()
  • getHeading()
  • getGunHeading()
  • getBattleFieldWidth()
  • getBattleFieldHeight()

Heading

Criando um Robô

Criando um Robô

Criando um Robô

Criando um Robô

Criando um Robô

Criando um Robô

Criando um Robô

Criando um Robô

package PETRobots;
import robocode.*;

public class Freyja extends Robot
{
                                // <<Area 1>>
	public void run() {
		                // <<Area 2>>
                while(true) {
    			        // <<Area 3>>
		}
	}

                                // <<Area 4>>

	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}
}

Criando um Robô

package PETRobots;
import robocode.*;

public class Freyja extends Robot
{
	public void run() {
		turnLeft(getHeading());
                while(true) {
    			ahead(1000);
			turnRight(90);
		}
	}

	public void onScannedRobot(ScannedRobotEvent e) {
		fire(1);
	}

	public void onHitByBullet(HitByBulletEvent e) {
		turnLeft(180);
	}
}

Criando uma Batalha

Criando uma Batalha

Criando uma Batalha

Motor do Robocode

Ideias para Robôs

  • Movimentos aleatórios
  • Circular
  • Sniper - atirador de elite
  • Parede
  • Rastreador
  • Inteligente

Dicas

  • Planeje o comportamento do seu robô
  • como você quer que ele se movimente
  • quando você quer que ele atire
  • Teste sua ideia de movimento
  • Teste seu robô contra os 'samples'
  • você não será capaz de ganhar de todos com um robô de uma hora
  • Teste frequentemente
  • ligue seu radar visível
  • com várias rodadas
  • utilize o turnos por segundo (TPS)
Made with Slides.com