ROBOCODE
101
Prof. Ms. Peter Jandl Junior
Análise e Desenvolvimento de Sistemas
FATEC Jundiaí
15/05/2018 (C) 2018 PeterJandlJr. 2
O desenvolvimento de jogos digitais tem
o potencial de conjugar a melhoria nas
habilidades de programação, além de
oportunizar carreira e novos negócios.
15/05/2018 (C) 2018 PeterJandlJr. 3
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 4
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 5
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 6
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 7
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 8
https://www.istoedinheiro.com.br/noticias/dinheiro-e-tecnologia/20110928/explosao-gamemania/2678
Entendeu
porquê os
Jogos
Digitais
são
importantes,
certo?
15/05/2018 (C) 2018 PeterJandlJr. 9
BUILD THE BEST,
DESTROY THE REST!
15/05/2018 (C) 2018 PeterJandlJr. 10
robocode
■ O que é?
■ Objetivo?
■ Jogadores?
■ Jogo de programação.
■ Codificar um robô de
batalha para competir
com outros robôs num
campo de batalha.
■ Os robôs. Programador
não controla seu robô
(durante o jogo)!
15/05/2018 (C) 2018 PeterJandlJr. 11
15/05/2018 (C) 2018 PeterJandlJr. 12
robocode
■ Criador?
■ Onde?
■ Por que?
■ Quando?
2000/2001
■ Mathew Nelson
■ AlphaWorks/IBM
■ Performance de
aplicações Java
■ Competição entre
desenvolvedores
■ Ensino de Programação
15/05/2018 (C) 2018 PeterJandlJr. 13
Mas vem evoluindo
desde então!
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.
15/05/2018 (C) 2018 PeterJandlJr. 14
Isso não é um
tanque!
robocode
■ 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.
15/05/2018 (C) 2018 PeterJandlJr. 15
robocode
■ O jogador (programador) não
tem influência direta no jogo.
Ele deve escrever algum
código "inteligente" para que o
robô enfrente as batalhas
realizadas em tempo real.
■ 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).
15/05/2018 (C) 2018 PeterJandlJr. 16
Robocode::ambiente
15/05/2018 (C) 2018 PeterJandlJr. 17
Arena
Robôs
Controles
Controles
robocode::componentes
■ Ambiente
– Janela principal com campo de batalha (arena) e
controles.
■ Editor de robôs
– Janela secundária independente com acesso a
ferramentas básicas de desenvolvimento.
■ API (Application Programming Interface) do Robocode
– Documentação dos pacotes, classes, interfaces e
exceções que compõem o sistema.
15/05/2018 (C) 2018 PeterJandlJr. 18
robocode::Ambiente
■ 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.
15/05/2018 (C) 2018 PeterJandlJr. 19
robocode::editor
15/05/2018 (C) 2018 PeterJandlJr. 20
Editor de Código
Integrado
robocode::API
15/05/2018 (C) 2018 PeterJandlJr. 21
Documentação
padronizada de todos os
elementos da API.
ANATOMIA DOS
ROBÔS
15/05/2018 (C) 2018 PeterJandlJr. 22
robô = tanque
■ Componentes:
– Veículo
(base móvel)
– Canhão giratório
– Radar giratório
■ Elementos do tanque têm
movimento
independente.
15/05/2018 (C) 2018 PeterJandlJr. 23
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.
15/05/2018 (C) 2018 PeterJandlJr. 24
Direção absoluta do
robô e direção
relativa ao robô.
TANQUE=Robô
PROGRAMÁVEL
■ Os robôs são construídos a partir de uma classe padronizada:
– robocode.Robot
■ Esta classe oferece 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
15/05/2018 (C) 2018 PeterJandlJr. 25
TANQUE=Robô
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
15/05/2018 (C) 2018 PeterJandlJr. 26
TANQUE=Robô
PROGRAMÁVEL
Controle de Eventos do
Robô
■ onScannedRobot(
ScannedRobotEvent)
detecção de robô
■ onHitByBullet(
HitByBulletEvent)
robô alvejado por tiro
■ onHitByRobot(
HitByBulletEvent)
robô colide com robô
■ onHitWall(
HitWallEvent)
robô colide com parede
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
15/05/2018 (C) 2018 PeterJandlJr. 27
Walls2
15/05/2018 (C) 2018 PeterJandlJr. 28
BATALHAS
Onde os fracos não tem vez!
15/05/2018 (C) 2018 PeterJandlJr. 29
batalhas::Criação
■ Batalhas podem ser:
– mano a mano ou
– com múltiplos
oponentes.
■ Duração:
– Um ou
– muitos rounds.
■ Como criar:
– Janela principal
– Battle | New
– Selecione os robôs
que competirão
– Next
– Ajuste número de
rounds, tamanho do
campo de batalha e
outros detalhes.
– Start Battle
15/05/2018 (C) 2018 PeterJandlJr. 30
Quanto mais rounds,
menor é a influência da
sorte no resultado final!
CRIAÇÃO DE ROBÔSDestroy then all!
15/05/2018 (C) 2018 PeterJandlJr. 31
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.
15/05/2018 (C) 2018 PeterJandlJr. 32
Aqui começa a diversão!
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 33
(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ô.
15/05/2018 (C) 2018 PeterJandlJr. 34
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 35
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.
15/05/2018 (C) 2018 PeterJandlJr. 36
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 37
(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.
15/05/2018 (C) 2018 PeterJandlJr. 38
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 39
(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.
15/05/2018 (C) 2018 PeterJandlJr. 40
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 41
(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.
15/05/2018 (C) 2018 PeterJandlJr. 42
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.
15/05/2018 (C) 2018 PeterJandlJr. 43
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 44
(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().
15/05/2018 (C) 2018 PeterJandlJr. 45
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 46
(5) Colisão com parede Parede?
Marcha-a-ré!
robôs::Criação
■ Editou
■ Salvou
■ Compilou
■ Tá pronto para batalha!
15/05/2018 (C) 2018 PeterJandlJr. 47
Errinhos não
contam!
Robôs criados no
ambiente já estão
disponíveis para novas
batalhas!
robôs::criação com eclipse
15/05/2018 (C) 2018 PeterJandlJr. 48
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.
15/05/2018 (C) 2018 PeterJandlJr. 49
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
15/05/2018 (C) 2018 PeterJandlJr. 50
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
15/05/2018 (C) 2018 PeterJandlJr. 51
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
15/05/2018 (C) 2018 PeterJandlJr. 52
robôs::criação com eclipse
15/05/2018 (C) 2018 PeterJandlJr. 53
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!
15/05/2018 (C) 2018 PeterJandlJr. 54
Errinhos
continuam não
contando!
Robôs criados dessa forma também
estão disponíveis para novas
batalhas!
ROBOCODE::
TECNICALIDADES
Detalhes. Sempre os detalhes.
15/05/2018 (C) 2018 PeterJandlJr. 55
robocode::battlefield
15/05/2018 (C) 2018 PeterJandlJr. 56
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.
15/05/2018 (C) 2018 PeterJandlJr. 57
robocode::heading & bearing
15/05/2018 (C) 2018 PeterJandlJr. 58
Norte é
0°
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
15/05/2018 (C) 2018 PeterJandlJr. 59
robocode::+tecnicalidades
■ Uso extensivo de threads.
– Gerenciador de Batalha [thread de controle central]
■ Controla os robôs e seus disparos.
■ Efetua a renderização dos robôs na arena.
– Robô [thread individual]
■ Cada robô utiliza uma thread independente.
■ Método run() contém a lógica executada pelo robô, ou seja, determina seu
comportamento.
■ Cada robô intercepta e processa seus próprio eventos, utilizando uma fila
de eventos própria.
■ Subsistema de Renderização
– Baseado no Java2D API.
15/05/2018 (C) 2018 PeterJandlJr. 60
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.
15/05/2018 (C) 2018 PeterJandlJr. 61
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
15/05/2018 (C) 2018 PeterJandlJr. 62
CRAZY2
15/05/2018 (C) 2018 PeterJandlJr. 63
15/05/2018 (C) 2018 PeterJandlJr. 64
Muitos detalhes?
◼ 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.
15/05/2018 (C) 2018 PeterJandlJr. 65
robôs::sugestões
COMPETIDORES■ Desenvolva novas
estratégias mais
sofisticadas.
■ Simule combates e
analise os resultados.
15/05/2018 (C) 2018 PeterJandlJr. 66
ROBOCODE::RECURSOS
Existe salvação!
15/05/2018 (C) 2018 PeterJandlJr. 67
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
15/05/2018 (C) 2018 PeterJandlJr. 68
15/05/2018 (C) 2018 PeterJandlJr. 69
Prof. Peter Jandl Junior
■ prof.peter@fatec.sp.gov.br
■ http://tecnopode.blogspot.com.br
15/05/2018 (C) 2018 PeterJandlJr. 70

Robocode 101

  • 1.
    ROBOCODE 101 Prof. Ms. PeterJandl Junior Análise e Desenvolvimento de Sistemas FATEC Jundiaí
  • 2.
    15/05/2018 (C) 2018PeterJandlJr. 2 O desenvolvimento de jogos digitais tem o potencial de conjugar a melhoria nas habilidades de programação, além de oportunizar carreira e novos negócios.
  • 3.
    15/05/2018 (C) 2018PeterJandlJr. 3 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 4.
    15/05/2018 (C) 2018PeterJandlJr. 4 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 5.
    15/05/2018 (C) 2018PeterJandlJr. 5 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 6.
    15/05/2018 (C) 2018PeterJandlJr. 6 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 7.
    15/05/2018 (C) 2018PeterJandlJr. 7 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 8.
    15/05/2018 (C) 2018PeterJandlJr. 8 https://www.istoedinheiro.com.br/noticias/dinheiro-e-tecnologia/20110928/explosao-gamemania/2678
  • 9.
  • 10.
    BUILD THE BEST, DESTROYTHE REST! 15/05/2018 (C) 2018 PeterJandlJr. 10
  • 11.
    robocode ■ O queé? ■ Objetivo? ■ Jogadores? ■ Jogo de programação. ■ Codificar um robô de batalha para competir com outros robôs num campo de batalha. ■ Os robôs. Programador não controla seu robô (durante o jogo)! 15/05/2018 (C) 2018 PeterJandlJr. 11
  • 12.
    15/05/2018 (C) 2018PeterJandlJr. 12
  • 13.
    robocode ■ Criador? ■ Onde? ■Por que? ■ Quando? 2000/2001 ■ Mathew Nelson ■ AlphaWorks/IBM ■ Performance de aplicações Java ■ Competição entre desenvolvedores ■ Ensino de Programação 15/05/2018 (C) 2018 PeterJandlJr. 13 Mas vem evoluindo desde então!
  • 14.
    robocode ■ Robôs sãotanques, 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. 15/05/2018 (C) 2018 PeterJandlJr. 14 Isso não é um tanque!
  • 15.
    robocode ■ Robôs sãoprogramados 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. 15/05/2018 (C) 2018 PeterJandlJr. 15
  • 16.
    robocode ■ O jogador(programador) não tem influência direta no jogo. Ele deve escrever algum código "inteligente" para que o robô enfrente as batalhas realizadas em tempo real. ■ 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). 15/05/2018 (C) 2018 PeterJandlJr. 16
  • 17.
    Robocode::ambiente 15/05/2018 (C) 2018PeterJandlJr. 17 Arena Robôs Controles Controles
  • 18.
    robocode::componentes ■ Ambiente – Janelaprincipal com campo de batalha (arena) e controles. ■ Editor de robôs – Janela secundária independente com acesso a ferramentas básicas de desenvolvimento. ■ API (Application Programming Interface) do Robocode – Documentação dos pacotes, classes, interfaces e exceções que compõem o sistema. 15/05/2018 (C) 2018 PeterJandlJr. 18
  • 19.
    robocode::Ambiente ■ 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. 15/05/2018 (C) 2018 PeterJandlJr. 19
  • 20.
    robocode::editor 15/05/2018 (C) 2018PeterJandlJr. 20 Editor de Código Integrado
  • 21.
    robocode::API 15/05/2018 (C) 2018PeterJandlJr. 21 Documentação padronizada de todos os elementos da API.
  • 22.
  • 23.
    robô = tanque ■Componentes: – Veículo (base móvel) – Canhão giratório – Radar giratório ■ Elementos do tanque têm movimento independente. 15/05/2018 (C) 2018 PeterJandlJr. 23
  • 24.
    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. 15/05/2018 (C) 2018 PeterJandlJr. 24 Direção absoluta do robô e direção relativa ao robô.
  • 25.
    TANQUE=Robô PROGRAMÁVEL ■ Os robôssão construídos a partir de uma classe padronizada: – robocode.Robot ■ Esta classe oferece 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 15/05/2018 (C) 2018 PeterJandlJr. 25
  • 26.
    TANQUE=Robô 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 15/05/2018 (C) 2018 PeterJandlJr. 26
  • 27.
    TANQUE=Robô PROGRAMÁVEL Controle de Eventosdo Robô ■ onScannedRobot( ScannedRobotEvent) detecção de robô ■ onHitByBullet( HitByBulletEvent) robô alvejado por tiro ■ onHitByRobot( HitByBulletEvent) robô colide com robô ■ onHitWall( HitWallEvent) robô colide com parede 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 15/05/2018 (C) 2018 PeterJandlJr. 27
  • 28.
  • 29.
    BATALHAS Onde os fracosnão tem vez! 15/05/2018 (C) 2018 PeterJandlJr. 29
  • 30.
    batalhas::Criação ■ Batalhas podemser: – mano a mano ou – com múltiplos oponentes. ■ Duração: – Um ou – muitos rounds. ■ Como criar: – Janela principal – Battle | New – Selecione os robôs que competirão – Next – Ajuste número de rounds, tamanho do campo de batalha e outros detalhes. – Start Battle 15/05/2018 (C) 2018 PeterJandlJr. 30 Quanto mais rounds, menor é a influência da sorte no resultado final!
  • 31.
    CRIAÇÃO DE ROBÔSDestroythen all! 15/05/2018 (C) 2018 PeterJandlJr. 31
  • 32.
    robôs::Criação ■ Na janelaprincipal: – Robot – Source Editor ■ Na janela do editor: – File – New – Robot ■ Escolha um nome: – MFR ■ Defina um pacote: – jandl ■ Edite o código. 15/05/2018 (C) 2018 PeterJandlJr. 32 Aqui começa a diversão!
  • 33.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 33 (2) Loop principal (1) Inicialização (3) Varredura (4) Alvejado por bala (5) Colisão com parede (0) Campos
  • 34.
    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ô. 15/05/2018 (C) 2018 PeterJandlJr. 34
  • 35.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 35 Sem campos neste primeiro robô. (0) Campos
  • 36.
    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. 15/05/2018 (C) 2018 PeterJandlJr. 36
  • 37.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 37 (1) Inicialização Este robô simples não requer cuidados especiais.
  • 38.
    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. 15/05/2018 (C) 2018 PeterJandlJr. 38
  • 39.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 39 (2) Loop principal Comportamento normal do robô.
  • 40.
    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. 15/05/2018 (C) 2018 PeterJandlJr. 40
  • 41.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 41 (3) Varredura Localizou oponente? Fogo nele!
  • 42.
    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. 15/05/2018 (C) 2018 PeterJandlJr. 42
  • 43.
    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. 15/05/2018 (C) 2018 PeterJandlJr. 43
  • 44.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 44 (4) Alvejado por bala Foi localizado? Melhor fugir!
  • 45.
    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(). 15/05/2018 (C) 2018 PeterJandlJr. 45
  • 46.
    Robô:: estruturadoCódigo 15/05/2018 (C) 2018PeterJandlJr. 46 (5) Colisão com parede Parede? Marcha-a-ré!
  • 47.
    robôs::Criação ■ Editou ■ Salvou ■Compilou ■ Tá pronto para batalha! 15/05/2018 (C) 2018 PeterJandlJr. 47 Errinhos não contam! Robôs criados no ambiente já estão disponíveis para novas batalhas!
  • 48.
  • 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. 15/05/2018 (C) 2018 PeterJandlJr. 49 Também funciona com o Netbeans!
  • 50.
    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 15/05/2018 (C) 2018 PeterJandlJr. 50
  • 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 15/05/2018 (C) 2018 PeterJandlJr. 51
  • 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 15/05/2018 (C) 2018 PeterJandlJr. 52
  • 53.
    robôs::criação com eclipse 15/05/2018(C) 2018 PeterJandlJr. 53 Documentação integrada da API Editor de código avançado
  • 54.
    robôs::Criação com eclipse ■Editou ■ Salvou ■ Compilação automática do IDE ■ Tá pronto para batalha! 15/05/2018 (C) 2018 PeterJandlJr. 54 Errinhos continuam não contando! Robôs criados dessa forma também estão disponíveis para novas batalhas!
  • 55.
    ROBOCODE:: TECNICALIDADES Detalhes. Sempre osdetalhes. 15/05/2018 (C) 2018 PeterJandlJr. 55
  • 56.
  • 57.
    robocode::battlefield ■ Tamanho defaultdo 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. 15/05/2018 (C) 2018 PeterJandlJr. 57
  • 58.
    robocode::heading & bearing 15/05/2018(C) 2018 PeterJandlJr. 58 Norte é 0°
  • 59.
    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 15/05/2018 (C) 2018 PeterJandlJr. 59
  • 60.
    robocode::+tecnicalidades ■ Uso extensivode threads. – Gerenciador de Batalha [thread de controle central] ■ Controla os robôs e seus disparos. ■ Efetua a renderização dos robôs na arena. – Robô [thread individual] ■ Cada robô utiliza uma thread independente. ■ Método run() contém a lógica executada pelo robô, ou seja, determina seu comportamento. ■ Cada robô intercepta e processa seus próprio eventos, utilizando uma fila de eventos própria. ■ Subsistema de Renderização – Baseado no Java2D API. 15/05/2018 (C) 2018 PeterJandlJr. 60
  • 61.
    Robô Avançado ■ Robôsmelhores 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. 15/05/2018 (C) 2018 PeterJandlJr. 61
  • 62.
    Robô Avançado Ações Paralelasdo 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 15/05/2018 (C) 2018 PeterJandlJr. 62
  • 63.
  • 64.
    15/05/2018 (C) 2018PeterJandlJr. 64 Muitos detalhes?
  • 65.
    ◼ 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. 15/05/2018 (C) 2018 PeterJandlJr. 65
  • 66.
    robôs::sugestões COMPETIDORES■ Desenvolva novas estratégiasmais sofisticadas. ■ Simule combates e analise os resultados. 15/05/2018 (C) 2018 PeterJandlJr. 66
  • 67.
  • 68.
    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 15/05/2018 (C) 2018 PeterJandlJr. 68
  • 69.
    15/05/2018 (C) 2018PeterJandlJr. 69
  • 70.
    Prof. Peter JandlJunior ■ prof.peter@fatec.sp.gov.br ■ http://tecnopode.blogspot.com.br 15/05/2018 (C) 2018 PeterJandlJr. 70