SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Downloaden Sie, um offline zu lesen
ROBOCODE
666
Prof. Ms. Peter Jandl Junior
Análise e Desenvolvimento de Sistemas
FATEC Jundiaí
08/06/2018 (C) 2018 PeterJandlJr. 2
Já sabemos que desenvolver jogos
digitais melhora as habilidades de
programação e, com isso, abre mais
oportunidades de carreira e negócios.
FAST TRACK REVIEW
08/06/2018 (C) 2018 PeterJandlJr. 3
robocode
■ O que é:
Jogo de programação.
■ Objetivo:
Vencer batalhas tipo vale-
tudo.
■ Com que:
Robôs autônomos
(programador não controla
robô durante o jogo).
■ Como:
Codificação de robô para
competir com outros robôs
num campo de batalha.
08/06/2018 (C) 2018 PeterJandlJr. 4
robocode
■ Robôs são tanques,
capazes de
– movimentar-se;
– localizar adversários;
e
– atirar!
■ Robôs são dispostos
aleatoriamente em
um campo de batalha
(battlefield)
retangular sem entradas
ou saídas.
08/06/2018 (C) 2018 PeterJandlJr. 5
■ Robôs são programados
via Java para ataque e
defesa. Pontuam ao longo
do combate.
■ Objetivos:
– Principal: não ser
destruído!
– Secundário: destruir!
■ Vence o robô que
acumular mais pontos ao
longo dos diversos rounds
da batalha.
robocode
■ O jogador (programador) não
tem influência direta no jogo,
cujas batalhas são realizadas
em tempo real.
■ Robô deve conter algum
código "inteligente" para
competir de maneira
autônoma.
■ Controle interno do jogo
garante a distribuição
uniforme e regular do tempo
entre os robôs, além de prover
sua visualização (rendering).
08/06/2018 (C) 2018 PeterJandlJr. 6
■ API do Robocode fornece
classes prontas como
ponto de partida para
construção de novos
robôs.
■ Uso destas classes é uma
exigência para permitir
integrar o robô criado ao
ambiente Robocode.
robocode::ambiente
■ Janela principal com campo de batalha (arena) e controles.
■ Permite:
– Criar, abrir e salvar batalhas;
– Pausar, continuar e finalizar batalhas;
– Visualizar estatísticas e destruir qualquer robô.
■ É possível customizar:
– Tamanho da arena
– Número de robôs participantes das batalhas
– Número de rounds de cada batalha
– E um bom número de outros detalhes.
08/06/2018 (C) 2018 PeterJandlJr. 7
robocode::editor
08/06/2018 (C) 2018 PeterJandlJr. 8
Editor de Código
Integrado
Janela secundária independente
com acesso a ferramentas básicas
de desenvolvimento.
robocode::API
08/06/2018 (C) 2018 PeterJandlJr. 9
ANATOMIA DOS
ROBÔS
08/06/2018 (C) 2018 PeterJandlJr. 10
robocode::battlefield
■ Tamanho default do
campo de batalha 800 x 600 pixels
■ Então:
– Distância máxima entre quaisquer dois robôs no battlefield
padrão é menor que 1000.
– Qualquer robô pode ser localizado neste tamanho de
campo (raio de varredura = 1200 pixels).
■ Além disso:
– Radar não detecta balas.
– Canhão aquece e impede sequência ilimitada de tiros.
08/06/2018 (C) 2018 PeterJandlJr. 11
robocode::battlefield
08/06/2018 (C) 2018 PeterJandlJr. 12
robocode::pontuação
■ Acerto +3*energia
■ Erro -energia
■ Dano -4*energia-2*(energia-1)
■ Atropelar (ram) +1.2
■ Colisão (parede) -0.6
■ Destruição de robô
– Por meio de tiro(s) +20% dano causado
– Por atropelamento +30% dano causado
■ Vitória no round +10
08/06/2018 (C) 2018 PeterJandlJr. 13
robô::tanque de guerra
■ Componentes:
– Veículo
(base móvel)
– Canhão giratório
– Radar giratório
■ Elementos do tanque:
– Movimento conjunto
é natural.
– Podem ter
movimento
independente.
08/06/2018 (C) 2018 PeterJandlJr. 14
Se veículo se move,
canhão e radar
"acompanham"
Se canhão, radar
"acompanha"
Todos podem ser
movidos livremente
robô::características
■ Energia Inicial 100
■ Velocidade 8 pixels/turn
■ Velocidade de giro 20°/turn
■ Velocidade da bala 20 pixels/turn
■ Energia da bala 0.1 a 3.0
(maior a bala, menor a velocidade)
■ Raio de varredura 1200 pixels
■ Dados de varredura distância, nome, velocidade,
heading, bearing e energia
do adversário localizado.
08/06/2018 (C) 2018 PeterJandlJr. 15
Direção absoluta do
robô e direção
relativa ao robô.
robocode::heading & bearing
08/06/2018 (C) 2018 PeterJandlJr. 16
Norte é
0°
robô::entidade autônoma
programável
■ Os robôs são construídos a partir de classes padronizadas:
– robocode.Robot
robocode.AdvancedRobot
■ Estas classes oferecem a infraestrutura básica para o
funcionamento do robô, o que inclui:
– informações do robô
– ações do robô
– controle de eventos
– informações do ambiente
– execução de ações em paralelo (AdvancedRobot)
08/06/2018 (C) 2018 PeterJandlJr. 17
robô::avançado
■ Robôs melhores podem ser construídos a partir de
robocode.AdvancedRobot.
■ Esta classe oferece a mesma infraestrutura básica disponível
em robocode.Robot.
■ Adicionalmente possibilita:
– A chamada de ações não bloqueantes, ou seja, permite
que o robô execute ações em paralelo, por exemplo, andar
e atirar.
– Operações paralelizáveis tem prefixo set.
– Métodos execute() ou waitFor() acionam conjunto prévio de
operações set em paralelo.
– Ajustes mais sofisticados, além de obtenção de
informações mais detalhadas.
08/06/2018 (C) 2018 PeterJandlJr. 18
robô::entidade autônoma
programável
Informações do Robô
■ getX() | getY()
coordenada do robô
■ getWidth () | getHeight()
dimensões do robô
■ getHeading() |
getGunHeading() |
getRadarHeading()
direção do robô, do canhão e do
radar
■ getVelocity()
velocidade do robô
■ getEnergy()
energia do robô
Ações do Robô
■ ahead(double)|back(double)
movimentação
■ turnRight(double)|turnLeft(double)
gira o robô
■ turnGunRight(double) |
turnGunLeft(double)
gira o canhão
■ turnRadarRight(double) |
turnRadarLeft(double)
gira o radar
■ scan()
varredura por outros robôs
■ fire(double)
dispara um tiro de energia
08/06/2018 (C) 2018 PeterJandlJr. 19
Programação
robô é feita por
meio de suas
ações.
robô::entidade autônoma
programável
Informações do
Ambiente
■ getBattleFieldWidth() |
getBattleFieldHeight()
largura e altura da arena
■ getNumRounds()
núm. de rounds da batalha
■ getRoundNum()
round da batalha
■ getTime()
tempo batalha
■ getOthers()
núm. atual de oponentes
Controle de Eventos
■ onScannedRobot(
ScannedRobotEvent)
detecção de robô
■ onHitByBullet(
HitByBulletEvent)
robô alvejado por tiro
■ onHitByRobot(
HitByBulletEvent)
robô colide com robô
■ onHitWall(
HitWallEvent)
robô colide com parede
08/06/2018 (C) 2018 PeterJandlJr. 20
Programação
robô é feita como
resposta aos
eventos de
batalha!
robô::entidade autônoma
programável
Controle de Tiro
■ onBulletHit(
BulletHitEvent)
quando um tiro acerta alvo
■ onBulletHitBullet(
BulletHitBulletEvent)
quando um tiro acerta um outro
tiro
■ onBulletMissed(
BulletMissedEvent)
quando um tiro erra o alvo
■ onHitByBullet(
HitByBulletEvent)
quando o robô é alvejado por tiro
Controle Avançado
■ onDeath(DeathEvent)
detecção da morte do robô
■ onRobotDeath(
RobotDeathEvent)
detecção de morte de outro robô
■ onWin(WinEvent)
quando robô vence
■ onStatus(StatusEvent)
acionado a cada vez para prover
informações sobre o robô
08/06/2018 (C) 2018 PeterJandlJr. 21
Programação
robô é feita como
resposta aos
eventos de
batalha!
CRIAÇÃO DE ROBÔSDestroy then all!
08/06/2018 (C) 2018 PeterJandlJr. 22
robocode::instalação
■ Fazer download em:
https://sourceforge.net/projects/robocode/files/
robocode | robocode-1.9.3.2-setup.jar [2018-04-04]
■ Não descompacte o arquivo!
Que deve ser executável, se a configuração do Java estiver
correta no seu computador!
– Executable Jar File → dois cliques para executar
next, next e tudo dará certo!
– Outra extensão:
■ Prompt de comandos
■ Navegar até diretório de download
do arquivo obtido.
■ Acione o comando:
java –jar robocode-1.9.3.2-setup.jar
08/06/2018 (C) 2018 PeterJandlJr. 23
Precisamos do Java JDK
7+ instalado no sistema!
Configuração do JDK
@echo off
set JAVA_HOME="C:Program FilesJavajdk-9"
path=%JAVA_HOME%bin;%path%
echo %path%
echo %JAVA_HOME%
java -version
08/06/2018 (C) 2018 PeterJandlJr. 24
Convém possuir um
arquivo como esse
(J9.bat no meu caso).
Localize a versão do JDK
instalada do seu sistema
e adapte este arquivo.
Num prompt de
comandos acione este
bat. Use este prompt para
acionar o robocode!
robocode::execução
08/06/2018 (C) 2018 PeterJandlJr. 25
Funciona também pelo
Explorer:
robocode.bat
robôs::Criação
■ Na janela principal:
– Robot
– Source Editor
■ Na janela do editor:
– File
– New
– Robot
■ Escolha um nome:
– MFR
■ Defina um pacote:
– jandl
■ Edite o código.
08/06/2018 (C) 2018 PeterJandlJr. 26
Aqui começa a diversão!
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 27
(2) Loop principal
(1) Inicialização
(3) Varredura
(4) Alvejado por bala
(5) Colisão com parede
(0) Campos
Robô::estrutura do Código
(0) Campos
■ Área que permite a definição de:
– Variáveis e estruturas de dados
■ (da classe) do robô.
■ Podem ser livremente declaradas para auxiliar no controle do
robô e de suas estratégias de defesa e ataque.
■ Elementos declarados nesta área serão acessíveis em todo
código do robô.
08/06/2018 (C) 2018 PeterJandlJr. 28
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 29
Sem campos neste
primeiro robô.
(0) Campos
Robô::estrutura do Código
(1) Inicialização
■ A inicialização do código de controle do robô pode ser feita na
seção inicial do método run().
■ Elementos locais (i.e., válidos apenas neste método) podem
ser acrescentados.
■ Aqui é colocado o código que necessita ser executado apenas
uma vez para cada instância do robô, ou seja, para
determinar seu estado inicial.
08/06/2018 (C) 2018 PeterJandlJr. 30
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 31
(1) Inicialização Este robô
simples não
requer cuidados
especiais.
Robô::estrutura do Código
(2) Loop principal
■ Laço infinito que determina o comportamento normal do
robô, i.e., aquilo que o tanque fará quando não está atacando
ou sendo atacado.
■ Em geral corresponde à movimentação do robô pelo campo
de batalha.
08/06/2018 (C) 2018 PeterJandlJr. 32
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 33
(2) Loop principal Comportamento
normal do robô.
Robô::estrutura do Código
(3) varredura
■ Como consequência da movimentação do radar (de maneira
independente ou por meio do giro do tanque), oponentes
dentro do raio de varredura (até 1200 pixels de distância)
serão localizados.
■ Cada oponente localizado gera um evento
ScannedRobotEvent que é entregue ao robô por meio do
acionamento do método
onScannedRobot(ScannedRobotEvent).
■ Isto possibilita estabelecer uma estratégia de ataque dirigida
aos oponente localizados.
08/06/2018 (C) 2018 PeterJandlJr. 34
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 35
(3) Varredura Localizou oponente?
Fogo nele!
Robô::estrutura do Código
(3) varredura
■ Como padrão, o canhão e o radar se movimentam junto com
o robô.
■ Assim, se a primeira ação em
onScannedRobot(ScannedRobotEvent) for fire(1), o tiro irá na
direção do robô oponente localizado.
08/06/2018 (C) 2018 PeterJandlJr. 36
Robô::estrutura do Código
(4) alvejado por bala
■ Quando o robô é atingido por um tiro adversário, é gerado um
evento HitByBulletEvent que é entregue ao robô por meio do
acionamento do método onHitByBullet(HitByBulletEvent).
■ Isto possibilita estabelecer uma estratégia de defesa
relacionada aos oponentes.
08/06/2018 (C) 2018 PeterJandlJr. 37
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 38
(4) Alvejado por bala Foi localizado?
Melhor fugir!
Robô::estrutura do Código
(5) colisão com parede
■ Quando o robô colide com uma das parede que delimitam o
campo de batalha é gerado um evento HitWallEvent que é
entregue ao robô por meio do acionamento do método
onHitWall(HitWallEvent).
■ Isto possibilita complementar a estratégia de movimentação
do robô estabelecida no método run().
08/06/2018 (C) 2018 PeterJandlJr. 39
Robô::
estruturadoCódigo
08/06/2018 (C) 2018 PeterJandlJr. 40
(5) Colisão com parede Parede?
Marcha-a-ré!
robôs::Criação
■ Editou
■ Salvou
■ Compilou
■ Tá pronto para batalha!
08/06/2018 (C) 2018 PeterJandlJr. 41
Errinhos não
contam!
Robôs criados no
ambiente já estão
disponíveis para novas
batalhas!
robôs::teste
Batalha ZERO
■ Crie uma nova batalha
■ Com seu robô e UM único
adversário simples
(SittingDuck, para ser
feliz ao meno uma vez!)
Batalha UM, DOIS ...
■ Crie novas batalhas
■ Adicione,
progressivamente,
adversários de tipo
diferente e em
quantidade selecionada.
■ Avalie seu robô! Melhore!
08/06/2018 (C) 2018 PeterJandlJr. 42
ROBOCODE::
TECNICALIDADES
Detalhes. Sempre os detalhes.
08/06/2018 (C) 2018 PeterJandlJr. 43
◼ robocode.Robot
⚫ robocode.AdvancedRobot
robôs::sugestões
INICIANTES
■ Tente criar alguns robôs
combinando os elementos
da API.
■ Observe o comportamento
do robô e os resultados
obtidos.
JOGADORES
■ Estude o código dos robôs
exemplo que acompanham
o Robocode:
– sample.Walls◼
– sample.Tracker◼
– sample.Crazy⚫
■ Combine suas estratégias
na forma de novos robôs.
08/06/2018 (C) 2018 PeterJandlJr. 44
Walls2
08/06/2018 (C) 2018 PeterJandlJr. 45
robôs::
estratégias de movimentação
1. Trajetória Linear
Evita mira fixa.
2. Trajetória Circular ou Elíptica
Evita mira fixa e mira linear.
3. Trajetória Oscilante
Evita mira linear e circular, mas mira fixa é um problema.
4. Trajetória Randômica
Evita mira fixa, linear e circular, mas acaba sendo
estatisticamente alvejado.
5. Trajetória Avançada
Utiliza dados de posicionamento (e trajetória) dos oponentes
para efetuar movimentação.
08/06/2018 (C) 2018 PeterJandlJr. 46
Ficar parado
não dá!
robôs::
estratégias de mira
1. Mira Fixa
Atira na posição onde alvo foi localizado.
2. Mira Linear
Atira na posição futura de alvo, assumindo movimento linear
uniforme. Efetiva para alvos próximos, falha em outras situações.
3. Mira Circular
Atira na posição futura de alvo, assumindo movimento circular
uniforme. Efetiva para alvos próximos, falha em outras situações.
4. Mira Oscilante
Só é efetiva para robôs que possuem este tipo de movimentação.
5. Mira Adaptativa
Utiliza dados de posicionamento (e trajetória) dos oponentes para
identificar padrão de movimentação, adaptando forma da mira.
08/06/2018 (C) 2018 PeterJandlJr. 47
Atirar para
acertar!
robôs::
estratégias de localização
1. Localização Simples
Radar e canhão alinhados todo tempo.
2. Localização Circular
Mantém radar girando continuamente.
3. Localização Travada/Fixa
Mantém radar travado em um algo específico.
4. Localização Ótima
Movimenta radar para localizar o máximo de alvos da maneira
mais rápida possível.
08/06/2018 (C) 2018 PeterJandlJr. 48
Atirar para
acertar!
robôs::criação com eclipse
08/06/2018 (C) 2018 PeterJandlJr. 49
robôs::criação com eclipse
■ IDE provê mais facilidades
para o desenvolvimento de
robôs.
■ Pode ser integrado ao
Robocode, sem
necessidade de qualquer
outro recurso.
■ São necessários três
passos.
1. Criação de projeto em
localização externa ao
Eclipse.
2. Inclusão da API do
Robocode.
3. Ligação com
documentação da API.
08/06/2018 (C) 2018 PeterJandlJr. 50
Também
funciona com o
Netbeans!
robôs::criação com eclipse
■ File | New |
Java Project
■ Escolha o
Project Name
■ Desmarque
Use default location
■ Com Browse selecione diretório
robots da instalação do
Robocode
■ Acione Next
08/06/2018 (C) 2018 PeterJandlJr. 51
robôs::criação com eclipse
■ Selecione aba Libraries
■ Com Add External Jars
selecione arquivo robocode.jar
no diretório libs da instalação
do Robocode
■ Acione Finish
08/06/2018 (C) 2018 PeterJandlJr. 52
robôs::criação com eclipse
■ No Package Explorer abra item
Referenced Libraries
■ Selecione arquivo robocode.jar
■ Com botão direito acione
Properties
■ Com o Browse selecione
diretório javadoc do Robocode
■ Acione OK
08/06/2018 (C) 2018 PeterJandlJr. 53
robôs::criação com eclipse
08/06/2018 (C) 2018 PeterJandlJr. 54
Documentação
integrada da API
Editor de código
avançado
robôs::Criação com eclipse
■ Editou
■ Salvou
■ Compilação automática
do IDE
■ Tá pronto para batalha!
08/06/2018 (C) 2018 PeterJandlJr. 55
Errinhos
continuam não
contando!
Robôs criados dessa forma também
estão disponíveis para novas
batalhas!
HellOfRobot
08/06/2018 (C) 2018 PeterJandlJr. 56
08/06/2018 (C) 2018 PeterJandlJr. 57
Robô Avançado
Ações Paralelas do
Robô
■ setAhead(double)|
setBack(double)
movimentação para frente e
para trás
■ setFire(double) |
setFireBullet(double)
dispara o canhão
■ execute()
executa as ações agendadas
■ waitFor(Condition)
não retorna até a condição
ser alcançada
Ações Paralelas do
Robô
■ setTurnRight(double) |
setTurnLeft(double)
gira o robô
■ setTurnGunRight(double)|
setTurnGunLeft(double)
gira o canhão
■ setTurnRadarRight(double)|
setTurnRadarLeft(double)
gira o radar
08/06/2018 (C) 2018 PeterJandlJr. 58
CRAZY2
08/06/2018 (C) 2018 PeterJandlJr. 59
ROBOCODE
::RECURSOS
Existe salvação!
08/06/2018 (C) 2018 PeterJandlJr. 60
Robocode::Recursos
■ Home
http://robocode.sourceforge.net/
■ Download
https://sourceforge.net/projects/robocode/files/
■ Documentação OnLine
http://robocode.sourceforge.net/docs/robocode/
■ Wiki
http://robowiki.net/wiki/Robocode
■ Artigos
http://robocode.sourceforge.net/developerWorks.php
■ UFSC
https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html
■ YouTube vídeo
http://www.youtube.com/watch?v=3qOoDuGkwco
08/06/2018 (C) 2018 PeterJandlJr. 61
08/06/2018 (C) 2018 PeterJandlJr. 62
Prof. Peter Jandl Junior
■ prof.peter@fatec.sp.gov.br
■ http://tecnopode.blogspot.com.br
08/06/2018 (C) 2018 PeterJandlJr. 63

Weitere ähnliche Inhalte

Was ist angesagt?

Exercicios de revisão 7 ano
Exercicios de revisão 7 anoExercicios de revisão 7 ano
Exercicios de revisão 7 anoalex01166
 
plano de aula história dia da mulher 6 ano pdf
 plano de aula história dia da mulher 6 ano pdf plano de aula história dia da mulher 6 ano pdf
plano de aula história dia da mulher 6 ano pdfJu Alencar
 
Imigração no Brasil
Imigração no BrasilImigração no Brasil
Imigração no Brasilguestf510721
 
Exercícios de equações de 1º grau
Exercícios de equações de 1º grauExercícios de equações de 1º grau
Exercícios de equações de 1º grauAluizio Santos
 
Exercícios de fusos horários - 2017
Exercícios de fusos horários - 2017Exercícios de fusos horários - 2017
Exercícios de fusos horários - 2017Ademir Aquino
 
Quadro Resumo Potencia e Raiz - F9
Quadro Resumo Potencia e Raiz  - F9Quadro Resumo Potencia e Raiz  - F9
Quadro Resumo Potencia e Raiz - F9Talita mmzt
 
Geografia a evolucao da dit (divisao internacional do trabalho) do colonial...
Geografia   a evolucao da dit (divisao internacional do trabalho) do colonial...Geografia   a evolucao da dit (divisao internacional do trabalho) do colonial...
Geografia a evolucao da dit (divisao internacional do trabalho) do colonial...Gustavo Soares
 
ONU - Organização das Nações Unidas
ONU - Organização das Nações UnidasONU - Organização das Nações Unidas
ONU - Organização das Nações UnidasAndré Luiz Marques
 
Tabuleiro da socialização dinâmica.pdf
Tabuleiro da socialização dinâmica.pdfTabuleiro da socialização dinâmica.pdf
Tabuleiro da socialização dinâmica.pdfGermanaFurquim1
 
Espaço Geográfico - 3º Ano
Espaço Geográfico - 3º AnoEspaço Geográfico - 3º Ano
Espaço Geográfico - 3º AnoPré Master
 

Was ist angesagt? (15)

Exercicios de revisão 7 ano
Exercicios de revisão 7 anoExercicios de revisão 7 ano
Exercicios de revisão 7 ano
 
Decisões sob Risco
Decisões sob RiscoDecisões sob Risco
Decisões sob Risco
 
Aplicação da RObótica
Aplicação da RObóticaAplicação da RObótica
Aplicação da RObótica
 
plano de aula história dia da mulher 6 ano pdf
 plano de aula história dia da mulher 6 ano pdf plano de aula história dia da mulher 6 ano pdf
plano de aula história dia da mulher 6 ano pdf
 
Imigração no Brasil
Imigração no BrasilImigração no Brasil
Imigração no Brasil
 
Exercícios de equações de 1º grau
Exercícios de equações de 1º grauExercícios de equações de 1º grau
Exercícios de equações de 1º grau
 
Exercícios de fusos horários - 2017
Exercícios de fusos horários - 2017Exercícios de fusos horários - 2017
Exercícios de fusos horários - 2017
 
Modulo 15 - A divida externa
Modulo 15 - A divida externaModulo 15 - A divida externa
Modulo 15 - A divida externa
 
Quadro Resumo Potencia e Raiz - F9
Quadro Resumo Potencia e Raiz  - F9Quadro Resumo Potencia e Raiz  - F9
Quadro Resumo Potencia e Raiz - F9
 
Geografia a evolucao da dit (divisao internacional do trabalho) do colonial...
Geografia   a evolucao da dit (divisao internacional do trabalho) do colonial...Geografia   a evolucao da dit (divisao internacional do trabalho) do colonial...
Geografia a evolucao da dit (divisao internacional do trabalho) do colonial...
 
ONU - Organização das Nações Unidas
ONU - Organização das Nações UnidasONU - Organização das Nações Unidas
ONU - Organização das Nações Unidas
 
Polinomios
PolinomiosPolinomios
Polinomios
 
Regiões de onu
Regiões de onuRegiões de onu
Regiões de onu
 
Tabuleiro da socialização dinâmica.pdf
Tabuleiro da socialização dinâmica.pdfTabuleiro da socialização dinâmica.pdf
Tabuleiro da socialização dinâmica.pdf
 
Espaço Geográfico - 3º Ano
Espaço Geográfico - 3º AnoEspaço Geográfico - 3º Ano
Espaço Geográfico - 3º Ano
 

Ähnlich wie Robocode: Aprenda a programar robôs de batalha

Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santosjonathanblacknight
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenziejonathanblacknight
 
Avaliação de robótica nível 1
Avaliação de robótica nível 1Avaliação de robótica nível 1
Avaliação de robótica nível 1Tania Lenhardt
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8RogerMasters
 
[FISL11] Arduino: Construindo robôs com hardware e software livres!
[FISL11] Arduino: Construindo robôs com hardware e software livres![FISL11] Arduino: Construindo robôs com hardware e software livres!
[FISL11] Arduino: Construindo robôs com hardware e software livres!Álvaro Justen
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unipjonathanblacknight
 
Robô seguidor de linha
Robô seguidor de linhaRobô seguidor de linha
Robô seguidor de linhaIsvaldo Souza
 
Software Livre para Aplicações em Robótica
Software Livre para Aplicações em RobóticaSoftware Livre para Aplicações em Robótica
Software Livre para Aplicações em RobóticaLinux User Goup Alagoas
 
Desafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleDesafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleNatã Barbosa
 
Yo! Geradores modernos com Yeoman!
Yo! Geradores modernos com Yeoman!Yo! Geradores modernos com Yeoman!
Yo! Geradores modernos com Yeoman!Sidharta Noleto
 

Ähnlich wie Robocode: Aprenda a programar robôs de batalha (20)

Robocode 101
Robocode 101Robocode 101
Robocode 101
 
Robocode
RobocodeRobocode
Robocode
 
Revisitando o Robocode
Revisitando o RobocodeRevisitando o Robocode
Revisitando o Robocode
 
Robocode
RobocodeRobocode
Robocode
 
Robocode
RobocodeRobocode
Robocode
 
Robocode
RobocodeRobocode
Robocode
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
 
Robocode
RobocodeRobocode
Robocode
 
burlando um WAF
burlando um WAFburlando um WAF
burlando um WAF
 
Avaliação de robótica nível 1
Avaliação de robótica nível 1Avaliação de robótica nível 1
Avaliação de robótica nível 1
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8
 
[FISL11] Arduino: Construindo robôs com hardware e software livres!
[FISL11] Arduino: Construindo robôs com hardware e software livres![FISL11] Arduino: Construindo robôs com hardware e software livres!
[FISL11] Arduino: Construindo robôs com hardware e software livres!
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
 
Robô seguidor de linha
Robô seguidor de linhaRobô seguidor de linha
Robô seguidor de linha
 
Software Livre para Aplicações em Robótica
Software Livre para Aplicações em RobóticaSoftware Livre para Aplicações em Robótica
Software Livre para Aplicações em Robótica
 
Desafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleDesafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - Joinville
 
Sbia 2010-tutorial-slides-part-ii
Sbia 2010-tutorial-slides-part-iiSbia 2010-tutorial-slides-part-ii
Sbia 2010-tutorial-slides-part-ii
 
Yo! Geradores modernos com Yeoman!
Yo! Geradores modernos com Yeoman!Yo! Geradores modernos com Yeoman!
Yo! Geradores modernos com Yeoman!
 

Mehr von Peter Jandl Junior

Mehr von Peter Jandl Junior (11)

2023-03-23-ArduinoDay-CompFisica-1osPassos-ESP8266-v1.pdf
2023-03-23-ArduinoDay-CompFisica-1osPassos-ESP8266-v1.pdf2023-03-23-ArduinoDay-CompFisica-1osPassos-ESP8266-v1.pdf
2023-03-23-ArduinoDay-CompFisica-1osPassos-ESP8266-v1.pdf
 
Power BI 101
Power BI 101Power BI 101
Power BI 101
 
Business Process Modeling Notation - Uma introdução
Business Process Modeling Notation - Uma introduçãoBusiness Process Modeling Notation - Uma introdução
Business Process Modeling Notation - Uma introdução
 
C++200
C++200C++200
C++200
 
O (papel do) Arquiteto de Software
O (papel do) Arquiteto de SoftwareO (papel do) Arquiteto de Software
O (papel do) Arquiteto de Software
 
Reee - Resíduos Eletro Eletrônicos
Reee - Resíduos Eletro EletrônicosReee - Resíduos Eletro Eletrônicos
Reee - Resíduos Eletro Eletrônicos
 
SO-II-2016-1-02-Virtualizacao
SO-II-2016-1-02-VirtualizacaoSO-II-2016-1-02-Virtualizacao
SO-II-2016-1-02-Virtualizacao
 
2015-TCC-como apresentar
2015-TCC-como apresentar2015-TCC-como apresentar
2015-TCC-como apresentar
 
Novidades do Java 8
Novidades do Java 8Novidades do Java 8
Novidades do Java 8
 
SO-II-2015-2-02-Virtualizacao
SO-II-2015-2-02-VirtualizacaoSO-II-2015-2-02-Virtualizacao
SO-II-2015-2-02-Virtualizacao
 
Y da Carreira
Y da CarreiraY da Carreira
Y da Carreira
 

Robocode: Aprenda a programar robôs de batalha

  • 1. ROBOCODE 666 Prof. Ms. Peter Jandl Junior Análise e Desenvolvimento de Sistemas FATEC Jundiaí
  • 2. 08/06/2018 (C) 2018 PeterJandlJr. 2 Já sabemos que desenvolver jogos digitais melhora as habilidades de programação e, com isso, abre mais oportunidades de carreira e negócios.
  • 3. FAST TRACK REVIEW 08/06/2018 (C) 2018 PeterJandlJr. 3
  • 4. robocode ■ O que é: Jogo de programação. ■ Objetivo: Vencer batalhas tipo vale- tudo. ■ Com que: Robôs autônomos (programador não controla robô durante o jogo). ■ Como: Codificação de robô para competir com outros robôs num campo de batalha. 08/06/2018 (C) 2018 PeterJandlJr. 4
  • 5. robocode ■ Robôs são tanques, capazes de – movimentar-se; – localizar adversários; e – atirar! ■ Robôs são dispostos aleatoriamente em um campo de batalha (battlefield) retangular sem entradas ou saídas. 08/06/2018 (C) 2018 PeterJandlJr. 5 ■ Robôs são programados via Java para ataque e defesa. Pontuam ao longo do combate. ■ Objetivos: – Principal: não ser destruído! – Secundário: destruir! ■ Vence o robô que acumular mais pontos ao longo dos diversos rounds da batalha.
  • 6. robocode ■ O jogador (programador) não tem influência direta no jogo, cujas batalhas são realizadas em tempo real. ■ Robô deve conter algum código "inteligente" para competir de maneira autônoma. ■ Controle interno do jogo garante a distribuição uniforme e regular do tempo entre os robôs, além de prover sua visualização (rendering). 08/06/2018 (C) 2018 PeterJandlJr. 6 ■ API do Robocode fornece classes prontas como ponto de partida para construção de novos robôs. ■ Uso destas classes é uma exigência para permitir integrar o robô criado ao ambiente Robocode.
  • 7. robocode::ambiente ■ Janela principal com campo de batalha (arena) e controles. ■ Permite: – Criar, abrir e salvar batalhas; – Pausar, continuar e finalizar batalhas; – Visualizar estatísticas e destruir qualquer robô. ■ É possível customizar: – Tamanho da arena – Número de robôs participantes das batalhas – Número de rounds de cada batalha – E um bom número de outros detalhes. 08/06/2018 (C) 2018 PeterJandlJr. 7
  • 8. robocode::editor 08/06/2018 (C) 2018 PeterJandlJr. 8 Editor de Código Integrado Janela secundária independente com acesso a ferramentas básicas de desenvolvimento.
  • 10. ANATOMIA DOS ROBÔS 08/06/2018 (C) 2018 PeterJandlJr. 10
  • 11. robocode::battlefield ■ Tamanho default do campo de batalha 800 x 600 pixels ■ Então: – Distância máxima entre quaisquer dois robôs no battlefield padrão é menor que 1000. – Qualquer robô pode ser localizado neste tamanho de campo (raio de varredura = 1200 pixels). ■ Além disso: – Radar não detecta balas. – Canhão aquece e impede sequência ilimitada de tiros. 08/06/2018 (C) 2018 PeterJandlJr. 11
  • 13. robocode::pontuação ■ Acerto +3*energia ■ Erro -energia ■ Dano -4*energia-2*(energia-1) ■ Atropelar (ram) +1.2 ■ Colisão (parede) -0.6 ■ Destruição de robô – Por meio de tiro(s) +20% dano causado – Por atropelamento +30% dano causado ■ Vitória no round +10 08/06/2018 (C) 2018 PeterJandlJr. 13
  • 14. robô::tanque de guerra ■ Componentes: – Veículo (base móvel) – Canhão giratório – Radar giratório ■ Elementos do tanque: – Movimento conjunto é natural. – Podem ter movimento independente. 08/06/2018 (C) 2018 PeterJandlJr. 14 Se veículo se move, canhão e radar "acompanham" Se canhão, radar "acompanha" Todos podem ser movidos livremente
  • 15. robô::características ■ Energia Inicial 100 ■ Velocidade 8 pixels/turn ■ Velocidade de giro 20°/turn ■ Velocidade da bala 20 pixels/turn ■ Energia da bala 0.1 a 3.0 (maior a bala, menor a velocidade) ■ Raio de varredura 1200 pixels ■ Dados de varredura distância, nome, velocidade, heading, bearing e energia do adversário localizado. 08/06/2018 (C) 2018 PeterJandlJr. 15 Direção absoluta do robô e direção relativa ao robô.
  • 16. robocode::heading & bearing 08/06/2018 (C) 2018 PeterJandlJr. 16 Norte é 0°
  • 17. robô::entidade autônoma programável ■ Os robôs são construídos a partir de classes padronizadas: – robocode.Robot robocode.AdvancedRobot ■ Estas classes oferecem a infraestrutura básica para o funcionamento do robô, o que inclui: – informações do robô – ações do robô – controle de eventos – informações do ambiente – execução de ações em paralelo (AdvancedRobot) 08/06/2018 (C) 2018 PeterJandlJr. 17
  • 18. robô::avançado ■ Robôs melhores podem ser construídos a partir de robocode.AdvancedRobot. ■ Esta classe oferece a mesma infraestrutura básica disponível em robocode.Robot. ■ Adicionalmente possibilita: – A chamada de ações não bloqueantes, ou seja, permite que o robô execute ações em paralelo, por exemplo, andar e atirar. – Operações paralelizáveis tem prefixo set. – Métodos execute() ou waitFor() acionam conjunto prévio de operações set em paralelo. – Ajustes mais sofisticados, além de obtenção de informações mais detalhadas. 08/06/2018 (C) 2018 PeterJandlJr. 18
  • 19. robô::entidade autônoma programável Informações do Robô ■ getX() | getY() coordenada do robô ■ getWidth () | getHeight() dimensões do robô ■ getHeading() | getGunHeading() | getRadarHeading() direção do robô, do canhão e do radar ■ getVelocity() velocidade do robô ■ getEnergy() energia do robô Ações do Robô ■ ahead(double)|back(double) movimentação ■ turnRight(double)|turnLeft(double) gira o robô ■ turnGunRight(double) | turnGunLeft(double) gira o canhão ■ turnRadarRight(double) | turnRadarLeft(double) gira o radar ■ scan() varredura por outros robôs ■ fire(double) dispara um tiro de energia 08/06/2018 (C) 2018 PeterJandlJr. 19 Programação robô é feita por meio de suas ações.
  • 20. robô::entidade autônoma programável Informações do Ambiente ■ getBattleFieldWidth() | getBattleFieldHeight() largura e altura da arena ■ getNumRounds() núm. de rounds da batalha ■ getRoundNum() round da batalha ■ getTime() tempo batalha ■ getOthers() núm. atual de oponentes Controle de Eventos ■ onScannedRobot( ScannedRobotEvent) detecção de robô ■ onHitByBullet( HitByBulletEvent) robô alvejado por tiro ■ onHitByRobot( HitByBulletEvent) robô colide com robô ■ onHitWall( HitWallEvent) robô colide com parede 08/06/2018 (C) 2018 PeterJandlJr. 20 Programação robô é feita como resposta aos eventos de batalha!
  • 21. robô::entidade autônoma programável Controle de Tiro ■ onBulletHit( BulletHitEvent) quando um tiro acerta alvo ■ onBulletHitBullet( BulletHitBulletEvent) quando um tiro acerta um outro tiro ■ onBulletMissed( BulletMissedEvent) quando um tiro erra o alvo ■ onHitByBullet( HitByBulletEvent) quando o robô é alvejado por tiro Controle Avançado ■ onDeath(DeathEvent) detecção da morte do robô ■ onRobotDeath( RobotDeathEvent) detecção de morte de outro robô ■ onWin(WinEvent) quando robô vence ■ onStatus(StatusEvent) acionado a cada vez para prover informações sobre o robô 08/06/2018 (C) 2018 PeterJandlJr. 21 Programação robô é feita como resposta aos eventos de batalha!
  • 22. CRIAÇÃO DE ROBÔSDestroy then all! 08/06/2018 (C) 2018 PeterJandlJr. 22
  • 23. robocode::instalação ■ Fazer download em: https://sourceforge.net/projects/robocode/files/ robocode | robocode-1.9.3.2-setup.jar [2018-04-04] ■ Não descompacte o arquivo! Que deve ser executável, se a configuração do Java estiver correta no seu computador! – Executable Jar File → dois cliques para executar next, next e tudo dará certo! – Outra extensão: ■ Prompt de comandos ■ Navegar até diretório de download do arquivo obtido. ■ Acione o comando: java –jar robocode-1.9.3.2-setup.jar 08/06/2018 (C) 2018 PeterJandlJr. 23 Precisamos do Java JDK 7+ instalado no sistema!
  • 24. Configuração do JDK @echo off set JAVA_HOME="C:Program FilesJavajdk-9" path=%JAVA_HOME%bin;%path% echo %path% echo %JAVA_HOME% java -version 08/06/2018 (C) 2018 PeterJandlJr. 24 Convém possuir um arquivo como esse (J9.bat no meu caso). Localize a versão do JDK instalada do seu sistema e adapte este arquivo. Num prompt de comandos acione este bat. Use este prompt para acionar o robocode!
  • 25. robocode::execução 08/06/2018 (C) 2018 PeterJandlJr. 25 Funciona também pelo Explorer: robocode.bat
  • 26. robôs::Criação ■ Na janela principal: – Robot – Source Editor ■ Na janela do editor: – File – New – Robot ■ Escolha um nome: – MFR ■ Defina um pacote: – jandl ■ Edite o código. 08/06/2018 (C) 2018 PeterJandlJr. 26 Aqui começa a diversão!
  • 27. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 27 (2) Loop principal (1) Inicialização (3) Varredura (4) Alvejado por bala (5) Colisão com parede (0) Campos
  • 28. Robô::estrutura do Código (0) Campos ■ Área que permite a definição de: – Variáveis e estruturas de dados ■ (da classe) do robô. ■ Podem ser livremente declaradas para auxiliar no controle do robô e de suas estratégias de defesa e ataque. ■ Elementos declarados nesta área serão acessíveis em todo código do robô. 08/06/2018 (C) 2018 PeterJandlJr. 28
  • 29. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 29 Sem campos neste primeiro robô. (0) Campos
  • 30. Robô::estrutura do Código (1) Inicialização ■ A inicialização do código de controle do robô pode ser feita na seção inicial do método run(). ■ Elementos locais (i.e., válidos apenas neste método) podem ser acrescentados. ■ Aqui é colocado o código que necessita ser executado apenas uma vez para cada instância do robô, ou seja, para determinar seu estado inicial. 08/06/2018 (C) 2018 PeterJandlJr. 30
  • 31. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 31 (1) Inicialização Este robô simples não requer cuidados especiais.
  • 32. Robô::estrutura do Código (2) Loop principal ■ Laço infinito que determina o comportamento normal do robô, i.e., aquilo que o tanque fará quando não está atacando ou sendo atacado. ■ Em geral corresponde à movimentação do robô pelo campo de batalha. 08/06/2018 (C) 2018 PeterJandlJr. 32
  • 33. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 33 (2) Loop principal Comportamento normal do robô.
  • 34. Robô::estrutura do Código (3) varredura ■ Como consequência da movimentação do radar (de maneira independente ou por meio do giro do tanque), oponentes dentro do raio de varredura (até 1200 pixels de distância) serão localizados. ■ Cada oponente localizado gera um evento ScannedRobotEvent que é entregue ao robô por meio do acionamento do método onScannedRobot(ScannedRobotEvent). ■ Isto possibilita estabelecer uma estratégia de ataque dirigida aos oponente localizados. 08/06/2018 (C) 2018 PeterJandlJr. 34
  • 35. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 35 (3) Varredura Localizou oponente? Fogo nele!
  • 36. Robô::estrutura do Código (3) varredura ■ Como padrão, o canhão e o radar se movimentam junto com o robô. ■ Assim, se a primeira ação em onScannedRobot(ScannedRobotEvent) for fire(1), o tiro irá na direção do robô oponente localizado. 08/06/2018 (C) 2018 PeterJandlJr. 36
  • 37. Robô::estrutura do Código (4) alvejado por bala ■ Quando o robô é atingido por um tiro adversário, é gerado um evento HitByBulletEvent que é entregue ao robô por meio do acionamento do método onHitByBullet(HitByBulletEvent). ■ Isto possibilita estabelecer uma estratégia de defesa relacionada aos oponentes. 08/06/2018 (C) 2018 PeterJandlJr. 37
  • 38. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 38 (4) Alvejado por bala Foi localizado? Melhor fugir!
  • 39. Robô::estrutura do Código (5) colisão com parede ■ Quando o robô colide com uma das parede que delimitam o campo de batalha é gerado um evento HitWallEvent que é entregue ao robô por meio do acionamento do método onHitWall(HitWallEvent). ■ Isto possibilita complementar a estratégia de movimentação do robô estabelecida no método run(). 08/06/2018 (C) 2018 PeterJandlJr. 39
  • 40. Robô:: estruturadoCódigo 08/06/2018 (C) 2018 PeterJandlJr. 40 (5) Colisão com parede Parede? Marcha-a-ré!
  • 41. robôs::Criação ■ Editou ■ Salvou ■ Compilou ■ Tá pronto para batalha! 08/06/2018 (C) 2018 PeterJandlJr. 41 Errinhos não contam! Robôs criados no ambiente já estão disponíveis para novas batalhas!
  • 42. robôs::teste Batalha ZERO ■ Crie uma nova batalha ■ Com seu robô e UM único adversário simples (SittingDuck, para ser feliz ao meno uma vez!) Batalha UM, DOIS ... ■ Crie novas batalhas ■ Adicione, progressivamente, adversários de tipo diferente e em quantidade selecionada. ■ Avalie seu robô! Melhore! 08/06/2018 (C) 2018 PeterJandlJr. 42
  • 43. ROBOCODE:: TECNICALIDADES Detalhes. Sempre os detalhes. 08/06/2018 (C) 2018 PeterJandlJr. 43
  • 44. ◼ robocode.Robot ⚫ robocode.AdvancedRobot robôs::sugestões INICIANTES ■ Tente criar alguns robôs combinando os elementos da API. ■ Observe o comportamento do robô e os resultados obtidos. JOGADORES ■ Estude o código dos robôs exemplo que acompanham o Robocode: – sample.Walls◼ – sample.Tracker◼ – sample.Crazy⚫ ■ Combine suas estratégias na forma de novos robôs. 08/06/2018 (C) 2018 PeterJandlJr. 44
  • 45. Walls2 08/06/2018 (C) 2018 PeterJandlJr. 45
  • 46. robôs:: estratégias de movimentação 1. Trajetória Linear Evita mira fixa. 2. Trajetória Circular ou Elíptica Evita mira fixa e mira linear. 3. Trajetória Oscilante Evita mira linear e circular, mas mira fixa é um problema. 4. Trajetória Randômica Evita mira fixa, linear e circular, mas acaba sendo estatisticamente alvejado. 5. Trajetória Avançada Utiliza dados de posicionamento (e trajetória) dos oponentes para efetuar movimentação. 08/06/2018 (C) 2018 PeterJandlJr. 46 Ficar parado não dá!
  • 47. robôs:: estratégias de mira 1. Mira Fixa Atira na posição onde alvo foi localizado. 2. Mira Linear Atira na posição futura de alvo, assumindo movimento linear uniforme. Efetiva para alvos próximos, falha em outras situações. 3. Mira Circular Atira na posição futura de alvo, assumindo movimento circular uniforme. Efetiva para alvos próximos, falha em outras situações. 4. Mira Oscilante Só é efetiva para robôs que possuem este tipo de movimentação. 5. Mira Adaptativa Utiliza dados de posicionamento (e trajetória) dos oponentes para identificar padrão de movimentação, adaptando forma da mira. 08/06/2018 (C) 2018 PeterJandlJr. 47 Atirar para acertar!
  • 48. robôs:: estratégias de localização 1. Localização Simples Radar e canhão alinhados todo tempo. 2. Localização Circular Mantém radar girando continuamente. 3. Localização Travada/Fixa Mantém radar travado em um algo específico. 4. Localização Ótima Movimenta radar para localizar o máximo de alvos da maneira mais rápida possível. 08/06/2018 (C) 2018 PeterJandlJr. 48 Atirar para acertar!
  • 49. robôs::criação com eclipse 08/06/2018 (C) 2018 PeterJandlJr. 49
  • 50. robôs::criação com eclipse ■ IDE provê mais facilidades para o desenvolvimento de robôs. ■ Pode ser integrado ao Robocode, sem necessidade de qualquer outro recurso. ■ São necessários três passos. 1. Criação de projeto em localização externa ao Eclipse. 2. Inclusão da API do Robocode. 3. Ligação com documentação da API. 08/06/2018 (C) 2018 PeterJandlJr. 50 Também funciona com o Netbeans!
  • 51. robôs::criação com eclipse ■ File | New | Java Project ■ Escolha o Project Name ■ Desmarque Use default location ■ Com Browse selecione diretório robots da instalação do Robocode ■ Acione Next 08/06/2018 (C) 2018 PeterJandlJr. 51
  • 52. robôs::criação com eclipse ■ Selecione aba Libraries ■ Com Add External Jars selecione arquivo robocode.jar no diretório libs da instalação do Robocode ■ Acione Finish 08/06/2018 (C) 2018 PeterJandlJr. 52
  • 53. robôs::criação com eclipse ■ No Package Explorer abra item Referenced Libraries ■ Selecione arquivo robocode.jar ■ Com botão direito acione Properties ■ Com o Browse selecione diretório javadoc do Robocode ■ Acione OK 08/06/2018 (C) 2018 PeterJandlJr. 53
  • 54. robôs::criação com eclipse 08/06/2018 (C) 2018 PeterJandlJr. 54 Documentação integrada da API Editor de código avançado
  • 55. robôs::Criação com eclipse ■ Editou ■ Salvou ■ Compilação automática do IDE ■ Tá pronto para batalha! 08/06/2018 (C) 2018 PeterJandlJr. 55 Errinhos continuam não contando! Robôs criados dessa forma também estão disponíveis para novas batalhas!
  • 57. 08/06/2018 (C) 2018 PeterJandlJr. 57
  • 58. Robô Avançado Ações Paralelas do Robô ■ setAhead(double)| setBack(double) movimentação para frente e para trás ■ setFire(double) | setFireBullet(double) dispara o canhão ■ execute() executa as ações agendadas ■ waitFor(Condition) não retorna até a condição ser alcançada Ações Paralelas do Robô ■ setTurnRight(double) | setTurnLeft(double) gira o robô ■ setTurnGunRight(double)| setTurnGunLeft(double) gira o canhão ■ setTurnRadarRight(double)| setTurnRadarLeft(double) gira o radar 08/06/2018 (C) 2018 PeterJandlJr. 58
  • 59. CRAZY2 08/06/2018 (C) 2018 PeterJandlJr. 59
  • 61. Robocode::Recursos ■ Home http://robocode.sourceforge.net/ ■ Download https://sourceforge.net/projects/robocode/files/ ■ Documentação OnLine http://robocode.sourceforge.net/docs/robocode/ ■ Wiki http://robowiki.net/wiki/Robocode ■ Artigos http://robocode.sourceforge.net/developerWorks.php ■ UFSC https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html ■ YouTube vídeo http://www.youtube.com/watch?v=3qOoDuGkwco 08/06/2018 (C) 2018 PeterJandlJr. 61
  • 62. 08/06/2018 (C) 2018 PeterJandlJr. 62
  • 63. Prof. Peter Jandl Junior ■ prof.peter@fatec.sp.gov.br ■ http://tecnopode.blogspot.com.br 08/06/2018 (C) 2018 PeterJandlJr. 63