tutorial robocode

41
O que você entende por JOGOS DE COMBATE ?

Upload: brunosiol

Post on 19-Jun-2015

4.398 views

Category:

Documents


1 download

DESCRIPTION

tutorial de como programar para Robocode

TRANSCRIPT

Page 1: tutorial Robocode

O que você entende por JOGOS DE COMBATE ?

Page 2: tutorial Robocode

Guerreiros sarados e musculosos ?

Page 3: tutorial Robocode

Ferozes e Belicosas criaturas se aniquilando em

um ambiente completamente hostil?

Page 4: tutorial Robocode

Agora podemos brincar

Page 5: tutorial Robocode
Page 6: tutorial Robocode

O que é Robocode ?

Page 7: tutorial Robocode

Benefícios do Robocode …

• OO• Threading• Packaging• Herança• Polimorfismo• Código API

• Eventos• Inner classes• Java docs• How to duck…

Page 8: tutorial Robocode

Você ainda não ficou interessado em aprender

Robocode ???

Page 9: tutorial Robocode

Trabalhe em equipe

• Você cria e outros usam seus Robots

• Você pode participar de um time

• Já Existem Excelentes times

• Troca de idéas & técnicas

• Participar de ligas internacionais

Page 10: tutorial Robocode

E agora ficou interessado em aprender Robocode ???

Page 11: tutorial Robocode

Instalação e pré-requisitos …Java VM 1.3.x ou superior

Page 12: tutorial Robocode

Instalação no Windows

São necessários três exaustivos passos ….– Entre no site robocode.alphaworks.ibm.com- Faça o download

- Execute robocode-setup.jar (autosetup)

Page 13: tutorial Robocode

Instalação no LinuxApenas um ÚNICO passo ….No site robocode.alphaworks.ibm.com faça

download & rode … java –jar robocode-setup.jar

Page 14: tutorial Robocode

O que você tem …

Você gratuitamente ganhou …- um ambiente … Battlefield- uma IDE de desenvolvimento- javadocs das API- exemplos de robots- diversão infinita

Page 15: tutorial Robocode

Robot ?????

Como são os guerreiros do Robocode ?

Page 16: tutorial Robocode

Anatomia do Robot

Todas as partes possuem movimentos independentes.

Page 17: tutorial Robocode

Battlefield ..

Quer conhecer a sua Arena de Guerra ?

Page 18: tutorial Robocode

Sua nova IDE …

Quer conhecer um poderoso editor de Java ?

Page 19: tutorial Robocode

Robot commands …

• Toda documentação pode ser obtida na API do Robocode …

• Lá você obterá os métodos públicos da classe robocode.Robot ou as derivações obtidas na classe: robocode.AdvancedRobot

Page 20: tutorial Robocode

Movendo seu Robot

Alguns comandos básicos …• turnRight(double degree) e turnLeft(double degree) gira o

robot um número específico de graus.• ahead(double distance) e back(double distance) movimenta

o robot determinados pixels de distância; estes métodos são terminados ao encontrar uma parede ou outro robot.

• turnGunRight(double degree) e turnGunLeft(double degree) gira a arma um determinado número em graus.

• turnRadarRight(double degree) e turnRadarLeft(double degree) gira o radar um determinado número em graus.

Nenhum desses comandos retorna o controle ao programa até que o movimento seja completado.

Page 21: tutorial Robocode

Coordinadas e direções

Page 22: tutorial Robocode

Controlando a Arma, Radar & Tank

• setAdjustGunForRobotTurn(boolean flag): Se enviado true, a arma permanecerá na mesma direção e enquanto o tank dá voltas.

• setAdjustRadarForRobotTurn(boolean flag): Se enviado true, o radar permanecerá na mesma direção e enquanto o tank (e a arma) dá voltas.

• setAdjustRadarForGunTurn(boolean flag): Se enviado true, o radar permanecerá na mesma direção e enquanto a arma dá voltas. Também agirá como se setAdjustRadarForRobotTurn(true) tivesse sido chamado.

Quando o Tank está girando, a direção da arma (e radar) também são movimentados, a menos que seja indicado com os seguintes métodos:

Page 23: tutorial Robocode

Já posso ??

• getX() e getY() obtém a coordenada atual.• getHeading(), getGunHeading() e getRadarHeading()

obtém a posição corrente do tank, arma, ou radar em graus.

• getBattleFieldWidth() e getBattleFieldHeight() obtém a dimensão da arena no round corrente.

• getBearing() obtém de onde veio o tiro. getDistance() depois de localizado qual a distância do outro robot.

Existem alguns metodos para obter informações sobre o robot:

Page 24: tutorial Robocode

Fogo ....

Atirando e Controlando os Danos:• cada robot inicia com um determinado "nível de

energia - NE," e ele é destruído quando este nível chega a zero.

• Atirando, o robo pode gastar até 3NE. • fire(double power) e fireBullet(double power) são

usados para especificar a energia do tiro ou da bala.

Page 25: tutorial Robocode

Eventos ....

Estes são os eventos mais usados: • ScannedRobotEvent. Implementado pelo método

onScannedRobot(); este será disparado quando o seu radar encontrar outro robot.

• HitByBulletEvent. Implementado pelo método onHitByBullet(); este será disparado quando o seu robot for atingido.

• HitRobotEvent. Implementado pelo método onHitRobot(); este será disparado quando o seu robot bater em outro robot.

• HitWallEvent. Implementado pelo método onHitWall(); este será disparado quando o seu robot bater na parede.

Isto é tudo que precisamos para criarmos alguns robot bem complexos e bonitos …

Page 26: tutorial Robocode

Criando um robot ....

• Inicie o Robot Editor • selecione File->New->Robot • Coloque o nome do seu robot (no formato

Java de nomes, i.e (a..z, A..Z, $, _, 0..9)• Entre com o nome do pacote

Page 27: tutorial Robocode

Visão do Código …

package meus;import robocode.*;

public class MeuRobot extends Robot {public void run() {

while(true) {... // <<Movimento>>}

} public void onScannedRobot(ScannedRobotEvent e) { ... // <<Encontrou>> } public void onHitByBullet(HitByBulletEvent e) { ... // <<Tomei um tiro>>

}}

Page 28: tutorial Robocode

Adicionando funcionalidades …

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);}

Page 29: tutorial Robocode

Compilando & Testando seu robot

No menu do Robot Editor:• selecione Compiler -> Compile to compile

your robot code. • No menu do battlefield selecione Battle ->

New

Page 30: tutorial Robocode

Arquitetura da Battlefield

Page 31: tutorial Robocode

Obtendo novas sofisticações ...

• Até o momento os robots são simples• Restrições da classe ... ao ser bloqueada • Métodos não retornam o controle até serem finalizados• Nós estamos usando essencialmente a habilidade para tomar decisões.

Precisamos da … AdvancedRobot

Page 32: tutorial Robocode

AdvancedRobotwhile (round is not over) do call the rendering subsystem to draw robots, bullets, explosions for each robot do wake up the robot wait for it to make a blocking call, up to a max time interval end for clear all robot event queue move bullets, and generate event into robots' event queue if applicable move robots, and generate event into robots' event queue if applicable do battle housekeeping and generate event into robots' event queue if applicable delay for frame rate if necessaryend do

Page 33: tutorial Robocode

Herdando a Classe AdvancedRobot

• Chamadas a API não bloqueadas.• Podemos mudar a ação de um robot.• Um turno em Robocode é chamado tick (se refere ao clock), um gráfico relacionado pode ser chamado pelo battlefield.

Page 34: tutorial Robocode

Métodos da Robot vs AdvancedRobot

Robot:•turnRight() •turnLeft() •turnGunRight()•turnGunLeft() •turnRadarRight() •turnRadarLeft() •ahead() •back()

AdvancedRobot:•setTurnRight() •setTurnLeft() •setTurnGunRight() •setTurnGunLeft() •setTurnRadarRight() •setTurnRadarLeft() •setAhead() •setback()

Page 35: tutorial Robocode

Working with non-blocking method calls

public class MultiMoveBot extends AdvancedRobot { ...public void run() {

...setTurnRight(fullTurn);setAhead(veryFar);setTurnGunLeft(fullTurn);

Page 36: tutorial Robocode

Para executar um Método

Para obter um controle de um método que foi bloqueado:

while(true) {waitFor(new TurnCompleteCondition(this));toggleDirection();

}

Page 37: tutorial Robocode

The toggleDirection() method

private void toggleDirection() {if (clockwise) {

setTurnLeft(fullTurn);setBack(veryFar);setTurnGunRight(fullTurn);

} else {setTurnRight(fullTurn);setAhead(veryFar);setTurnGunLeft(fullTurn);

}clockwise = !clockwise;

}

Page 38: tutorial Robocode

Customizando Eventos …

public void run() { addCustomEvent( new Condition("LeftLimit") { public boolean test() { return (getHeading() <= quarterTurn);

} }); addCustomEvent( new Condition("RightLimit") { public boolean test() { return (getHeading() >= threeQuarterTurn); } });}

Page 39: tutorial Robocode

Chamada do Evento Customizados

public void onCustomEvent(CustomEvent ev) { Condition cd = ev.getCondition(); System.out.println("-> " + cd.getName()); if (cd.getName().equals("RightLimit")) { setTurnLeft(fullTurn); setTurnGunRight(fullTurn); } else { setTurnRight(fullTurn); setTurnGunLeft(fullTurn); }}

Page 40: tutorial Robocode

Chaves de Sucesso

As três grandes vantagens da AdvancedRobot são o uso de:• Múltiplos movimentos simultaneamente• Decidir a ação do robot em tempo de tick • Definir os eventos customizados

Page 41: tutorial Robocode

Recursos Extras 1. Milhares de livros sobre estratégia …2. Tutorial3. Ligas4. Fórums5. Ajuda On-Line6. Diversos Sites na WEB