SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

ODP
Batalhas com Robocode
PPTX
Presentation on robotics
PPTX
ZarahMaeTirolTalavera Robotics Powerpoint Presentation
PPTX
Drone’s
PPTX
Robotics
PPTX
Robotics
PPTX
Robotic for presentation 11 10-2018
PPTX
robotics ppt
Batalhas com Robocode
Presentation on robotics
ZarahMaeTirolTalavera Robotics Powerpoint Presentation
Drone’s
Robotics
Robotics
Robotic for presentation 11 10-2018
robotics ppt

Mais procurados (20)

PPT
Military Robots
PPTX
Robotics
PPTX
DOCX
Questões+8.112 90+cespe
PPTX
Robots & Robotics
PPTX
Robots.pptx 1
PPTX
Future of Robotics Technology.pptx
PPTX
Presentation of robotics
PPTX
Drone-Unmanned Aerial Vehicle
PDF
Surgical Robots: Emerging Technologies
PPTX
ROS Based Programming and Visualization of Quadrotor Helicopters
PPTX
CST 20363 Session 5 Robotics
PPTX
Robotics
PPSX
What is Robotics - Robotics Concept Explained for Kids
PPT
Military Robots
PPT
Robots presentation
PPT
Robotics Presentation
PPTX
Robotic introduction
PPTX
Introduction to robotics
Military Robots
Robotics
Questões+8.112 90+cespe
Robots & Robotics
Robots.pptx 1
Future of Robotics Technology.pptx
Presentation of robotics
Drone-Unmanned Aerial Vehicle
Surgical Robots: Emerging Technologies
ROS Based Programming and Visualization of Quadrotor Helicopters
CST 20363 Session 5 Robotics
Robotics
What is Robotics - Robotics Concept Explained for Kids
Military Robots
Robots presentation
Robotics Presentation
Robotic introduction
Introduction to robotics
Anúncio

Semelhante a Robocode 666 (20)

PDF
Robocode 101
PDF
Revisitando o Robocode
PDF
PPTX
PPTX
ODP
PDF
I mini curso e torneio robocode.pptx
PPTX
Apresentação 2
PDF
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
PDF
Robot Operating System - Iniciação a Robótica
PDF
A. p. tecnologias
PPTX
Palestra - Introdução a Robótica
PDF
Quer aprender mais sobre robótica
PDF
Robótica seminário-ppt
PPTX
Introduçãoa sskdlasadscdddRoboticas.pptx
PDF
Programação de robo
PDF
Robótica
PPT
Sistemas Robotizados
Robocode 101
Revisitando o Robocode
I mini curso e torneio robocode.pptx
Apresentação 2
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
Robot Operating System - Iniciação a Robótica
A. p. tecnologias
Palestra - Introdução a Robótica
Quer aprender mais sobre robótica
Robótica seminário-ppt
Introduçãoa sskdlasadscdddRoboticas.pptx
Programação de robo
Robótica
Sistemas Robotizados
Anúncio

Mais de Peter Jandl Junior (11)

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

Último (16)

PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Custos e liquidação no SAP Transportation Management, TM130 Col18
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Processos na gestão de transportes, TM100 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Arquitetura de computadores - Memórias Secundárias
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
COBITxITIL-Entenda as diferença em uso governança TI
Termos utilizados na designação de relação entre pessoa e uma obra.pdf

Robocode 666

  • 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