A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Build the Best Destroy the Rest!!! Introdução I Torneio Robocode.

Apresentações semelhantes


Apresentação em tema: "Build the Best Destroy the Rest!!! Introdução I Torneio Robocode."— Transcrição da apresentação:

1 Build the Best Destroy the Rest!!! Introdução I Torneio Robocode

2 Sumário Robocode, o que é? Conceitos básicos Como programar
Principais características Funções básicas Eventos Primeiro robô

3 Robocode, o que é? Robocode trata-se de um jogo onde competidores programam robôs tanque de guerra para destruir outros tanques de guerra. Uma vez programado não pode haver interversão humana para controlá-lo.

4 Robocode, o que é?

5 Conceitos Básicos Anatomia do tanque de guerra:
Utilizada para disparar balas. Pode girar 360° graus. Utilizado para enxergar o campo de batalha.

6 Conceitos Básicos Campo de batalha. Paredes Robôs

7 Programando Podemos programar nossos robôs diretamente no jogo.

8 Programando O editor,

9 Programando Criando um novo robô.

10 Programando Digite o nome do seu robô Não pode conter espaços;
Não pode conter caracteres especiais; Não pode iniciar com um número.

11 Programando Nesta próxima tela, digite o nome de sua equipe:
Nome curto, em minúsculo, sem caracteres especiais e sem espaço.

12 Programando A seguinte tela foi criada.
Todo texto iniciando com // ou entre /* e */ são comentários.

13 Programando Personalizando as cores do seu robô.
Remova o comentário da 3 linha. Apagar a //

14 Programando Personalizando as cores do seu robô.
Remova o comentário da 21 linha. Apagar a //

15 Programando A linha define as cores do robô.
setColors(Color.red,Color.blue,Color.green); define as cores do robô. A primeira cor refere-se ao corpo, a segunda à arma, a terceira ao radar. As cores devem ser selecionadas sempre utilizando o Color. + cor em inglês.

16 Programando Exemplo: Robô com o corpo branco, arma preta e radar vermelho. setColors(Color.white,Color.black,Color.red);

17 Programando Salvando o robô.

18 Programando Salvando o robô. Se aparecer, pressione Sim.
É uma mensagem informando o diretório que o seu robô será salvo e que o diretório será criado.

19 Programando Salvando o robô
Não altere o nome do arquivo, pressione apenas o botão salvar.

20 Programando Agora falta compilar o robô.

21 Programando Se tudo deu certo.

22 Primeira Batalha Vá para a tela do jogo.

23 Primeira Batalha Clique em Battle -> New

24 Primeira Batalha Configurando a batalha
Robôs que irão participar da batalha. Configurando a batalha “Equipes” Robôs

25 Primeira Batalha Configurando a batalha
Selecione seu robô e clique em add. Configurando a batalha

26 Primeira Batalha Selecione um outro robô para lutar contra o seu robô.
Pressione Start Battle para iniciar a batalha.

27 Primeira Batalha Note as cores que escolhemos para nosso robô.

28 Primeira Batalha Você deve ter estranhado o movimento do seu robô.
Para frente, gira arma e radar 360°, para trás, gira arma e radar 360°. Eu programei isso?

29 Primeira Batalha Vamos dar uma olhada.
Nossa linha de código para configurar a cor do robô. Aqui está o comportamento do robô. Note que está dentro de um while. Vai repetir até o robô destruir todos os adversários ou ser destruído.

30 Primeira Batalha Vamos analisar o que as funções fazem.
A primeira linha apenas repete as linhas entre { } while(true) { ahead(100); turnGunRight(360); back(100); } Move o robô para frente por 100 pixels. Move a arma para direita 360°. Move o robô para trás por 100 pixels. Move a arma para direita 360°.

31 Principais Características
Tempo e medida de distância Tempo O tempo é medido em ticks. Distância A distância é medida em pixels.

32 Principais Características
Coordenadas

33 Funções Básicas Funções de ação
turnRight(double degree): Gira o robô em um certo número de graus para a direita turnLeft(double degree): Gira o robô em um certo número de graus para a esquerda turnGunRight(double degree): Gira a arma em um determinado número de graus para a direita turnGunLeft(double degree): Gira a arma em um determinado número de graus para a esquerda turnRadarRight(double degree): Gira o radar em um certo número de graus para a direita turnRadarLeft(double degree): Gira o radar em um certo número de graus para a esquerda. fire(double energy): Dispara uma bala com a energia a especificada.

34 Funções Básicas Funções de informação
getBattleFieldWidth() : Obtém a largura (em píxels) do campo de batalha getBattleFieldHeight(): Obtém a altura (em píxels) do campo de batalha getX(): Obtém a coordenada “x” do robô getY(): Obtém a coordenada “y” do robô getHeading(): Obtém a direção em graus do robô getGunHeading(): Obtém a direção em graus da arma getRadarHeading(): Obtém a direção em graus do radar getDistance(): Obtém a distância do oponente em pixels getBearing(): Obtém o ângulo do oponente em graus em relação a você

35 Eventos void onScannedRobot(ScannedRobotEvent e) – O código desta função é executado sempre que um robô é detectado pelo radar. void onHitRobot(HitRobotEvent e) – O código desta função é executado toda vez que você atinge um inimigo. void onHitByBullet(HitByBulletEvent e) – O código desta função é executado toda vez que você for atingido por um inimigo.

36 Primeiro Robô Depois de todas estas funções vamos lá, criar nosso primeiro tanque de guerra! Primeiramente vamos montar uma estratégia, a mais simples possível. Para montarmos nossa estratégia temos que pensar em 3 coisas. Posicionamento. Esquiva. Ataque.

37 Primeiro Robô Posicionamento
Vamos posicionar o robô no centro do campo de batalha. O que sabemos? Queremos mover o robô para este ponto.

38 Primeiro Robô Posicionando o robô no centro.
(getBattleFieldWidth() /2, getBattleFieldHeight() /2) (getBattleFieldWidth() /2, getY()) (getX(), getY()) a c t a = - b b = - c = - t = arc tg c/b

39 Primeiro Robô Como fica o código.
double marromX = (getBattleFieldWidth()/2); double marromY = (getBattleFieldHeight()/2); double vermelhoX = getX(); double vermelhoY = getY(); double azulX = marromX; double azulY = vermelhoY; double a = Math.sqrt(Math.pow(vermelhoX - marromX, 2) + Math.pow(vermelhoX - marromY, 2)); double b = azulX - vermelhoX; double c = marromY - azulY; double t = Math.atan(c/b);

40 Primeiro Robô Já temos o ângulo do nosso tanque em relação ao centro do campo. O movimento de girar será o ângulo que o robô atualmente está menos o ângulo do tanque em relação ao centro. a c t b getHeading() retorna este ângulo.

41 Primeiro Robô Como fica o código.
double marromX = (getBattleFieldWidth()/2); double marromY = (getBattleFieldHeight()/2); double vermelhoX = getX(); double vermelhoY = getY(); double azulX = marromX; double azulY = vermelhoY; double a = Math.sqrt(Math.pow(vermelhoX - marromX, 2) + Math.pow(vermelhoY - marromY, 2)); double b = azulX - vermelhoX; double c = marromY - azulY; double t = Math.toDegrees(Math.atan(c/b)) - getHeading();

42 Primeiro Robô Girando e movendo o robô.
Utilizaremos as funções turnRight() e ahead(). double marromX = (getBattleFieldWidth()/2); double marromY = (getBattleFieldHeight()/2); double vermelhoX = getX(); double vermelhoY = getY(); double azulX = marromX; double azulY = vermelhoY; double a = Math.sqrt(Math.pow(vermelhoX - marromX, 2) + Math.pow(vermelhoY - marromY, 2)); double b = azulX - vermelhoX; double c = marromY - azulY; double t = Math.toDegrees(Math.atan(c/b)) - getHeading(); turnRight(t); ahead(a)

43 Primeiro Robô Temos um problema. Robocode Convencional Basta subtrair
90° 90° 180° 360° 270°

44 Primeiro Robô Resultado double marromX = (getBattleFieldWidth()/2);
double marromY = (getBattleFieldHeight()/2); double vermelhoX = getX(); double vermelhoY = getY(); double azulX = marromX; double azulY = vermelhoY; double a = Math.sqrt(Math.pow(vermelhoX - marromX, 2) + Math.pow(vermelhoY - marromY, 2)); double b = azulX - vermelhoX; double c = marromY - azulY; double t = 90 - Math.toDegrees(Math.atan(c/b)) - getHeading(); turnRight(t); ahead(a)

45 Primeiro Robô Mais um problema...
Temos que determinar o quadrante que se encontra a orientação do robô para determinar se usamos o turnRight() ou turnLeft(). Ou podemos normalizar o ângulo entre -180° e 180. Sendo assim apenas turnRight() resolveria nosso problema.

46 Primeiro Robô Resultado final.
double marromX = (getBattleFieldWidth()/2); double marromY = (getBattleFieldHeight()/2); double vermelhoX = getX(); double vermelhoY = getY(); double azulX = marromX; double azulY = vermelhoY; double a = Math.sqrt(Math.pow(vermelhoX - marromX, 2) + Math.pow(vermelhoY - marromY, 2)); double b = azulX - vermelhoX; double c = marromY - azulY; double t = 90 - Math.toDegrees(Math.atan(c/b)) - getHeading(); while (t <= -180) a += 2 * 180; while (t > 180) a -= 2 * 180; turnRight(t); ahead(a)

47 Primeiro Robô Vamos colocar o código disponibilizado antes do while.
Só será executando uma vez.

48 Primeiro Robô Agora vamos girar o radar para procurar os inimigos.
Basta adicionar a linha turnRadarRight(360); Colocamos dentro do while para repetir sempre.

49 Primeiro Robô Vamos posicionar o robô perpendicular ao inimigo.
Desta forma podemos esquivar das balas. Quando um inimigo é detectado pelo radar a função onScannedRobot() é chamada. Faremos isto nesta função.

50 Primeiro Robô Resultado.
public void onScannedRobot(ScannedRobotEvent e) { turnRight(getBearing()+90); }

51 Primeiro Robô Agora movemos o robô para frente e para trás.
while(true) { ahead(100); turnRadarRight(360); back(100); }

52 Primeiro Robô Código Final package demolidores; import robocode.*;
import java.awt.Color; public class MeuRobo extends Robot { boolean finish = false; public void run() { setColors(Color.white,Color.black,Color.red); // body,gun,radar double marromX = (getBattleFieldWidth()/2); double marromY = (getBattleFieldHeight()/2); double vermelhoX = getX(); double vermelhoY = getY(); double azulX = marromX; double azulY = vermelhoY;

53 Primeiro Robô Continuação
double a = Math.sqrt(Math.pow(vermelhoX - marromX, 2) + Math.pow(vermelhoY - marromY, 2)); double b = azulX - vermelhoX; double c = marromY - azulY; double t = 90 - Math.toDegrees(Math.atan(c/b)) - getHeading(); while (t <= -180) t += 2 * 180; while (t > 180) t -= 2 * 180; turnRight(t); ahead(a); finish = true; while(true) { ahead(100); turnRadarRight(360); back(100); } public void onScannedRobot(ScannedRobotEvent e) { if (finish) turnRight(e.getBearing()+90); public void onHitByBullet(HitByBulletEvent e) { public void onHitWall(HitWallEvent e) {

54 API e WIKI http://robocode.sourceforge.net/docs/robocode/


Carregar ppt "Build the Best Destroy the Rest!!! Introdução I Torneio Robocode."

Apresentações semelhantes


Anúncios Google