SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
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

Semelhante a Revisitando o Robocode

Semelhante a Revisitando o Robocode (20)

Robocode 666
Robocode 666Robocode 666
Robocode 666
 
Robocode
RobocodeRobocode
Robocode
 
Robocode
RobocodeRobocode
Robocode
 
Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
 
Robocode
RobocodeRobocode
Robocode
 
Sbia 2010-tutorial-slides-part-ii
Sbia 2010-tutorial-slides-part-iiSbia 2010-tutorial-slides-part-ii
Sbia 2010-tutorial-slides-part-ii
 
Rastreamento 3D de objetos para realidade virtual
Rastreamento 3D de objetos para realidade virtualRastreamento 3D de objetos para realidade virtual
Rastreamento 3D de objetos para realidade virtual
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In SantosDesenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
 
paradigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdfparadigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdf
 
paradigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdfparadigmas_de_programacao_2_X.pdf
paradigmas_de_programacao_2_X.pdf
 
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
II CAFÉ e CODE - PROVOCAÇÕES DO MESTREII CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
II CAFÉ e CODE - PROVOCAÇÕES DO MESTRE
 
[MobiTrends] Desenvolvimento de Jogos para Dispositivos Móveis
[MobiTrends] Desenvolvimento de Jogos para Dispositivos Móveis[MobiTrends] Desenvolvimento de Jogos para Dispositivos Móveis
[MobiTrends] Desenvolvimento de Jogos para Dispositivos Móveis
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia GrandeDesenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
 
RAW
RAWRAW
RAW
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
 
[WRVA2014] Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e...
[WRVA2014] Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e...[WRVA2014] Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e...
[WRVA2014] Utilização de Realidade Aumentada, com marcadores(ARToolKitPlus) e...
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 

Mais de Peter Jandl Junior

Mais de Peter Jandl Junior (11)

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

Último

Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
LeloIurk1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
edelon1
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
WagnerCamposCEA
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 

Último (20)

Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 

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