Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de...

31
Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – [email protected] Baseado na apresentação de Diego Queiroz © 2013 – Arley Ristar

Transcript of Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de...

Page 1: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

Robocode“Build the best, destroy the rest! ”

Centro de InformáticaUniversidade Federal de PernambucoSistemas Inteligentes – IF684

Arley Ristar – [email protected] na apresentação de Diego Queiroz

© 2013 – Arley Ristar

Page 2: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

2

Sumário

1. Introdução;2. Instalando;3. Como funciona o Robocode;4. Como criar um robô;5. Alguns comandos;6. Alguns métodos;7. Projeto da disciplina;8. Exercício.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 3: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

3

Introdução

• O que é o Robocode:Robocode foi criado como um jogo de

programação cujo objetivo é desenvolver um tanque de guerra (em Java ou .NET) para combater outros tanques em uma arena. As batalhas são executadas em tempo real e com representaçãográfica.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 4: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

4

Pré Requisitos

Para rodar o Robocode:• Possuir Java 5.0 SE ou mais recente.

• A variável JAVA_HOME, setada para o diretório do Java.

- Windows: JAVA_HOME=C:\Program Files\Java\jdkα.β.γ.δ

- UNIX, Linux, Mac OS: JAVA HOME=/usr/local/jdkα.β.γ.δ

• E a variável PATH, que deve incluir o caminho para a pasta bin do diretório de Java (JAVA HOME) que inclui o java.exe para iniciar a JVM.

- Windows: PATH=%PATH%;%JAVA HOME%\bin - UNIX, Linux, Mac OS: PATH=${PATH}:${JAVA HOME}/bin

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 5: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

5

Instalação

• O download da versão atual está disponível em (ou google robocode, primeiro link): http://sourceforge.net/projects/robocode/files/robocode/

• Depois de baixar, execute o .jar e este realizará a instalação (java –jar robocode-α.β.γ.δ-setup.jar).

• Após a instalação, para iniciar o robocode utilize o ’robocode.bat’ (Windows) ou ‘robocode.sh’ (UNIX, Linux, Mac OS).

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 6: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

6

Como funciona o Robocode

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 7: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

7

Robôs, Robôs Everywhere

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

• Estrutura:

Canhão

Radar

Corpo

Page 8: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

8

Anatomia de um Robô

Um robô consiste de três partes principais: • Corpo - Carrega o canhão e o radar e permite mover

para frente, para trás e girar o tanque no sentido horário e anti-horário.

• Canhão - Está montado no corpo do tanque e dispara balas de energia com força variável além de poder girar, também, no sentido horário e anti-horário.

• Radar - Está montado na arma e é usado para escanear por robôs enquanto o robô se move. Ele pode girar em ambos os sentidos e gera eventos onScannedRobot quando detecta algum robô.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 9: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

9

Tipos de Robô

Existem 4 tipos básicos de robô:• Junior Robot - Usado para propósitos educacionais.• Robot - Robô de implementação mais simples, com várias

funcionalidades prontas, possui todas as partes principais.• AdvancedRobot - Robô que permite desenvolvimento mais

complexo, alterando partes implementadas de maneira simples no Robot. Também possui as três partes básicas.

• Droid - Droids são robôs que não possuem radar, precisando de orientação de outro robô para atirar de forma mais eficiente. Recebem um bônus de energia por não possuírem radar (20 unidades a mais de energia).

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 10: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

10

One Does Not Simply Win The Battle

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 11: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

11

Turnos

• O Robocode é baseado em turnos, porém é possível ajustar a quantidade de turnos por segundo aparentando tempo real.

• Geralmente ele é executado de 30 a 40 turnos por segundo.

• Em um turno um Robot pode executar apenas uma ação qualquer.

• Um AdvancedRobot pode executar várias ações em um turno.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 12: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

12

Sistema de Coordenadas

• O sistema de coordenadas utilizado pelo Robocode é o cartesiano.

• O sistema de ângulos é orientado ao norte.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 13: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

13

Tempo e Distância

• O tempo medido em ticks e cada robô recebe um tick por turno.

• A distância é medida em pixels, mas com precisão double, logo é possível mover frações de pixel.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 14: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

14

Movimento

• Robôs aceleram a 1px/turno2 e desaceleram a 2px/turno2.

• Velocidade é dada por v = at, mas nunca pode exceder 8px/turno.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 15: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

15

Rotação

• A taxa máxima de rotação dos robôs é definida por: (10 − 0.75 abs(velocidade)) graus/turno, ou seja, quanto mais rápido o tanque anda, mais demora para rodar.

• A taxa máxima de rotação do canhão é de 20 graus/turno.

• A taxa máxima de rotação do radar é de 45 graus/turno.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 16: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

16

Balas• O dano causado pelas balas é dado por: 4*firepower .

Se o firepower > 1, então um dano extra é causado: 2*(power − 1).

• A velocidade da bala é dada por: 20 - 3*firepower e não é influenciada pela velocidade do tanque.

• Quando o canhão dispara, é gerado calor igual a 1 + firepower/5. E se esse valor for maior que 0, o canhão não pode atirar novamente até que esfrie. Todas as armas iniciam com algum calor no início de cada round.

• A energia recuperada pelo tanque ao atingir um oponente é igual a 3*firepower .

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 17: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

17

Loop de Processamento do Simulador

A ordem em que o Robocode roda é a seguinte:1. Robocode pinta o estado atual na tela.2. Todos os robôs executam seus códigos até

que tomam algum ação (e então são pausados).

3. O tempo é atualizado (time = time + 1).4. Todas as balas se movem e checam por

colisão e isso inclui balas que acabaram de ser atiradas.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 18: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

18

Loop de Processamento do Simulador

A ordem em que o Robocode roda é a seguinte:5. Todos os robôs se movem (canhão, radar, direção,

aceleração, velocidade e distância, nessa ordem).6. Todos os robôs que podem detectar algo através

do radar recebem os sinais de radar agora (também recebem mensagens do time, se existirem).

7. Todos os robôs são retirados do pause e podem tomar novas ações.

8. Cada robô processa sua fila de eventos.Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 19: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

19

Como criar um Robô

• Duas opções:- Criar diretamente pelo editor do

robocode.- Usar o Eclipse.

● Criando pelo editor:1. Robot >> Editor2. File >> New >> Robot3. Nome do robô (classe)4. Nome do pacote

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 20: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

20

Editor do Robocode

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 21: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

21

Editor do Robocode - Compile

• Após o robô pronto é hora de compilar:1. File >> Save2. Compiler >> Compile• Agora é só brincar com ele .1. Battle >> New2. Em Available Robots -> Packages escolha o pacote

com nome que foi criado.3. Selecione o robô criado e um (ou mais)

adversários.4. TONIGHT, WE DINE IN HELL!! START BATTLE! !!

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 22: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

22

Robocode no Eclipse - Projeto

1. File >> New >> Project >> Java Project2. Dê o nome do projeto. 3. NEXT!! (ou se virem no build path depois)4. Libraries >> Add External JARs5. Pasta robocode >> libs >> robocode.jar6. + >> Javadoc location: (None) >> Edit...7. Browser >> Pasta robocode >> javadoc8. Ok >> Ok >> Finish

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 23: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

23

Robocode no Eclipse - Projeto

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 24: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

24

Robocode no Eclipse - Criar Robô

1. New >> Class2. Superclass: robocode.Robot (Ou AdvancedRobot)

3. Lembram de Thread? Pois é... Criem um run() { } para indicar o que o robô deve ficar executando.

4. Quanto mais “inteligente” teu robô for, melhor. Os métodos que recebem eventos (normalmente iniciados em ‘on’) são ótimos para a criação das regras de combate.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 25: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

25

Alguns Comando dos Robôs● ahead(100); → Move 100 pixels● turnGunRight(180); → Gira a arma 180º● back(100); → Move 100 pixels (para trás)• turnLeft(90); → Gira o robô em 90• turnRadarRightRadians(0.5) → Já deu pra

entender, né?• setFire(Rules.MAX_BULLET_POWER)• fire(1)• Observem a documentação (ou o ctrl+space

mesmo) e brinquem com os comandos.Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 26: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

26

Alguns métodos para tratar eventos

Para criar regras pode-se sobrescrever alguns métodos que são chamados quando ocorre algum evento do tipo que estão recebendo.• onHitByBullet → Acertado por uma bala.• onScannedRobot → Quando achar um robô

no radar.• onRoundEnded → Quando acabar um round.Olhem a documentação e criem uma boa estratégia (e que faça sentido).

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 27: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

27

Usando Robô Criado no Eclipse

• Dois modos:1. No robocode: Options >> Preferences >>

Development Options >> Add e coloca o caminho até a pasta do projeto.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 28: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

28

Usando Robô Criado no Eclipse

2. Copiar o .class (ou um jar) do robô para a pasta robots.

• Depois disso é só usar como qualquer outro robô .

• Para quem não quiser usar o editor do robocode nem uma IDE, é só escrever um java (usando algum editor de texto, como o vim) e executar um ‘javac‘ copiando (ou linkando) o class para a pasta robots.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 29: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

29

Projeto da Disciplina

• A competição realizada na disciplina terá duas modalidades:

1. A equipe possui um Robot líder(Primeiro robô registrado) e 4 droids (Decisão centralizada).

2. Equipe possuindo 5 Robots (Decisão descentralizada).

• O objetivo de cada competição é destruir o time adversário, o sistema de scoring utilizado será o mesmo do robocode.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 30: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

30

Exercício

• Crie um Robô Kamikaze :P.• Quando ele detectar um robô ele se move (e o canhão

também) em direção a esse robô.• Só atire quando achar um robô.• Defina o poder de fogo de acordo com a distância do

outro robô (Fica a critério de vocês escolher como fazer isso).

• Quanto mais longe, menor o poder de fogo.• Se algum adversário morrer antes dele, print algo e

realize algum comando da sua escolha.• Fazer isso AGORA!

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar

Page 31: Robocode “Build the best, destroy the rest! ” Centro de Informática Universidade Federal de Pernambuco Sistemas Inteligentes – IF684 Arley Ristar – arrr2@cin.ufpe.br.

31

Exercício 2

• Com o exercício anterior completo é hora de aumentar a complexidade (mesmo que não faça tanto sentido).

• Quando a Energia estiver em menos de 10, faça o robô parar de atirar e mover o canhão e só andar em direção ao adversário.

• Quando atingir um adversário, se a energia dele for maior que 2 vezes a sua energia, ele perde as esperanças e muda a cor para vermelho, se não continua se movendo em direção ao adversário.

Sistemas Inteligentes – IF684Introdução ao Robocode© 2013 – Arley Ristar