SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
ROBOCODE
101
Prof. Ms. Peter Jandl Junior
Análise e Desenvolvimento de Sistemas
FATEC Jundiaí
15/05/2018 (C) 2018 PeterJandlJr. 2
O desenvolvimento de jogos digitais tem
o potencial de conjugar a melhoria nas
habilidades de programação, além de
oportunizar carreira e novos negócios.
15/05/2018 (C) 2018 PeterJandlJr. 3
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 4
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 5
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 6
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 7
https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
15/05/2018 (C) 2018 PeterJandlJr. 8
https://www.istoedinheiro.com.br/noticias/dinheiro-e-tecnologia/20110928/explosao-gamemania/2678
Entendeu
porquê os
Jogos
Digitais
são
importantes,
certo?
15/05/2018 (C) 2018 PeterJandlJr. 9
BUILD THE BEST,
DESTROY THE REST!
15/05/2018 (C) 2018 PeterJandlJr. 10
robocode
■ O que é?
■ Objetivo?
■ Jogadores?
■ Jogo de programação.
■ Codificar um robô de
batalha para competir
com outros robôs num
campo de batalha.
■ Os robôs. Programador
não controla seu robô
(durante o jogo)!
15/05/2018 (C) 2018 PeterJandlJr. 11
15/05/2018 (C) 2018 PeterJandlJr. 12
robocode
■ Criador?
■ Onde?
■ Por que?
■ Quando?
2000/2001
■ Mathew Nelson
■ AlphaWorks/IBM
■ Performance de
aplicações Java
■ Competição entre
desenvolvedores
■ Ensino de Programação
15/05/2018 (C) 2018 PeterJandlJr. 13
Mas vem evoluindo
desde então!
robocode
■ Robôs são tanques,
capazes de
– movimentar-se;
– localizar adversários;
e
– atirar!
■ Robôs são dispostos
aleatoriamente em
um campo de batalha
(battlefield)
retangular sem entradas
ou saídas.
15/05/2018 (C) 2018 PeterJandlJr. 14
Isso não é um
tanque!
robocode
■ Robôs são programados
via Java para ataque e
defesa. Pontuam ao longo
do combate.
■ Objetivos:
– Principal: não ser
destruído!
– Secundário: destruir!
■ Vence o robô que
acumular mais pontos ao
longo dos diversos rounds
da batalha.
15/05/2018 (C) 2018 PeterJandlJr. 15
robocode
■ O jogador (programador) não
tem influência direta no jogo.
Ele deve escrever algum
código "inteligente" para que o
robô enfrente as batalhas
realizadas em tempo real.
■ Controle interno do jogo
garante a distribuição
uniforme e regular do tempo
entre os robôs, além de prover
sua visualização (rendering).
15/05/2018 (C) 2018 PeterJandlJr. 16
Robocode::ambiente
15/05/2018 (C) 2018 PeterJandlJr. 17
Arena
Robôs
Controles
Controles
robocode::componentes
■ Ambiente
– Janela principal com campo de batalha (arena) e
controles.
■ Editor de robôs
– Janela secundária independente com acesso a
ferramentas básicas de desenvolvimento.
■ API (Application Programming Interface) do Robocode
– Documentação dos pacotes, classes, interfaces e
exceções que compõem o sistema.
15/05/2018 (C) 2018 PeterJandlJr. 18
robocode::Ambiente
■ Permite:
– Criar, abrir e salvar batalhas;
– Pausar, continuar e finalizar batalhas;
– Visualizar estatísticas e destruir qualquer robô.
■ É possível customizar:
– Tamanho da arena
– Número de robôs participantes das batalhas
– Número de rounds de cada batalha
– E um bom número de outros detalhes.
15/05/2018 (C) 2018 PeterJandlJr. 19
robocode::editor
15/05/2018 (C) 2018 PeterJandlJr. 20
Editor de Código
Integrado
robocode::API
15/05/2018 (C) 2018 PeterJandlJr. 21
Documentação
padronizada de todos os
elementos da API.
ANATOMIA DOS
ROBÔS
15/05/2018 (C) 2018 PeterJandlJr. 22
robô = tanque
■ Componentes:
– Veículo
(base móvel)
– Canhão giratório
– Radar giratório
■ Elementos do tanque têm
movimento
independente.
15/05/2018 (C) 2018 PeterJandlJr. 23
robô  Características
■ Energia Inicial 100
■ Velocidade 8 pixels/turn
■ Velocidade de giro 20°/turn
■ Velocidade da bala 20 pixels/turn
■ Energia da bala 0.1 a 3.0
(maior a bala, menor a velocidade)
■ Raio de varredura 1200 pixels
■ Dados de varredura distância, nome, velocidade,
heading, bearing e energia
do adversário localizado.
15/05/2018 (C) 2018 PeterJandlJr. 24
Direção absoluta do
robô e direção
relativa ao robô.
TANQUE=Robô
PROGRAMÁVEL
■ Os robôs são construídos a partir de uma classe padronizada:
– robocode.Robot
■ Esta classe oferece a infraestrutura básica para o
funcionamento do robô, o que inclui:
– informações do robô
– ações do robô
– controle de eventos
– informações do ambiente
15/05/2018 (C) 2018 PeterJandlJr. 25
TANQUE=Robô
PROGRAMÁVEL
Informações do Robô
■ getX() | getY()
coordenada do robô
■ getWidth () | getHeight()
dimensões do robô
■ getHeading() |
getGunHeading() |
getRadarHeading()
direção do robô, do canhão e
do radar
■ getVelocity()
velocidade do robô
■ getEnergy()
energia do robô
Ações do Robô
■ ahead(double)|back(double)
movimentação
■ turnRight(double) |
turnLeft(double)
gira o robô
■ turnGunRight(double) |
turnGunLeft(double)
gira o canhão
■ turnRadarRight(double) |
turnRadarLeft(double)
gira o radar
■ scan()
varredura por outros robôs
15/05/2018 (C) 2018 PeterJandlJr. 26
TANQUE=Robô
PROGRAMÁVEL
Controle de Eventos do
Robô
■ onScannedRobot(
ScannedRobotEvent)
detecção de robô
■ onHitByBullet(
HitByBulletEvent)
robô alvejado por tiro
■ onHitByRobot(
HitByBulletEvent)
robô colide com robô
■ onHitWall(
HitWallEvent)
robô colide com parede
Informações do
Ambiente
■ getBattleFieldWidth() |
getBattleFieldHeight()
largura e altura da arena
■ getNumRounds()
núm. de rounds da batalha
■ getRoundNum()
round da batalha
■ getTime()
tempo batalha
■ getOthers()
núm. atual de oponentes
15/05/2018 (C) 2018 PeterJandlJr. 27
Walls2
15/05/2018 (C) 2018 PeterJandlJr. 28
BATALHAS
Onde os fracos não tem vez!
15/05/2018 (C) 2018 PeterJandlJr. 29
batalhas::Criação
■ Batalhas podem ser:
– mano a mano ou
– com múltiplos
oponentes.
■ Duração:
– Um ou
– muitos rounds.
■ Como criar:
– Janela principal
– Battle | New
– Selecione os robôs
que competirão
– Next
– Ajuste número de
rounds, tamanho do
campo de batalha e
outros detalhes.
– Start Battle
15/05/2018 (C) 2018 PeterJandlJr. 30
Quanto mais rounds,
menor é a influência da
sorte no resultado final!
CRIAÇÃO DE ROBÔSDestroy then all!
15/05/2018 (C) 2018 PeterJandlJr. 31
robôs::Criação
■ Na janela principal:
– Robot
– Source Editor
■ Na janela do editor:
– File
– New
– Robot
■ Escolha um nome:
– MFR
■ Defina um pacote:
– jandl
■ Edite o código.
15/05/2018 (C) 2018 PeterJandlJr. 32
Aqui começa a diversão!
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 33
(2) Loop principal
(1) Inicialização
(3) Varredura
(4) Alvejado por bala
(5) Colisão com parede
(0) Campos
Robô::estrutura do Código
(0) Campos
■ Área que permite a definição de:
– Variáveis e estruturas de dados
■ (da classe) do robô.
■ Podem ser livremente declaradas para auxiliar no controle do
robô e de suas estratégias de defesa e ataque.
■ Elementos declarados nesta área serão acessíveis em todo
código do robô.
15/05/2018 (C) 2018 PeterJandlJr. 34
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 35
Sem campos neste
primeiro robô.
(0) Campos
Robô::estrutura do Código
(1) Inicialização
■ A inicialização do código de controle do robô pode ser feita na
seção inicial do método run().
■ Elementos locais (i.e., válidos apenas neste método) podem
ser acrescentados.
■ Aqui é colocado o código que necessita ser executado apenas
uma vez para cada instância do robô, ou seja, para
determinar seu estado inicial.
15/05/2018 (C) 2018 PeterJandlJr. 36
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 37
(1) Inicialização Este robô
simples não
requer cuidados
especiais.
Robô::estrutura do Código
(2) Loop principal
■ Laço infinito que determina o comportamento normal do
robô, i.e., aquilo que o tanque fará quando não está atacando
ou sendo atacado.
■ Em geral corresponde à movimentação do robô pelo campo
de batalha.
15/05/2018 (C) 2018 PeterJandlJr. 38
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 39
(2) Loop principal Comportamento
normal do robô.
Robô::estrutura do Código
(3) varredura
■ Como consequência da movimentação do radar (de maneira
independente ou por meio do giro do tanque), oponentes
dentro do raio de varredura (até 1200 pixels de distância)
serão localizados.
■ Cada oponente localizado gera um evento
ScannedRobotEvent que é entregue ao robô por meio do
acionamento do método
onScannedRobot(ScannedRobotEvent).
■ Isto possibilita estabelecer uma estratégia de ataque dirigida
aos oponente localizados.
15/05/2018 (C) 2018 PeterJandlJr. 40
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 41
(3) Varredura Localizou oponente?
Fogo nele!
Robô::estrutura do Código
(3) varredura
■ Como padrão, o canhão e o radar se movimentam junto com
o robô.
■ Assim, se a primeira ação em
onScannedRobot(ScannedRobotEvent) for fire(1), o tiro irá na
direção do robô oponente localizado.
15/05/2018 (C) 2018 PeterJandlJr. 42
Robô::estrutura do Código
(4) alvejado por bala
■ Quando o robô é atingido por um tiro adversário, é gerado um
evento HitByBulletEvent que é entregue ao robô por meio do
acionamento do método onHitByBullet(HitByBulletEvent).
■ Isto possibilita estabelecer uma estratégia de defesa
relacionada aos oponentes.
15/05/2018 (C) 2018 PeterJandlJr. 43
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 44
(4) Alvejado por bala Foi localizado?
Melhor fugir!
Robô::estrutura do Código
(5) colisão com parede
■ Quando o robô colide com uma das parede que delimitam o
campo de batalha é gerado um evento HitWallEvent que é
entregue ao robô por meio do acionamento do método
onHitWall(HitWallEvent).
■ Isto possibilita complementar a estratégia de movimentação
do robô estabelecida no método run().
15/05/2018 (C) 2018 PeterJandlJr. 45
Robô::
estruturadoCódigo
15/05/2018 (C) 2018 PeterJandlJr. 46
(5) Colisão com parede Parede?
Marcha-a-ré!
robôs::Criação
■ Editou
■ Salvou
■ Compilou
■ Tá pronto para batalha!
15/05/2018 (C) 2018 PeterJandlJr. 47
Errinhos não
contam!
Robôs criados no
ambiente já estão
disponíveis para novas
batalhas!
robôs::criação com eclipse
15/05/2018 (C) 2018 PeterJandlJr. 48
robôs::criação com eclipse
■ IDE provê mais facilidades
para o desenvolvimento de
robôs.
■ Pode ser integrado ao
Robocode, sem
necessidade de qualquer
outro recurso.
■ São necessários três
passos.
1. Criação de projeto em
localização externa ao
Eclipse.
2. Inclusão da API do
Robocode.
3. Ligação com
documentação da API.
15/05/2018 (C) 2018 PeterJandlJr. 49
Também
funciona com o
Netbeans!
robôs::criação com eclipse
■ File | New |
Java Project
■ Escolha o
Project Name
■ Desmarque
Use default location
■ Com Browse selecione diretório
robots da instalação do
Robocode
■ Acione Next
15/05/2018 (C) 2018 PeterJandlJr. 50
robôs::criação com eclipse
■ Selecione aba Libraries
■ Com Add External Jars
selecione arquivo robocode.jar
no diretório libs da instalação
do Robocode
■ Acione Finish
15/05/2018 (C) 2018 PeterJandlJr. 51
robôs::criação com eclipse
■ No Package Explorer abra item
Referenced Libraries
■ Selecione arquivo robocode.jar
■ Com botão direito acione
Properties
■ Com o Browse selecione
diretório javadoc do Robocode
■ Acione OK
15/05/2018 (C) 2018 PeterJandlJr. 52
robôs::criação com eclipse
15/05/2018 (C) 2018 PeterJandlJr. 53
Documentação
integrada da API
Editor de código
avançado
robôs::Criação com eclipse
■ Editou
■ Salvou
■ Compilação automática
do IDE
■ Tá pronto para batalha!
15/05/2018 (C) 2018 PeterJandlJr. 54
Errinhos
continuam não
contando!
Robôs criados dessa forma também
estão disponíveis para novas
batalhas!
ROBOCODE::
TECNICALIDADES
Detalhes. Sempre os detalhes.
15/05/2018 (C) 2018 PeterJandlJr. 55
robocode::battlefield
15/05/2018 (C) 2018 PeterJandlJr. 56
robocode::battlefield
■ Tamanho default do
campo de batalha 800 x 600 pixels
■ Então:
– Distância máxima entre quaisquer dois robôs no battlefield
padrão é menor que 1000.
– Qualquer robô pode ser localizado neste tamanho de
campo (raio de varredura = 1200 pixels).
■ Além disso:
– Radar não detecta balas.
– Canhão aquece e impede sequência ilimitada de tiros.
15/05/2018 (C) 2018 PeterJandlJr. 57
robocode::heading & bearing
15/05/2018 (C) 2018 PeterJandlJr. 58
Norte é
0°
robocode::pontuação
■ Acerto +3*energia
■ Erro -energia
■ Dano -4*energia-2*(energia-1)
■ Atropelar (ram) +1.2
■ Colisão (parede) -0.6
■ Destruição de robô
– Por meio de tiro(s) +20% dano causado
– Por atropelamento +30% dano causado
■ Vitória no round +10
15/05/2018 (C) 2018 PeterJandlJr. 59
robocode::+tecnicalidades
■ Uso extensivo de threads.
– Gerenciador de Batalha [thread de controle central]
■ Controla os robôs e seus disparos.
■ Efetua a renderização dos robôs na arena.
– Robô [thread individual]
■ Cada robô utiliza uma thread independente.
■ Método run() contém a lógica executada pelo robô, ou seja, determina seu
comportamento.
■ Cada robô intercepta e processa seus próprio eventos, utilizando uma fila
de eventos própria.
■ Subsistema de Renderização
– Baseado no Java2D API.
15/05/2018 (C) 2018 PeterJandlJr. 60
Robô Avançado
■ Robôs melhores podem ser construídos a partir de
robocode.AdvancedRobot.
■ Esta classe oferece a mesma infraestrutura básica disponível
em robocode.Robot.
■ Adicionalmente possibilita:
– A chamada de ações não bloqueantes, ou seja, permite
que o robô execute ações em paralelo, por exemplo, andar
e atirar.
– Operações paralelizáveis tem prefixo set.
– Métodos execute() ou waitFor() acionam conjunto prévio de
operações set em paralelo.
– Ajustes mais sofisticados, além de obtenção de
informações mais detalhadas.
15/05/2018 (C) 2018 PeterJandlJr. 61
Robô Avançado
Ações Paralelas do
Robô
■ setAhead(double)|
setBack(double)
movimentação para frente e
para trás
■ setFire(double) |
setFireBullet(double)
dispara o canhão
■ execute()
executa as ações agendadas
■ waitFor(Condition)
não retorna até a condição
ser alcançada
Ações Paralelas do
Robô
■ setTurnRight(double) |
setTurnLeft(double)
gira o robô
■ setTurnGunRight(double)|
setTurnGunLeft(double)
gira o canhão
■ setTurnRadarRight(double)|
setTurnRadarLeft(double)
gira o radar
15/05/2018 (C) 2018 PeterJandlJr. 62
CRAZY2
15/05/2018 (C) 2018 PeterJandlJr. 63
15/05/2018 (C) 2018 PeterJandlJr. 64
Muitos detalhes?
◼ robocode.Robot
⚫ robocode.AdvancedRobot
robôs::sugestões
INICIANTES
■ Tente criar alguns robôs
combinando os elementos
da API.
■ Observe o comportamento
do robô e os resultados
obtidos.
JOGADORES
■ Estude o código dos robôs
exemplo que acompanham
o Robocode:
– sample.Walls◼
– sample.Tracker◼
– sample.Crazy⚫
■ Combine suas estratégias
na forma de novos robôs.
15/05/2018 (C) 2018 PeterJandlJr. 65
robôs::sugestões
COMPETIDORES■ Desenvolva novas
estratégias mais
sofisticadas.
■ Simule combates e
analise os resultados.
15/05/2018 (C) 2018 PeterJandlJr. 66
ROBOCODE::RECURSOS
Existe salvação!
15/05/2018 (C) 2018 PeterJandlJr. 67
Robocode::Recursos
■ Home
http://robocode.sourceforge.net/
■ Download
https://sourceforge.net/projects/robocode/files/
■ Documentação OnLine
http://robocode.sourceforge.net/docs/robocode/
■ Wiki
http://robowiki.net/wiki/Robocode
■ Artigos
http://robocode.sourceforge.net/developerWorks.php
■ UFSC
https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html
■ YouTube vídeo
http://www.youtube.com/watch?v=3qOoDuGkwco
15/05/2018 (C) 2018 PeterJandlJr. 68
15/05/2018 (C) 2018 PeterJandlJr. 69
Prof. Peter Jandl Junior
■ prof.peter@fatec.sp.gov.br
■ http://tecnopode.blogspot.com.br
15/05/2018 (C) 2018 PeterJandlJr. 70

Mais conteúdo relacionado

Semelhante a Robocode 101

Eiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningEiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningDevCamp Campinas
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8RogerMasters
 
Desenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-xDesenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-xBruno Cicanci
 
Desafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleDesafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleNatã Barbosa
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unipjonathanblacknight
 
Engenharia de Software para Jogos
Engenharia de  Software para JogosEngenharia de  Software para Jogos
Engenharia de Software para JogosRicardo Leite
 
Vídeo aula Rodovia Volume 2 - AutoCAD Civil 3D
Vídeo aula Rodovia Volume 2 - AutoCAD Civil 3DVídeo aula Rodovia Volume 2 - AutoCAD Civil 3D
Vídeo aula Rodovia Volume 2 - AutoCAD Civil 3DProspecad Treinamentos
 
FLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidFLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidMaurílio Silva
 
Arquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICArquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICAlexandre Brandão Lustosa
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
Construindo Sua Primeira Ontologia
Construindo Sua Primeira OntologiaConstruindo Sua Primeira Ontologia
Construindo Sua Primeira OntologiaVictor Pantoja
 

Semelhante a Robocode 101 (20)

Eiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningEiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
 
Fit Metrocamp 2016
Fit Metrocamp 2016Fit Metrocamp 2016
Fit Metrocamp 2016
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 
Robocode
RobocodeRobocode
Robocode
 
Ref site pic_bom
Ref site  pic_bomRef site  pic_bom
Ref site pic_bom
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8
 
Desenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-xDesenvolvimento de jogos com Cocos2d-x
Desenvolvimento de jogos com Cocos2d-x
 
Desafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - JoinvilleDesafio de Robótica - Católica de Santa Catarina - Joinville
Desafio de Robótica - Católica de Santa Catarina - Joinville
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
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
 
Engenharia de Software para Jogos
Engenharia de  Software para JogosEngenharia de  Software para Jogos
Engenharia de Software para Jogos
 
RodoCap no JustJava 2008
RodoCap no JustJava 2008RodoCap no JustJava 2008
RodoCap no JustJava 2008
 
Otimizador de Rotas - PythonBrasil[6]
Otimizador de Rotas - PythonBrasil[6]Otimizador de Rotas - PythonBrasil[6]
Otimizador de Rotas - PythonBrasil[6]
 
Vídeo aula Rodovia Volume 2 - AutoCAD Civil 3D
Vídeo aula Rodovia Volume 2 - AutoCAD Civil 3DVídeo aula Rodovia Volume 2 - AutoCAD Civil 3D
Vídeo aula Rodovia Volume 2 - AutoCAD Civil 3D
 
FLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidFLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para Android
 
Codelab: TypeScript
Codelab: TypeScriptCodelab: TypeScript
Codelab: TypeScript
 
Arquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICArquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PIC
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
Construindo Sua Primeira Ontologia
Construindo Sua Primeira OntologiaConstruindo Sua Primeira Ontologia
Construindo Sua Primeira Ontologia
 

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
 

Robocode 101

  • 1. ROBOCODE 101 Prof. Ms. Peter Jandl Junior Análise e Desenvolvimento de Sistemas FATEC Jundiaí
  • 2. 15/05/2018 (C) 2018 PeterJandlJr. 2 O desenvolvimento de jogos digitais tem o potencial de conjugar a melhoria nas habilidades de programação, além de oportunizar carreira e novos negócios.
  • 3. 15/05/2018 (C) 2018 PeterJandlJr. 3 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 4. 15/05/2018 (C) 2018 PeterJandlJr. 4 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 5. 15/05/2018 (C) 2018 PeterJandlJr. 5 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 6. 15/05/2018 (C) 2018 PeterJandlJr. 6 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 7. 15/05/2018 (C) 2018 PeterJandlJr. 7 https://www.slideshare.net/alprim/infografico-jogos-digitais-no-brasil
  • 8. 15/05/2018 (C) 2018 PeterJandlJr. 8 https://www.istoedinheiro.com.br/noticias/dinheiro-e-tecnologia/20110928/explosao-gamemania/2678
  • 10. BUILD THE BEST, DESTROY THE REST! 15/05/2018 (C) 2018 PeterJandlJr. 10
  • 11. robocode ■ O que é? ■ Objetivo? ■ Jogadores? ■ Jogo de programação. ■ Codificar um robô de batalha para competir com outros robôs num campo de batalha. ■ Os robôs. Programador não controla seu robô (durante o jogo)! 15/05/2018 (C) 2018 PeterJandlJr. 11
  • 12. 15/05/2018 (C) 2018 PeterJandlJr. 12
  • 13. robocode ■ Criador? ■ Onde? ■ Por que? ■ Quando? 2000/2001 ■ Mathew Nelson ■ AlphaWorks/IBM ■ Performance de aplicações Java ■ Competição entre desenvolvedores ■ Ensino de Programação 15/05/2018 (C) 2018 PeterJandlJr. 13 Mas vem evoluindo desde então!
  • 14. robocode ■ Robôs são tanques, capazes de – movimentar-se; – localizar adversários; e – atirar! ■ Robôs são dispostos aleatoriamente em um campo de batalha (battlefield) retangular sem entradas ou saídas. 15/05/2018 (C) 2018 PeterJandlJr. 14 Isso não é um tanque!
  • 15. robocode ■ Robôs são programados via Java para ataque e defesa. Pontuam ao longo do combate. ■ Objetivos: – Principal: não ser destruído! – Secundário: destruir! ■ Vence o robô que acumular mais pontos ao longo dos diversos rounds da batalha. 15/05/2018 (C) 2018 PeterJandlJr. 15
  • 16. robocode ■ O jogador (programador) não tem influência direta no jogo. Ele deve escrever algum código "inteligente" para que o robô enfrente as batalhas realizadas em tempo real. ■ Controle interno do jogo garante a distribuição uniforme e regular do tempo entre os robôs, além de prover sua visualização (rendering). 15/05/2018 (C) 2018 PeterJandlJr. 16
  • 17. Robocode::ambiente 15/05/2018 (C) 2018 PeterJandlJr. 17 Arena Robôs Controles Controles
  • 18. robocode::componentes ■ Ambiente – Janela principal com campo de batalha (arena) e controles. ■ Editor de robôs – Janela secundária independente com acesso a ferramentas básicas de desenvolvimento. ■ API (Application Programming Interface) do Robocode – Documentação dos pacotes, classes, interfaces e exceções que compõem o sistema. 15/05/2018 (C) 2018 PeterJandlJr. 18
  • 19. robocode::Ambiente ■ Permite: – Criar, abrir e salvar batalhas; – Pausar, continuar e finalizar batalhas; – Visualizar estatísticas e destruir qualquer robô. ■ É possível customizar: – Tamanho da arena – Número de robôs participantes das batalhas – Número de rounds de cada batalha – E um bom número de outros detalhes. 15/05/2018 (C) 2018 PeterJandlJr. 19
  • 20. robocode::editor 15/05/2018 (C) 2018 PeterJandlJr. 20 Editor de Código Integrado
  • 21. robocode::API 15/05/2018 (C) 2018 PeterJandlJr. 21 Documentação padronizada de todos os elementos da API.
  • 22. ANATOMIA DOS ROBÔS 15/05/2018 (C) 2018 PeterJandlJr. 22
  • 23. robô = tanque ■ Componentes: – Veículo (base móvel) – Canhão giratório – Radar giratório ■ Elementos do tanque têm movimento independente. 15/05/2018 (C) 2018 PeterJandlJr. 23
  • 24. robô  Características ■ Energia Inicial 100 ■ Velocidade 8 pixels/turn ■ Velocidade de giro 20°/turn ■ Velocidade da bala 20 pixels/turn ■ Energia da bala 0.1 a 3.0 (maior a bala, menor a velocidade) ■ Raio de varredura 1200 pixels ■ Dados de varredura distância, nome, velocidade, heading, bearing e energia do adversário localizado. 15/05/2018 (C) 2018 PeterJandlJr. 24 Direção absoluta do robô e direção relativa ao robô.
  • 25. TANQUE=Robô PROGRAMÁVEL ■ Os robôs são construídos a partir de uma classe padronizada: – robocode.Robot ■ Esta classe oferece a infraestrutura básica para o funcionamento do robô, o que inclui: – informações do robô – ações do robô – controle de eventos – informações do ambiente 15/05/2018 (C) 2018 PeterJandlJr. 25
  • 26. TANQUE=Robô PROGRAMÁVEL Informações do Robô ■ getX() | getY() coordenada do robô ■ getWidth () | getHeight() dimensões do robô ■ getHeading() | getGunHeading() | getRadarHeading() direção do robô, do canhão e do radar ■ getVelocity() velocidade do robô ■ getEnergy() energia do robô Ações do Robô ■ ahead(double)|back(double) movimentação ■ turnRight(double) | turnLeft(double) gira o robô ■ turnGunRight(double) | turnGunLeft(double) gira o canhão ■ turnRadarRight(double) | turnRadarLeft(double) gira o radar ■ scan() varredura por outros robôs 15/05/2018 (C) 2018 PeterJandlJr. 26
  • 27. TANQUE=Robô PROGRAMÁVEL Controle de Eventos do Robô ■ onScannedRobot( ScannedRobotEvent) detecção de robô ■ onHitByBullet( HitByBulletEvent) robô alvejado por tiro ■ onHitByRobot( HitByBulletEvent) robô colide com robô ■ onHitWall( HitWallEvent) robô colide com parede Informações do Ambiente ■ getBattleFieldWidth() | getBattleFieldHeight() largura e altura da arena ■ getNumRounds() núm. de rounds da batalha ■ getRoundNum() round da batalha ■ getTime() tempo batalha ■ getOthers() núm. atual de oponentes 15/05/2018 (C) 2018 PeterJandlJr. 27
  • 28. Walls2 15/05/2018 (C) 2018 PeterJandlJr. 28
  • 29. BATALHAS Onde os fracos não tem vez! 15/05/2018 (C) 2018 PeterJandlJr. 29
  • 30. batalhas::Criação ■ Batalhas podem ser: – mano a mano ou – com múltiplos oponentes. ■ Duração: – Um ou – muitos rounds. ■ Como criar: – Janela principal – Battle | New – Selecione os robôs que competirão – Next – Ajuste número de rounds, tamanho do campo de batalha e outros detalhes. – Start Battle 15/05/2018 (C) 2018 PeterJandlJr. 30 Quanto mais rounds, menor é a influência da sorte no resultado final!
  • 31. CRIAÇÃO DE ROBÔSDestroy then all! 15/05/2018 (C) 2018 PeterJandlJr. 31
  • 32. robôs::Criação ■ Na janela principal: – Robot – Source Editor ■ Na janela do editor: – File – New – Robot ■ Escolha um nome: – MFR ■ Defina um pacote: – jandl ■ Edite o código. 15/05/2018 (C) 2018 PeterJandlJr. 32 Aqui começa a diversão!
  • 33. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 33 (2) Loop principal (1) Inicialização (3) Varredura (4) Alvejado por bala (5) Colisão com parede (0) Campos
  • 34. Robô::estrutura do Código (0) Campos ■ Área que permite a definição de: – Variáveis e estruturas de dados ■ (da classe) do robô. ■ Podem ser livremente declaradas para auxiliar no controle do robô e de suas estratégias de defesa e ataque. ■ Elementos declarados nesta área serão acessíveis em todo código do robô. 15/05/2018 (C) 2018 PeterJandlJr. 34
  • 35. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 35 Sem campos neste primeiro robô. (0) Campos
  • 36. Robô::estrutura do Código (1) Inicialização ■ A inicialização do código de controle do robô pode ser feita na seção inicial do método run(). ■ Elementos locais (i.e., válidos apenas neste método) podem ser acrescentados. ■ Aqui é colocado o código que necessita ser executado apenas uma vez para cada instância do robô, ou seja, para determinar seu estado inicial. 15/05/2018 (C) 2018 PeterJandlJr. 36
  • 37. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 37 (1) Inicialização Este robô simples não requer cuidados especiais.
  • 38. Robô::estrutura do Código (2) Loop principal ■ Laço infinito que determina o comportamento normal do robô, i.e., aquilo que o tanque fará quando não está atacando ou sendo atacado. ■ Em geral corresponde à movimentação do robô pelo campo de batalha. 15/05/2018 (C) 2018 PeterJandlJr. 38
  • 39. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 39 (2) Loop principal Comportamento normal do robô.
  • 40. Robô::estrutura do Código (3) varredura ■ Como consequência da movimentação do radar (de maneira independente ou por meio do giro do tanque), oponentes dentro do raio de varredura (até 1200 pixels de distância) serão localizados. ■ Cada oponente localizado gera um evento ScannedRobotEvent que é entregue ao robô por meio do acionamento do método onScannedRobot(ScannedRobotEvent). ■ Isto possibilita estabelecer uma estratégia de ataque dirigida aos oponente localizados. 15/05/2018 (C) 2018 PeterJandlJr. 40
  • 41. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 41 (3) Varredura Localizou oponente? Fogo nele!
  • 42. Robô::estrutura do Código (3) varredura ■ Como padrão, o canhão e o radar se movimentam junto com o robô. ■ Assim, se a primeira ação em onScannedRobot(ScannedRobotEvent) for fire(1), o tiro irá na direção do robô oponente localizado. 15/05/2018 (C) 2018 PeterJandlJr. 42
  • 43. Robô::estrutura do Código (4) alvejado por bala ■ Quando o robô é atingido por um tiro adversário, é gerado um evento HitByBulletEvent que é entregue ao robô por meio do acionamento do método onHitByBullet(HitByBulletEvent). ■ Isto possibilita estabelecer uma estratégia de defesa relacionada aos oponentes. 15/05/2018 (C) 2018 PeterJandlJr. 43
  • 44. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 44 (4) Alvejado por bala Foi localizado? Melhor fugir!
  • 45. Robô::estrutura do Código (5) colisão com parede ■ Quando o robô colide com uma das parede que delimitam o campo de batalha é gerado um evento HitWallEvent que é entregue ao robô por meio do acionamento do método onHitWall(HitWallEvent). ■ Isto possibilita complementar a estratégia de movimentação do robô estabelecida no método run(). 15/05/2018 (C) 2018 PeterJandlJr. 45
  • 46. Robô:: estruturadoCódigo 15/05/2018 (C) 2018 PeterJandlJr. 46 (5) Colisão com parede Parede? Marcha-a-ré!
  • 47. robôs::Criação ■ Editou ■ Salvou ■ Compilou ■ Tá pronto para batalha! 15/05/2018 (C) 2018 PeterJandlJr. 47 Errinhos não contam! Robôs criados no ambiente já estão disponíveis para novas batalhas!
  • 48. robôs::criação com eclipse 15/05/2018 (C) 2018 PeterJandlJr. 48
  • 49. robôs::criação com eclipse ■ IDE provê mais facilidades para o desenvolvimento de robôs. ■ Pode ser integrado ao Robocode, sem necessidade de qualquer outro recurso. ■ São necessários três passos. 1. Criação de projeto em localização externa ao Eclipse. 2. Inclusão da API do Robocode. 3. Ligação com documentação da API. 15/05/2018 (C) 2018 PeterJandlJr. 49 Também funciona com o Netbeans!
  • 50. robôs::criação com eclipse ■ File | New | Java Project ■ Escolha o Project Name ■ Desmarque Use default location ■ Com Browse selecione diretório robots da instalação do Robocode ■ Acione Next 15/05/2018 (C) 2018 PeterJandlJr. 50
  • 51. robôs::criação com eclipse ■ Selecione aba Libraries ■ Com Add External Jars selecione arquivo robocode.jar no diretório libs da instalação do Robocode ■ Acione Finish 15/05/2018 (C) 2018 PeterJandlJr. 51
  • 52. robôs::criação com eclipse ■ No Package Explorer abra item Referenced Libraries ■ Selecione arquivo robocode.jar ■ Com botão direito acione Properties ■ Com o Browse selecione diretório javadoc do Robocode ■ Acione OK 15/05/2018 (C) 2018 PeterJandlJr. 52
  • 53. robôs::criação com eclipse 15/05/2018 (C) 2018 PeterJandlJr. 53 Documentação integrada da API Editor de código avançado
  • 54. robôs::Criação com eclipse ■ Editou ■ Salvou ■ Compilação automática do IDE ■ Tá pronto para batalha! 15/05/2018 (C) 2018 PeterJandlJr. 54 Errinhos continuam não contando! Robôs criados dessa forma também estão disponíveis para novas batalhas!
  • 55. ROBOCODE:: TECNICALIDADES Detalhes. Sempre os detalhes. 15/05/2018 (C) 2018 PeterJandlJr. 55
  • 57. robocode::battlefield ■ Tamanho default do campo de batalha 800 x 600 pixels ■ Então: – Distância máxima entre quaisquer dois robôs no battlefield padrão é menor que 1000. – Qualquer robô pode ser localizado neste tamanho de campo (raio de varredura = 1200 pixels). ■ Além disso: – Radar não detecta balas. – Canhão aquece e impede sequência ilimitada de tiros. 15/05/2018 (C) 2018 PeterJandlJr. 57
  • 58. robocode::heading & bearing 15/05/2018 (C) 2018 PeterJandlJr. 58 Norte é 0°
  • 59. robocode::pontuação ■ Acerto +3*energia ■ Erro -energia ■ Dano -4*energia-2*(energia-1) ■ Atropelar (ram) +1.2 ■ Colisão (parede) -0.6 ■ Destruição de robô – Por meio de tiro(s) +20% dano causado – Por atropelamento +30% dano causado ■ Vitória no round +10 15/05/2018 (C) 2018 PeterJandlJr. 59
  • 60. robocode::+tecnicalidades ■ Uso extensivo de threads. – Gerenciador de Batalha [thread de controle central] ■ Controla os robôs e seus disparos. ■ Efetua a renderização dos robôs na arena. – Robô [thread individual] ■ Cada robô utiliza uma thread independente. ■ Método run() contém a lógica executada pelo robô, ou seja, determina seu comportamento. ■ Cada robô intercepta e processa seus próprio eventos, utilizando uma fila de eventos própria. ■ Subsistema de Renderização – Baseado no Java2D API. 15/05/2018 (C) 2018 PeterJandlJr. 60
  • 61. Robô Avançado ■ Robôs melhores podem ser construídos a partir de robocode.AdvancedRobot. ■ Esta classe oferece a mesma infraestrutura básica disponível em robocode.Robot. ■ Adicionalmente possibilita: – A chamada de ações não bloqueantes, ou seja, permite que o robô execute ações em paralelo, por exemplo, andar e atirar. – Operações paralelizáveis tem prefixo set. – Métodos execute() ou waitFor() acionam conjunto prévio de operações set em paralelo. – Ajustes mais sofisticados, além de obtenção de informações mais detalhadas. 15/05/2018 (C) 2018 PeterJandlJr. 61
  • 62. Robô Avançado Ações Paralelas do Robô ■ setAhead(double)| setBack(double) movimentação para frente e para trás ■ setFire(double) | setFireBullet(double) dispara o canhão ■ execute() executa as ações agendadas ■ waitFor(Condition) não retorna até a condição ser alcançada Ações Paralelas do Robô ■ setTurnRight(double) | setTurnLeft(double) gira o robô ■ setTurnGunRight(double)| setTurnGunLeft(double) gira o canhão ■ setTurnRadarRight(double)| setTurnRadarLeft(double) gira o radar 15/05/2018 (C) 2018 PeterJandlJr. 62
  • 63. CRAZY2 15/05/2018 (C) 2018 PeterJandlJr. 63
  • 64. 15/05/2018 (C) 2018 PeterJandlJr. 64 Muitos detalhes?
  • 65. ◼ robocode.Robot ⚫ robocode.AdvancedRobot robôs::sugestões INICIANTES ■ Tente criar alguns robôs combinando os elementos da API. ■ Observe o comportamento do robô e os resultados obtidos. JOGADORES ■ Estude o código dos robôs exemplo que acompanham o Robocode: – sample.Walls◼ – sample.Tracker◼ – sample.Crazy⚫ ■ Combine suas estratégias na forma de novos robôs. 15/05/2018 (C) 2018 PeterJandlJr. 65
  • 66. robôs::sugestões COMPETIDORES■ Desenvolva novas estratégias mais sofisticadas. ■ Simule combates e analise os resultados. 15/05/2018 (C) 2018 PeterJandlJr. 66
  • 68. Robocode::Recursos ■ Home http://robocode.sourceforge.net/ ■ Download https://sourceforge.net/projects/robocode/files/ ■ Documentação OnLine http://robocode.sourceforge.net/docs/robocode/ ■ Wiki http://robowiki.net/wiki/Robocode ■ Artigos http://robocode.sourceforge.net/developerWorks.php ■ UFSC https://www.gsigma.ufsc.br/~popov/aulas/robocode/index.html ■ YouTube vídeo http://www.youtube.com/watch?v=3qOoDuGkwco 15/05/2018 (C) 2018 PeterJandlJr. 68
  • 69. 15/05/2018 (C) 2018 PeterJandlJr. 69
  • 70. Prof. Peter Jandl Junior ■ prof.peter@fatec.sp.gov.br ■ http://tecnopode.blogspot.com.br 15/05/2018 (C) 2018 PeterJandlJr. 70