revisitando o robocode

62
Prof. Ms. Peter Jandl Junior Aula Aberta Análise e Desenvolvimento de Sistemas FATEC Jundiaí

Upload: peter-jandl-junior

Post on 22-Jan-2018

652 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Revisitando o Robocode

Prof. Ms. Peter Jandl JuniorAula Aberta

Análise e Desenvolvimento de SistemasFATEC JundiaíFATEC Jundiaí

Page 2: Revisitando o Robocode

Já sabemos queJá sabemos queMatemática,Física eProgramaçãopodem seruma mistura

09/09/2016(C) 2016 PeterJandlJr 2

uma misturamuitointeressante!

Page 3: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 3

Page 4: Revisitando o Robocode

Build the best, destroy the rest!

09/09/2016 4(C) 2016 PeterJandlJr

Page 5: Revisitando o Robocode

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

Page 6: Revisitando o Robocode

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!

Page 7: Revisitando o Robocode

Robôs são tanques, capazes de

movimentar-se; movimentar-se;

localizar adversários; e

atirar!

Robôs são dispostos aleatoriamente emum 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

Page 8: Revisitando o Robocode

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

Page 9: Revisitando o Robocode

ArenaArena

Robôs

Controles

09/09/2016(C) 2016 PeterJandlJr 9

Robôs

Controles

Page 10: Revisitando o Robocode

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

Page 11: Revisitando o Robocode

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

Page 12: Revisitando o Robocode

Editor de Código Integrado

09/09/2016(C) 2016 PeterJandlJr 12

Page 13: Revisitando o Robocode

Documentação padronizada de todos os elementos da API.

09/09/2016(C) 2016 PeterJandlJr 13

Page 14: Revisitando o Robocode

Detalhes. Sempre os detalhes.

09/09/2016(C) 2016 PeterJandlJr 14

Page 15: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 15

Page 16: Revisitando o Robocode

Tamanho default docampo 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

Page 17: Revisitando o Robocode

Norte é 0°

09/09/2016(C) 2016 PeterJandlJr 17

Page 18: Revisitando o Robocode

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 +1009/09/2016(C) 2016 PeterJandlJr 18

Page 19: Revisitando o Robocode

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

Page 20: Revisitando o Robocode

Muitos detalhes?

09/09/2016(C) 2016 PeterJandlJr 20

Page 21: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 21

Page 22: Revisitando o Robocode

Componentes: Veículo Veículo

(base móvel)

Canhão giratório

Radar giratório

Elementos do tanque têm tanque têm movimento independente.

09/09/2016(C) 2016 PeterJandlJr 22

Page 23: Revisitando o Robocode

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, bearinge energia

09/09/2016(C) 2016 PeterJandlJr 23

Direção absoluta do robô e direção relativa ao robô.

Page 24: Revisitando o Robocode

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

Page 25: Revisitando o Robocode

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

Page 26: Revisitando o Robocode

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

Page 27: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 27

Page 28: Revisitando o Robocode

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

Page 29: Revisitando o Robocode

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

Page 30: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 30

Page 31: Revisitando o Robocode

Onde os fracos não tem vez!

09/09/2016(C) 2016 PeterJandlJr 31

Page 32: Revisitando o Robocode

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!

Page 33: Revisitando o Robocode

Destroy then all!

09/09/2016(C) 2016 PeterJandlJr 33

Page 34: Revisitando o Robocode

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!

Page 35: Revisitando o Robocode

(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

Page 36: Revisitando o Robocode

Á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

Page 37: Revisitando o Robocode

Sem campos neste primeiro robô.

(0) Campos

09/09/2016(C) 2016 PeterJandlJr 37

Page 38: Revisitando o Robocode

A inicialização do código de controle do robô pode ser feita na seção inicial do método 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 executado apenas uma vez para cada instância do robô, ou seja, para determinar seu estado inicial.

09/09/2016(C) 2016 PeterJandlJr 38

Page 39: Revisitando o Robocode

(1) Inicialização Este robô (1) Inicialização Este robô simples não requer cuidados especiais.

09/09/2016(C) 2016 PeterJandlJr 39

Page 40: Revisitando o Robocode

Laço infinito que determina o comportamento normal do robô, i.e., aquilo 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.

09/09/2016(C) 2016 PeterJandlJr 40

Page 41: Revisitando o Robocode

(2) Loop principal Comportamento (2) Loop principal Comportamento normal do robô.

09/09/2016(C) 2016 PeterJandlJr 41

Page 42: Revisitando o Robocode

Como consequência da movimentação do radar (de maneira independente ou por meio 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 por 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

Page 43: Revisitando o Robocode

(3) Varredura Localizou oponente?Fogo nele!

09/09/2016(C) 2016 PeterJandlJr 43

Page 44: Revisitando o Robocode

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

Page 45: Revisitando o Robocode

Quando o robô é atingido por um tiro adversário, é gerado um evento 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.

09/09/2016(C) 2016 PeterJandlJr 45

Page 46: Revisitando o Robocode

(4) Alvejado por bala Foi localizado?Melhor fugir!

09/09/2016(C) 2016 PeterJandlJr 46

Melhor fugir!

Page 47: Revisitando o Robocode

Quando o robô colide com uma das parede que delimitam o campo de batalha é gerado 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().método run().

09/09/2016(C) 2016 PeterJandlJr 47

Page 48: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 48

(5) Colisão com parede Parede?Marcha-a-ré!

Page 49: Revisitando o Robocode

Editou

SalvouErrinhos 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!

Page 50: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 50

Page 51: Revisitando o Robocode

IDE provê mais facilidades para o

1. Criação de projeto em facilidades 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 com qualquer outro recurso.

São necessários três passos.

3. Ligação com documentação da API.

09/09/2016(C) 2016 PeterJandlJr 51

Page 52: Revisitando o Robocode

File | New |Java ProjectJava Project

Escolha oProject Name

DesmarqueUse default location

Com Browseselecione diretório selecione diretório robots da instalação do Robocode

Acione Next

09/09/2016(C) 2016 PeterJandlJr 52

Page 53: Revisitando o Robocode

Selecione aba LibrariesLibraries

Com Add ExternalJars selecione arquivo robocode.jarno diretório libs da instalação do instalação do Robocode

Acione Finish

09/09/2016(C) 2016 PeterJandlJr 53

Page 54: Revisitando o Robocode

No Package Explorerabra itemabra itemReferenced Libraries

Selecione arquivo robocode.jar

Com botão direito acione Properties

Com o BrowseCom o Browseselecione diretório javadoc do Robocode

Acione OK

09/09/2016(C) 2016 PeterJandlJr 54

Page 55: Revisitando o Robocode

Editor de código avançado

09/09/2016(C) 2016 PeterJandlJr 55

Documentação integrada da API

Page 56: Revisitando o Robocode

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!

Page 57: Revisitando o Robocode

Tente criar alguns robôs combinando os

Estude o código dos robôs exemplo que robô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

Page 58: Revisitando o Robocode

Desenvolva novas estratégias mais

COMPETIDORES

estratégias mais sofisticadas.

Simule combates e analise os resultados.

09/09/2016(C) 2016 PeterJandlJr 58

Page 59: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 59

Page 60: Revisitando o Robocode

Homehttp://robocode.sourceforge.net/http://robocode.sourceforge.net/

Downloadhttps://sourceforge.net/projects/robocode/files/

Documentação OnLinehttp://robocode.sourceforge.net/docs/robocode/

Wikihttp://robowiki.net/wiki/RobocodeWikihttp://robowiki.net/wiki/Robocode

Artigoshttp://robocode.sourceforge.net/developerWorks.php

09/09/2016(C) 2016 PeterJandlJr 60

Page 61: Revisitando o Robocode

09/09/2016(C) 2016 PeterJandlJr 61

Page 62: Revisitando o Robocode

Prof. Peter Jandl JuniorProf. Peter Jandl Junior

[email protected]

http://tecnopode.blogspot.com.br

09/09/2016(C) 2016 PeterJandlJr 62