hands on robocode 2017

63
Professor: Anderson Luís Furlan

Upload: anderson-luis-furlan

Post on 22-Jan-2018

61 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Hands on Robocode 2017

Professor: Anderson Luís Furlan

Page 2: Hands on Robocode 2017

Instalação e Configuração

✓ Download no link:https://sourceforge.net/projects/robocode/

✓ Executar robocode-X.X.X.X-setup.jar

Necessário Java 6 ou superior instalado e configurado o %JAVA_PATH%

Page 3: Hands on Robocode 2017

Instalação e Configuração

✓ Passo 1:

✓ Passo 2:

Page 4: Hands on Robocode 2017

Instalação e Configuração

✓ Passo 3:

✓ Passo 4:

Page 5: Hands on Robocode 2017

Instalação e Configuração

✓ Passo 5:

✓ Passo 6:

Page 6: Hands on Robocode 2017

Instalação e Configuração

✓ Passo 7:

Lema do Robocode:Build the best, destroy therest!

Page 7: Hands on Robocode 2017

Apresentado o Robocode

✓ O que é?

Jogo de programação, com o objetivo de desenvolver um robô tanque de guerra para lutar contra outros tanques.

✓ Funcionamento

O jogador não participa ativamente da partida, ele programa a Inteligência Artificial que irá comandar o robô, estipulando como ele irá reagir a determinados acontecimentos na arena de batalha.

Page 8: Hands on Robocode 2017

Apresentado o Robocode

✓ Motivação

Jogo que visa o ensino de programação de uma maneira mais fácil que a tradicional

✓ Ambiente de desenvolvimento

Editor

Compilador Java

Open Source

Page 9: Hands on Robocode 2017

Apresentado o Robocode✓ Histórico

Desenvolvido originalmente por Mathew Nelson em 2000

Incentivo da IBM em 2001

A inspiração veio de Robot Battle um jogo dos anos 80

2005 se tornou Open Source no SourceForge

Em 2006 Flemming Larsen assumiu o desenvolvimento do projeto Robocode

Em 2010 foi criado o plug-in .NET

Page 10: Hands on Robocode 2017

Apresentado o Robocode✓ Anatomia do Robocode

Body (Corpo):

A lataria do tanque. É usado para mover o robô para frente e para trás, para esquerda e para a direita.

Page 11: Hands on Robocode 2017

Apresentado o Robocode✓ Anatomia do Robocode

Gun (Arma):

Dispara as balas, pode se movimentar para esquerda ou direita.

Page 12: Hands on Robocode 2017

✓ Anatomia do Robocode

Radar (Monitoramento):

Identifica os inimigos, girando para esquerda ou direita. Dispara um evento ao detectar um inimigo.

É um dos recursos mais importantes do robô, sem ele acertar outro robô é impossível e o movimento é exclusivamente randômico

Apresentado o Robocode

Page 13: Hands on Robocode 2017

Apresentado o Robocode✓ Restrições

Energia:

• Utilizada nas operações do robo.

• No disparo, pode-se definir a potência de energia utilizada

• É recuperada quando acerta outro robo

Page 14: Hands on Robocode 2017

Apresentado o Robocode✓ Restrições

Calor:

• Um canhão só dispara quando o calor estiver em 0

• O calor gerado é proporcional a potência do disparo

Page 15: Hands on Robocode 2017

Apresentado o Robocode✓ Coordenadas

Usa o sistemas de coordenadas cartesiano

✓ Medidas

O robocode trabalha com medidas em pixels

Page 16: Hands on Robocode 2017

Primeira batalha✓ Battle > New ✓ Selecionar os robôs Tracker, RamFire e MyFirstRobot. Clicar

em Add para adicionar cada um.

Page 17: Hands on Robocode 2017

Primeira batalha

✓ Em seguida, clique na aba Rules

✓ Altere a propriedade Number ofRounds para 3

✓ Deixe a resolução em 800x600

✓ Clique em Start Battle

Page 18: Hands on Robocode 2017

Primeira batalha

Page 19: Hands on Robocode 2017

Primeira batalha✓ Tela de batalha

Velocidade

Parar

Reiniciar

Pausar

Logs

Vida

Pontuação

Page 20: Hands on Robocode 2017

Primeira batalha

✓ Ao final da batalha, são apresentadas a pontuação final, juntamente com o Rank.

Page 21: Hands on Robocode 2017

Primeira batalha✓ Pontuação

Total Score: Soma de todos os pontos do robo na batalha

Survival Score: 50 pontos são adicionados para cada robô quando um oponente morre.

Last Survivor Bonus: O vencedor do round ganha 10 pontos para cada robô morto.

Bullet Damage: 1 ponto para cada vez que atinge um inimigo

Page 22: Hands on Robocode 2017

Primeira batalha✓ Pontuação

Bullet Damage Bonus: Quando um tiro destrói um inimigo, o robo ganha 20% a mais sobre a sua pontuação de BulletDamage.

Ram Damage: 2 pontos para cada ponto de dano ao inimigo ao bater nele.

Ram Damage Bonus: 30% da pontuação de ram damage, será dado ao tanque que matar outro tanque.

1sts, 2nds, 3rds, etc.: Indica a posição do robo no round

Page 23: Hands on Robocode 2017

Meu primeiro robô

✓ Menu Robot > Source Editor

✓ Na janela aberta vá no menu File > New > Robot

✓ Na caixa de diálogo preencha o nome do robo como MeuPrimeiroRobo

✓ Em seguida preencha o pacote com o nome satc.robocode

✓ Irá abrir o Robocode Editor, vá em Compiler > Compile, depois em File e Save, em seguida feche o editor.

✓ Crie uma batalhe de 3 rounds entre o MeuPrimeiroRobo e o robo Fire

Page 24: Hands on Robocode 2017

Meu primeiro robô

Page 25: Hands on Robocode 2017

Meu primeiro robô

Page 26: Hands on Robocode 2017

Meu primeiro robô

Page 27: Hands on Robocode 2017

✓ Desabilitar som: Options > Preferences > Sound Options > Sound Effects > desmarcar Enable Sound

✓ Habilitar visão do radar: Options > Preferences > ViewOptions > marcar Visible Scan Arcs

✓ Habilitar visão da borda: Options > Preferences > ViewOptions > marcar Visible Sentry Border

✓ Testando o robô: Utilize o robô Interactive que é movimentado pelo mouse e teclado.

Configurações e Dicas

Page 28: Hands on Robocode 2017

✓ setBodyColor (Color color)

✓ setGunColor (Color color)

✓ setRadarColor (Color color)

✓ setBulletColor (Color color)

✓ setScanColor (Color color)

✓ setAllColors (Color color)

✓ setColors (Color bodyColor, Color gunColor, Color radarColor)

✓ setColors (Color bodyColor, Color gunColor, Color radarColor, Color bulletColor, Color scanArcColor)

O pacote de cores usado pelo Robocode é do pacote java.awt.Color:https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html

Personalizando a aparência

Page 29: Hands on Robocode 2017

Métodos de movimentos

✓ ahead (double distance): Move o robô para frente a quantidade x de pixels estipulada por parâmetro

✓ back (double distance) : Similar ao ahead só que move para trás

✓ fire(double power): Dispara um tiro, com o poder do tamanho especificado por parâmetro.

Page 30: Hands on Robocode 2017

Métodos de movimentos

✓ turnLeft (double degrees): Vira o robô a esquerda, rotacionando-o no ângulo do grau informado

✓ turnRight (double degrees): O mesmo que turnLeft, só que para a direita

✓ turnRadarLeft (double degrees): Vira o radar para esquerda

✓ turnRadarRight (double degrees): Vira o radar para a direita

✓ turnGunLeft (double degrees): Vira o canhão para a esquerda

✓ turnGunRight (double degrees): Vira o canhão para a direita

Page 31: Hands on Robocode 2017

Ajustes de movimentos

✓ setAdjustGunForRobotTurn (boolean independent): Vira o canhão junto com o veículo se falso

✓ setAdjustRadarForGunTurn (boolean independent): Vira o radar junto com o veículo

✓ setAdjustRadarForRobotTurn (boolean independent): Vira o radar junto com o canhão

Page 32: Hands on Robocode 2017

Eventos básicos

✓ onScannedRobot (ScannedRobotEvent event): Método chamado quando o robô vê outro robô pelo radar

✓ onHitWall (HitWallEvent event): Método chamado quando o robô colide com a parede do campo de batalha

✓ onHitRobot (HitRobotEvent event): Quando o robô colide com outro robô

✓ onHitByBullet (HitByBulletEvent event): O robô é atingido por um tiro.

Page 33: Hands on Robocode 2017

Eventos básicos

✓ onBulletMissed (BulletMissedEvent event): Método chamado quando um dos seus disparos erra o alvo

✓ onBulletHit (BulletHitEvent event): Ao acertar outro robô com o disparo esse método é chamado

✓ onRobotDeath(RobotDeathEvent event): Informação quando outro robô morre

✓ onWin(WinEvent event): Quando você vence a batalha

✓ onDeath(DeathEvent event): Quando você morre

Page 34: Hands on Robocode 2017

✓ getX(): Retorna a posição corrente do robô no eixo X✓ getY(): Retorna a posição corrente do robô no eixo Y✓ getHeight(): Altura✓ getWidth(): Largura✓ getBattleFieldHeight(): Informa a altura do campo de

batalha em pixels✓ getBattleFieldWidth(): Largura do campo de batalha✓ getGunHeading(): Direção em graus para onde o canhão

está apontando✓ getRadarHeading(): Posição do radar corrente✓ getHeading(): Posição em graus para onde o veículo está

direcionado

Obtendo informações

Page 35: Hands on Robocode 2017

Atividades

1. Criei um robo com o nome SeuNomeRobot no pacote meusrobos

2. Personalize a cor do corpo, do radar, da arma, da bala e do scanner.

3. Crie um log para todos os eventos vistos anteriormente. Por exemplo, para o evento onHitByBullet imprima no console “Fui atingido por RobotNome”.

4. Faça sua lógica de combat para nossa primeira batalha.

Page 36: Hands on Robocode 2017

Empacotando robôs

Page 37: Hands on Robocode 2017

Empacotando robôs

Page 38: Hands on Robocode 2017

Empacotando robôs

Page 39: Hands on Robocode 2017

Empacotando robôs

Page 40: Hands on Robocode 2017

Empacotando robôs

Page 41: Hands on Robocode 2017

Importando robôs

Page 42: Hands on Robocode 2017

Importando robôs

Page 43: Hands on Robocode 2017

Robocode no NetBeans

Page 44: Hands on Robocode 2017

Robocode no NetBeans

Page 45: Hands on Robocode 2017

Robocode no NetBeans

Page 46: Hands on Robocode 2017

Robocode no NetBeans

Page 47: Hands on Robocode 2017

Robocode no NetBeans

Page 48: Hands on Robocode 2017

Robocode no NetBeans

Page 49: Hands on Robocode 2017

Robocode no NetBeans

Page 50: Hands on Robocode 2017

Robocode no NetBeans

Page 51: Hands on Robocode 2017

Robocode no NetBeans

Page 52: Hands on Robocode 2017

Robocode no NetBeans

Page 53: Hands on Robocode 2017

Robocode no NetBeans

Page 54: Hands on Robocode 2017

Robocode no NetBeans

Page 55: Hands on Robocode 2017

Robocode no NetBeans

Page 56: Hands on Robocode 2017

Robocode no NetBeans

Page 57: Hands on Robocode 2017

AdvancedRobot

Page 58: Hands on Robocode 2017

AdvancedRobot

Page 59: Hands on Robocode 2017

AdvancedRobot✓ Características

✓ Enquanto um Robot pode só fazer uma coisa ao mesmo tempo, o AdvancedRobot pode definir vários comandos ao para executar ao mesmo tempo.

✓ São características do AdvancedRobot:

✓ Múltiplos eventos simultâneos – Ex.: Crazy

✓ Estratégias a cada turn – Ex.: Crazy

✓ Criados eventos customizados – Ex.: Target

✓ Pode manipular arquivos – Ex.: SittingDuck

✓ Interação com o usuário – Ex.: Interactive

Page 60: Hands on Robocode 2017

AdvancedRobot

✓ setAhead

✓ setBack

✓ setFire

✓ execute

✓ setTurnLeft

✓ setTurnRight

✓ setTurnGunRight

✓ setTurnGunLeft

✓ setTurnRadarLeft

✓ setTurnRadarRight

✓ waitFor

✓ addCustomEvent

✓ onCustomEvent

Page 61: Hands on Robocode 2017

AdvancedRobot✓ Exemplos de robôs avançados

✓ Crazy

✓ Interactive

✓ Interactive_v2

✓ SittingDuck

✓ SpinBot

✓ Target

Page 62: Hands on Robocode 2017

Build the best, destroy the rest!

Page 63: Hands on Robocode 2017

Referências

Robocode Home. Disponível em: <http://robocode.sourceforge.net>. Acesso em: 20 mar. 2016.

Robowiki. Disponível em: <http://robowiki.net/wiki/Robocode>. Acesso em: 21 mar. 2016.