SlideShare uma empresa Scribd logo
Prof. Ms. Peter Jandl Junior
Aula Aberta
Análise e Desenvolvimento de Sistemas
FATEC JundiaíFATEC Jundiaí
Já sabemos queJá sabemos que
Matemática,
Física e
Programação
podem ser
uma mistura
09/09/2016(C) 2016 PeterJandlJr 2
uma mistura
muito
interessante!
09/09/2016(C) 2016 PeterJandlJr 3
Build the best, destroy the rest!
09/09/2016 4(C) 2016 PeterJandlJr
 O que é?  Jogo de
programação
 Objetivo?
programação
 Codificar um robô
de batalha para
competir com
outros robôs num
campo de batalha.
 Jogadores?
campo de batalha.
 Os robôs.
Programador não
controla seu robô!
09/09/2016 5(C) 2016 PeterJandlJr
 Criador?  Mathew Nelson
 Onde?
 Por que?
Quando?
 AlphaWorks/IBM
 Performance de
aplicações Java
 Competição entre Quando?
2000/2001
 Competição entre
desenvolvedores
 Ensino de
Programação
09/09/2016 6(C) 2016 PeterJandlJr
Mas vem evoluindo
desde então!
 Robôs são tanques, capazes de
 movimentar-se; 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.retangular sem entradas ou saídas.
 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).
09/09/2016 7(C) 2016 PeterJandlJr
 Robôs são programados via Java para ataque
e defesa. Pontuam ao longo do combate.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.longo dos diversos rounds da batalha.
 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.
09/09/2016 8(C) 2016 PeterJandlJr
ArenaArena
Robôs
Controles
09/09/2016(C) 2016 PeterJandlJr 9
Robôs
Controles
 Ambiente
 Janela principal com campo de batalha (arena) e 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.
09/09/2016(C) 2016 PeterJandlJr 10
 Permite:
 Criar, abrir e salvar batalhas; Criar, abrir e salvar batalhas;
 Pausar, continuar e finalizar batalhas;
 Visualizar estatísticas e destruir qualquer robô.
 É possível customizar:
 Tamanho da arena 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.
09/09/2016(C) 2016 PeterJandlJr 11
Editor de Código
Integrado
09/09/2016(C) 2016 PeterJandlJr 12
Documentação
padronizada de todos
os elementos da API.
09/09/2016(C) 2016 PeterJandlJr 13
Detalhes. Sempre os detalhes.
09/09/2016(C) 2016 PeterJandlJr 14
09/09/2016(C) 2016 PeterJandlJr 15
 Tamanho default do
campo de batalha 800 x 600 pixelscampo 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).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.
09/09/2016(C) 2016 PeterJandlJr 16
Norte
é 0°
09/09/2016(C) 2016 PeterJandlJr 17
 Acerto +3*energia
 Erro -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
09/09/2016(C) 2016 PeterJandlJr 18
 Uso extensivo de threads.
 Gerenciador de Batalha [thread de controle central] 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 Cada robô intercepta e processa seus próprio eventos, utilizando
uma fila de eventos própria.
 Subsistema de Renderização
 Baseado no Java2D API.
09/09/2016(C) 2016 PeterJandlJr 19
Muitos detalhes?
09/09/2016(C) 2016 PeterJandlJr 20
09/09/2016(C) 2016 PeterJandlJr 21
 Componentes:
 Veículo Veículo
(base móvel)
 Canhão giratório
 Radar giratório
 Elementos do
tanque têmtanque têm
movimento
independente.
09/09/2016(C) 2016 PeterJandlJr 22
 Energia Inicial 100
 Velocidade 8 pixels/turn 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, Dados de varredura distância, nome,
velocidade,
heading, bearing
e energia
09/09/2016(C) 2016 PeterJandlJr 23
Direção absoluta
do robô e direção
relativa ao robô.
 Os robôs são construídos a partir de uma
classe padronizada: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
09/09/2016(C) 2016 PeterJandlJr 24
 getX() | getY()
coordenada do robô
 getWidth () | getHeight()
 ahead(double)|back(double)
movimentação
 turnRight(double) | getWidth () | getHeight()
dimensões do robô
 getHeading() |
getGunHeading() |
getRadarHeading()
direção do robô, do
canhão e do radar
 getVelocity()
 turnRight(double) |
turnLeft(double)
gira o robô
 turnGunRight(double) |
turnGunLeft(double)
gira o canhão
 turnRadarRight(double) |
turnRadarLeft(double)
Informações do Robô Ações do Robô
 getVelocity()
velocidade do robô
 getEnergy()
energia do robô
turnRadarLeft(double)
gira o radar
 scan()
varredura por outros robôs
09/09/2016(C) 2016 PeterJandlJr 25
 onScannedRobot(
ScannedRobotEvent)
detecção de robô
 getBattleFieldWidth() |
getBattleFieldHeight()
largura e altura da arenadetecção de robô
 onHitByBullet(
HitByBulletEvent)
robô alvejado por tiro
 onHitByRobot(
HitByBulletEvent)
robô colide com robô
 onHitWall(
largura e altura da arena
 getNumRounds()
núm. de rounds da batalha
 getRoundNum()
round da batalha
 getTime()
tempo batalha
getOthers()
Controle de Eventos do Robô Informações do Ambiente
 onHitWall(
HitWallEvent)
robô colide com parede
 getOthers()
núm. atual de oponentes
09/09/2016(C) 2016 PeterJandlJr 26
09/09/2016(C) 2016 PeterJandlJr 27
 Robôs melhores podem ser construídos a partir de
robocode.AdvancedRobot.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. 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.
09/09/2016(C) 2016 PeterJandlJr 28
 setAhead(double)|
setBack(double)
movimentação para
 setTurnRight(double) |
setTurnLeft(double)
gira o robômovimentação para
frente e para trás
 setFire(double) |
setFireBullet(double)
dispara o canhão
 execute()
executa as ações
agendadas
gira o robô
 setTurnGunRight(double)|
setTurnGunLeft(double)
gira o canhão
 setTurnRadarRight(double)|
setTurnRadarLeft(double)
gira o radar
Ações Paralelas do Robô Ações Paralelas do Robô
agendadas
 waitFor(Condition)
não retorna até a
condição ser alcançada
09/09/2016(C) 2016 PeterJandlJr 29
09/09/2016(C) 2016 PeterJandlJr 30
Onde os fracos não tem vez!
09/09/2016(C) 2016 PeterJandlJr 31
 Batalhas podem
ser:
 Como criar:
 Janela principalser:
 mano a mano ou
 com múltiplos
oponentes.
 Duração:
 Um ou
 Janela principal
 Battle | New
 Selecione os robôs
que competirão
 Next
 Ajuste número de Um ou
 muitos rounds.
Ajuste número de
rounds, tamanho do
campo de batalha e
outros detalhes.
 Start Battle
09/09/2016(C) 2016 PeterJandlJr 32
Quanto mais rounds,
menor é a influência da
sorte no resultado final!
Destroy then all!
09/09/2016(C) 2016 PeterJandlJr 33
 Na janela
principal:
 Escolha um nome:
 MFRprincipal:
 Robot
 Source Editor
 Na janela do
editor:
 File
 MFR
 Defina um pacote:
 jandl
 Edite o código.
 File
 New
 Robot
09/09/2016(C) 2016 PeterJandlJr 34
Aqui começa a diversão!
(1) Inicialização
(0) Campos
(2) Loop principal
(1) Inicialização
(3) Varredura
09/09/2016(C) 2016 PeterJandlJr 35
(4) Alvejado por bala
(5) Colisão com parede
 Área que permite a definição de:
 Variáveis e estruturas de dados 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 Elementos declarados nesta área serão
acessíveis em todo código do robô.
09/09/2016(C) 2016 PeterJandlJr 36
Sem campos neste
primeiro robô.
(0) Campos
09/09/2016(C) 2016 PeterJandlJr 37
 A inicialização do código de controle do robô
pode ser feita na seção inicial do métodopode 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 cadaexecutado apenas uma vez para cada
instância do robô, ou seja, para determinar
seu estado inicial.
09/09/2016(C) 2016 PeterJandlJr 38
(1) Inicialização Este robô(1) Inicialização Este robô
simples não
requer cuidados
especiais.
09/09/2016(C) 2016 PeterJandlJr 39
 Laço infinito que determina o
comportamento normal do robô, i.e., aquilocomportamento 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.
09/09/2016(C) 2016 PeterJandlJr 40
(2) Loop principal Comportamento(2) Loop principal Comportamento
normal do robô.
09/09/2016(C) 2016 PeterJandlJr 41
 Como consequência da movimentação do
radar (de maneira independente ou por meioradar (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étodopor meio do acionamento do método
onScannedRobot(ScannedRobotEvent).
 Isto possibilita estabelecer uma estratégia de
ataque dirigida aos oponente localizados.
09/09/2016(C) 2016 PeterJandlJr 42
(3) Varredura Localizou oponente?
Fogo nele!
09/09/2016(C) 2016 PeterJandlJr 43
 Como padrão, o canhão e o radar se
movimentam junto com o robô.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.
09/09/2016(C) 2016 PeterJandlJr 44
 Quando o robô é atingido por um tiro
adversário, é gerado um eventoadversá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.
09/09/2016(C) 2016 PeterJandlJr 45
(4) Alvejado por bala Foi localizado?
Melhor fugir!
09/09/2016(C) 2016 PeterJandlJr 46
Melhor fugir!
 Quando o robô colide com uma das parede
que delimitam o campo de batalha é geradoque 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().método run().
09/09/2016(C) 2016 PeterJandlJr 47
09/09/2016(C) 2016 PeterJandlJr 48
(5) Colisão com parede Parede?
Marcha-a-ré!
 Editou
 Salvou
Errinhos não
contam! Salvou
 Compilou
 Tá pronto para
contam!
Tá pronto para
batalha!
09/09/2016(C) 2016 PeterJandlJr 49
Robôs criados no
ambiente já estão
disponíveis para novas
batalhas!
09/09/2016(C) 2016 PeterJandlJr 50
 IDE provê mais
facilidades para o
1. Criação de
projeto emfacilidades para o
desenvolvimento
de robôs.
 Pode ser integrado
ao Robocode, sem
necessidade de
qualquer outro
projeto em
localização
externa ao
Eclipse.
2. Inclusão da API
do Robocode.
3. Ligação comqualquer outro
recurso.
 São necessários
três passos.
3. Ligação com
documentação da
API.
09/09/2016(C) 2016 PeterJandlJr 51
 File | New |
Java ProjectJava Project
 Escolha o
Project Name
 Desmarque
Use default location
 Com Browse
selecione diretórioselecione diretório
robots da instalação
do Robocode
 Acione Next
09/09/2016(C) 2016 PeterJandlJr 52
 Selecione aba
LibrariesLibraries
 Com Add External
Jars selecione
arquivo robocode.jar
no diretório libs da
instalação doinstalação do
Robocode
 Acione Finish
09/09/2016(C) 2016 PeterJandlJr 53
 No Package Explorer
abra itemabra item
Referenced Libraries
 Selecione arquivo
robocode.jar
 Com botão direito
acione Properties
Com o Browse Com o Browse
selecione diretório
javadoc do Robocode
 Acione OK
09/09/2016(C) 2016 PeterJandlJr 54
Editor de código
avançado
09/09/2016(C) 2016 PeterJandlJr 55
Documentação
integrada da API
 Editou
 Salvou
Errinhos
continuam não
contando!
 Salvou
 Compilação
automática do IDE
contando!
 Tá pronto para
batalha!
09/09/2016(C) 2016 PeterJandlJr 56
Robôs criados dessa forma
também estão disponíveis para
novas batalhas!
 Tente criar alguns
robôs combinando os
 Estude o código dos
robôs exemplo querobôs combinando os
elementos da API.
 Observe o
comportamento do
robô e os resultados
obtidos.
robôs exemplo que
acompanham o
Robocode:
 sample.Walls
 sample.Tracker
 sample.Crazy
 Combine suas
 robocode.Robot
 robocode.AdvancedRobot
INICIANTES JOGADORES
 Combine suas
estratégias na forma
de novos robôs.
09/09/2016(C) 2016 PeterJandlJr 57
 Desenvolva novas
estratégias mais
COMPETIDORES
estratégias mais
sofisticadas.
 Simule combates e
analise os resultados.
09/09/2016(C) 2016 PeterJandlJr 58
09/09/2016(C) 2016 PeterJandlJr 59
 Home
http://robocode.sourceforge.net/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
Wiki
http://robowiki.net/wiki/Robocode
 Artigos
http://robocode.sourceforge.net/developerWorks.php
09/09/2016(C) 2016 PeterJandlJr 60
09/09/2016(C) 2016 PeterJandlJr 61
Prof. Peter Jandl JuniorProf. Peter Jandl Junior
prof.peter@fatec.sp.gov.br
http://tecnopode.blogspot.com.br
09/09/2016(C) 2016 PeterJandlJr 62

Mais conteúdo relacionado

ODP
Batalhas com Robocode
PPT
Desvios posturais
PPT
Regras FIFA
PPT
AprMot_Intro2022.ppt
PPTX
Ugv & uav
PPT
Aula 3 projovem trabalhador 14.04
PPTX
RESSONÂNCIA MAGNÉTICA
PDF
Mamografia figuras
Batalhas com Robocode
Desvios posturais
Regras FIFA
AprMot_Intro2022.ppt
Ugv & uav
Aula 3 projovem trabalhador 14.04
RESSONÂNCIA MAGNÉTICA
Mamografia figuras

Mais procurados (10)

PPT
Dimensões Sociais do Esporte. Profª Drª. Vera Costa e Profª Drª. Ludmila Mourão
PPTX
aula coluna lombar e cervical 2015 (1).pptx
PDF
Apostilaposicionamentocompleta 140324113446-phpapp01 - cópia
PPT
Apresentação slack
PDF
Atenção, foco e concentração
PPTX
Urografia excretora - Abordagem completa
PPT
Psicologia - radiologia
PPTX
Minicurso Oratoria
PPT
Nado Crawl Power Point
PPS
Rotinas Específicas nas Incidências do Punho
Dimensões Sociais do Esporte. Profª Drª. Vera Costa e Profª Drª. Ludmila Mourão
aula coluna lombar e cervical 2015 (1).pptx
Apostilaposicionamentocompleta 140324113446-phpapp01 - cópia
Apresentação slack
Atenção, foco e concentração
Urografia excretora - Abordagem completa
Psicologia - radiologia
Minicurso Oratoria
Nado Crawl Power Point
Rotinas Específicas nas Incidências do Punho
Anúncio

Semelhante a Revisitando o Robocode (20)

PDF
PDF
Robocode 101
PDF
Robocode 666
PPTX
PPTX
ODP
PDF
Sbia 2010-tutorial-slides-part-ii
PPT
Rastreamento 3D de objetos para realidade virtual
PPT
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
PDF
PPT
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
PPT
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
PDF
paradigmas_de_programacao_2_X.pdf
PDF
paradigmas_de_programacao_2_X.pdf
PDF
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
PPTX
[MobiTrends] Desenvolvimento de Jogos para Dispositivos Móveis
PPT
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
PPT
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Robocode 101
Robocode 666
Sbia 2010-tutorial-slides-part-ii
Rastreamento 3D de objetos para realidade virtual
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
paradigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdf
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
[MobiTrends] Desenvolvimento de Jogos para Dispositivos Móveis
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
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 (20)

PDF
Uma Introdução às Ciências do Alcorão (Islam)
PPTX
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
PDF
saeb_documentos_de_referencia_versao_1.0.pdf
PDF
A provisão de jojuador (ramadã) islamismo
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
brasilcolnia2-101027184359-phpapp02.pptx
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PDF
O retorno a origem (islã Islamismo)
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPT
sistema reprodutor para turmas do oitavo ano
PPTX
O Romantismo e a identidade brasileira..
PPTX
Pedagogia em Ambientes Não Escolares.pptx
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PDF
Cantores.pdf-Deslandes, Tinoco e Zambujo
PPTX
MENDEL - Aula sobre Mendel - Genética EM
PPT
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPTX
Ciências da Natureza e suas áreas de desenvolvimento
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PPTX
Slide_Macronutrientes e Antinutrientes da Dieta Humana.pptx
Uma Introdução às Ciências do Alcorão (Islam)
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
saeb_documentos_de_referencia_versao_1.0.pdf
A provisão de jojuador (ramadã) islamismo
Aula 13 - Tópico Frasal - Argumentação.pptx
brasilcolnia2-101027184359-phpapp02.pptx
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
O retorno a origem (islã Islamismo)
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
sistema reprodutor para turmas do oitavo ano
O Romantismo e a identidade brasileira..
Pedagogia em Ambientes Não Escolares.pptx
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
Cantores.pdf-Deslandes, Tinoco e Zambujo
MENDEL - Aula sobre Mendel - Genética EM
HISTOLOGIA VEGETAL - tecidos vegetais.ppt
GUERRAFRIA.pptdddddddddddddddddddddddddx
Ciências da Natureza e suas áreas de desenvolvimento
NR11 - Treinamento Direcao Defensiva - 2023.pptx
Slide_Macronutrientes e Antinutrientes da Dieta Humana.pptx

Revisitando o Robocode

  • 1. Prof. Ms. Peter Jandl Junior Aula Aberta Análise e Desenvolvimento de Sistemas FATEC JundiaíFATEC Jundiaí
  • 2. Já sabemos queJá sabemos que Matemática, Física e Programação podem ser uma mistura 09/09/2016(C) 2016 PeterJandlJr 2 uma mistura muito interessante!
  • 4. Build the best, destroy the rest! 09/09/2016 4(C) 2016 PeterJandlJr
  • 5.  O que é?  Jogo de programação  Objetivo? programação  Codificar um robô de batalha para competir com outros robôs num campo de batalha.  Jogadores? campo de batalha.  Os robôs. Programador não controla seu robô! 09/09/2016 5(C) 2016 PeterJandlJr
  • 6.  Criador?  Mathew Nelson  Onde?  Por que? Quando?  AlphaWorks/IBM  Performance de aplicações Java  Competição entre Quando? 2000/2001  Competição entre desenvolvedores  Ensino de Programação 09/09/2016 6(C) 2016 PeterJandlJr Mas vem evoluindo desde então!
  • 7.  Robôs são tanques, capazes de  movimentar-se; 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.retangular sem entradas ou saídas.  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). 09/09/2016 7(C) 2016 PeterJandlJr
  • 8.  Robôs são programados via Java para ataque e defesa. Pontuam ao longo do combate.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.longo dos diversos rounds da batalha.  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. 09/09/2016 8(C) 2016 PeterJandlJr
  • 10.  Ambiente  Janela principal com campo de batalha (arena) e 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. 09/09/2016(C) 2016 PeterJandlJr 10
  • 11.  Permite:  Criar, abrir e salvar batalhas; Criar, abrir e salvar batalhas;  Pausar, continuar e finalizar batalhas;  Visualizar estatísticas e destruir qualquer robô.  É possível customizar:  Tamanho da arena 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. 09/09/2016(C) 2016 PeterJandlJr 11
  • 13. Documentação padronizada de todos os elementos da API. 09/09/2016(C) 2016 PeterJandlJr 13
  • 14. Detalhes. Sempre os detalhes. 09/09/2016(C) 2016 PeterJandlJr 14
  • 16.  Tamanho default do campo de batalha 800 x 600 pixelscampo 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).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. 09/09/2016(C) 2016 PeterJandlJr 16
  • 18.  Acerto +3*energia  Erro -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 09/09/2016(C) 2016 PeterJandlJr 18
  • 19.  Uso extensivo de threads.  Gerenciador de Batalha [thread de controle central] 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 Cada robô intercepta e processa seus próprio eventos, utilizando uma fila de eventos própria.  Subsistema de Renderização  Baseado no Java2D API. 09/09/2016(C) 2016 PeterJandlJr 19
  • 22.  Componentes:  Veículo Veículo (base móvel)  Canhão giratório  Radar giratório  Elementos do tanque têmtanque têm movimento independente. 09/09/2016(C) 2016 PeterJandlJr 22
  • 23.  Energia Inicial 100  Velocidade 8 pixels/turn 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, Dados de varredura distância, nome, velocidade, heading, bearing e energia 09/09/2016(C) 2016 PeterJandlJr 23 Direção absoluta do robô e direção relativa ao robô.
  • 24.  Os robôs são construídos a partir de uma classe padronizada: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 09/09/2016(C) 2016 PeterJandlJr 24
  • 25.  getX() | getY() coordenada do robô  getWidth () | getHeight()  ahead(double)|back(double) movimentação  turnRight(double) | getWidth () | getHeight() dimensões do robô  getHeading() | getGunHeading() | getRadarHeading() direção do robô, do canhão e do radar  getVelocity()  turnRight(double) | turnLeft(double) gira o robô  turnGunRight(double) | turnGunLeft(double) gira o canhão  turnRadarRight(double) | turnRadarLeft(double) Informações do Robô Ações do Robô  getVelocity() velocidade do robô  getEnergy() energia do robô turnRadarLeft(double) gira o radar  scan() varredura por outros robôs 09/09/2016(C) 2016 PeterJandlJr 25
  • 26.  onScannedRobot( ScannedRobotEvent) detecção de robô  getBattleFieldWidth() | getBattleFieldHeight() largura e altura da arenadetecção de robô  onHitByBullet( HitByBulletEvent) robô alvejado por tiro  onHitByRobot( HitByBulletEvent) robô colide com robô  onHitWall( largura e altura da arena  getNumRounds() núm. de rounds da batalha  getRoundNum() round da batalha  getTime() tempo batalha getOthers() Controle de Eventos do Robô Informações do Ambiente  onHitWall( HitWallEvent) robô colide com parede  getOthers() núm. atual de oponentes 09/09/2016(C) 2016 PeterJandlJr 26
  • 28.  Robôs melhores podem ser construídos a partir de robocode.AdvancedRobot.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. 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. 09/09/2016(C) 2016 PeterJandlJr 28
  • 29.  setAhead(double)| setBack(double) movimentação para  setTurnRight(double) | setTurnLeft(double) gira o robômovimentação para frente e para trás  setFire(double) | setFireBullet(double) dispara o canhão  execute() executa as ações agendadas gira o robô  setTurnGunRight(double)| setTurnGunLeft(double) gira o canhão  setTurnRadarRight(double)| setTurnRadarLeft(double) gira o radar Ações Paralelas do Robô Ações Paralelas do Robô agendadas  waitFor(Condition) não retorna até a condição ser alcançada 09/09/2016(C) 2016 PeterJandlJr 29
  • 31. Onde os fracos não tem vez! 09/09/2016(C) 2016 PeterJandlJr 31
  • 32.  Batalhas podem ser:  Como criar:  Janela principalser:  mano a mano ou  com múltiplos oponentes.  Duração:  Um ou  Janela principal  Battle | New  Selecione os robôs que competirão  Next  Ajuste número de Um ou  muitos rounds. Ajuste número de rounds, tamanho do campo de batalha e outros detalhes.  Start Battle 09/09/2016(C) 2016 PeterJandlJr 32 Quanto mais rounds, menor é a influência da sorte no resultado final!
  • 33. Destroy then all! 09/09/2016(C) 2016 PeterJandlJr 33
  • 34.  Na janela principal:  Escolha um nome:  MFRprincipal:  Robot  Source Editor  Na janela do editor:  File  MFR  Defina um pacote:  jandl  Edite o código.  File  New  Robot 09/09/2016(C) 2016 PeterJandlJr 34 Aqui começa a diversão!
  • 35. (1) Inicialização (0) Campos (2) Loop principal (1) Inicialização (3) Varredura 09/09/2016(C) 2016 PeterJandlJr 35 (4) Alvejado por bala (5) Colisão com parede
  • 36.  Área que permite a definição de:  Variáveis e estruturas de dados 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 Elementos declarados nesta área serão acessíveis em todo código do robô. 09/09/2016(C) 2016 PeterJandlJr 36
  • 37. Sem campos neste primeiro robô. (0) Campos 09/09/2016(C) 2016 PeterJandlJr 37
  • 38.  A inicialização do código de controle do robô pode ser feita na seção inicial do métodopode 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 cadaexecutado apenas uma vez para cada instância do robô, ou seja, para determinar seu estado inicial. 09/09/2016(C) 2016 PeterJandlJr 38
  • 39. (1) Inicialização Este robô(1) Inicialização Este robô simples não requer cuidados especiais. 09/09/2016(C) 2016 PeterJandlJr 39
  • 40.  Laço infinito que determina o comportamento normal do robô, i.e., aquilocomportamento 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. 09/09/2016(C) 2016 PeterJandlJr 40
  • 41. (2) Loop principal Comportamento(2) Loop principal Comportamento normal do robô. 09/09/2016(C) 2016 PeterJandlJr 41
  • 42.  Como consequência da movimentação do radar (de maneira independente ou por meioradar (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étodopor meio do acionamento do método onScannedRobot(ScannedRobotEvent).  Isto possibilita estabelecer uma estratégia de ataque dirigida aos oponente localizados. 09/09/2016(C) 2016 PeterJandlJr 42
  • 43. (3) Varredura Localizou oponente? Fogo nele! 09/09/2016(C) 2016 PeterJandlJr 43
  • 44.  Como padrão, o canhão e o radar se movimentam junto com o robô.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. 09/09/2016(C) 2016 PeterJandlJr 44
  • 45.  Quando o robô é atingido por um tiro adversário, é gerado um eventoadversá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. 09/09/2016(C) 2016 PeterJandlJr 45
  • 46. (4) Alvejado por bala Foi localizado? Melhor fugir! 09/09/2016(C) 2016 PeterJandlJr 46 Melhor fugir!
  • 47.  Quando o robô colide com uma das parede que delimitam o campo de batalha é geradoque 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().método run(). 09/09/2016(C) 2016 PeterJandlJr 47
  • 48. 09/09/2016(C) 2016 PeterJandlJr 48 (5) Colisão com parede Parede? Marcha-a-ré!
  • 49.  Editou  Salvou Errinhos não contam! Salvou  Compilou  Tá pronto para contam! Tá pronto para batalha! 09/09/2016(C) 2016 PeterJandlJr 49 Robôs criados no ambiente já estão disponíveis para novas batalhas!
  • 51.  IDE provê mais facilidades para o 1. Criação de projeto emfacilidades para o desenvolvimento de robôs.  Pode ser integrado ao Robocode, sem necessidade de qualquer outro projeto em localização externa ao Eclipse. 2. Inclusão da API do Robocode. 3. Ligação comqualquer outro recurso.  São necessários três passos. 3. Ligação com documentação da API. 09/09/2016(C) 2016 PeterJandlJr 51
  • 52.  File | New | Java ProjectJava Project  Escolha o Project Name  Desmarque Use default location  Com Browse selecione diretórioselecione diretório robots da instalação do Robocode  Acione Next 09/09/2016(C) 2016 PeterJandlJr 52
  • 53.  Selecione aba LibrariesLibraries  Com Add External Jars selecione arquivo robocode.jar no diretório libs da instalação doinstalação do Robocode  Acione Finish 09/09/2016(C) 2016 PeterJandlJr 53
  • 54.  No Package Explorer abra itemabra item Referenced Libraries  Selecione arquivo robocode.jar  Com botão direito acione Properties Com o Browse Com o Browse selecione diretório javadoc do Robocode  Acione OK 09/09/2016(C) 2016 PeterJandlJr 54
  • 55. Editor de código avançado 09/09/2016(C) 2016 PeterJandlJr 55 Documentação integrada da API
  • 56.  Editou  Salvou Errinhos continuam não contando!  Salvou  Compilação automática do IDE contando!  Tá pronto para batalha! 09/09/2016(C) 2016 PeterJandlJr 56 Robôs criados dessa forma também estão disponíveis para novas batalhas!
  • 57.  Tente criar alguns robôs combinando os  Estude o código dos robôs exemplo querobôs combinando os elementos da API.  Observe o comportamento do robô e os resultados obtidos. robôs exemplo que acompanham o Robocode:  sample.Walls  sample.Tracker  sample.Crazy  Combine suas  robocode.Robot  robocode.AdvancedRobot INICIANTES JOGADORES  Combine suas estratégias na forma de novos robôs. 09/09/2016(C) 2016 PeterJandlJr 57
  • 58.  Desenvolva novas estratégias mais COMPETIDORES estratégias mais sofisticadas.  Simule combates e analise os resultados. 09/09/2016(C) 2016 PeterJandlJr 58
  • 60.  Home http://robocode.sourceforge.net/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 Wiki http://robowiki.net/wiki/Robocode  Artigos http://robocode.sourceforge.net/developerWorks.php 09/09/2016(C) 2016 PeterJandlJr 60
  • 62. Prof. Peter Jandl JuniorProf. Peter Jandl Junior prof.peter@fatec.sp.gov.br http://tecnopode.blogspot.com.br 09/09/2016(C) 2016 PeterJandlJr 62