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)
Robocode @ 2015 (#000)
By Alexandre Barroso
Robocode @ 2015 (#000)
[BASICO] --Introdução ao Robocode --Programação básica de robo --Dicas para robos
- 451