eduardo carlos hamerski jr [email protected] 09/05/2002

22
Eduardo Carlos Hamerski Jr [email protected] 09/05/2002

Upload: internet

Post on 17-Apr-2015

110 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Eduardo Carlos Hamerski Jr [email protected]

09/05/2002

Page 2: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Conteúdo

• O que é o RoboCode?• Componentes Robocode• Ambiente (Campo de Batalha)• Arquitetura do Simulador de Batalhas• A anatomia de um robô• Robocode API (classes Robot e TeamRobot)]• Criando um robô• Criando um time de robôs

Page 3: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

O que é o RoboCode?

• Compõem o Robocode:– Ambiente para simulação de batalhas entre robôs

(campo de batalha)– Editor de robôs– Robocode API

• Criado por Mathew Nelson (Alphaworks/IBM)– Ensino de Programação– Performance de aplicações Java– Competições entre desenvolvedores– Outros (não previstos)

Page 4: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Componentes Robocode

• Ambiente

(Campo de batalha)

• Editor de robôs

• Robocode API

Page 5: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Ambiente (Campo de Batalha)

• Local onde a batalha entre os robôs se desenvolve

• Janela principal da aplicação• Opções para criar, salvar e abrir novas batalhas

ou batalhas já existentes• Opções para pausa, continuação e finalização

de uma batalha; destruição de um robô e visualização de estatísticas de qualquer robô

Page 6: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Arquitetura do Simulador de Batalhas

• Thread Gerenciador de Batalha– Gerencia os robôs, disparos e a renderização no campo de

batalha

• Thread Robô– Cada robô é uma thread Java independente

• O método run() possui a lógica que será executada pela thread

– Cada robô tem sua própria fila de eventos– Os eventos são interceptados e processados pelo próprio robô

• Subsistema de Renderização– Baseado no Java2D API

Page 7: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

A anatomia de um robô

• Tanque (representação gráfica)• Possui um canhão• Possui um radar• Todos os elementos (tanque, canhão e

radar) giram independentemente

Page 8: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

RoboCode API

• Principais classes do Pacote robocode:– Robot

• Permite implementar robôs simples

– TeamRobot• Permite implementar robôs mais complexos, com suporte a

times e comunicação

Page 9: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

RoboCode API

• Classe Robot– Mover para frente e para traz

• ahead(double distance)back(double distance)

– Girar• turnRight(double degree) e turnLeft(double degree)• turnGunRight(double degree) e turnGunLeft(double degree)• turnRadarRight(double degree) e turnRadarLeft(double degree)

– Habilitar independência do giro (tanque/canhão/radar)• setAdjustGunForRobotTurn(boolean flag)• setAdjustRadarForRobotTurn(boolean flag)• setAdjustRadarForGunTurn(boolean flag)

Page 10: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

RoboCode API

• Classe Robot– Obtendo informações do robô e do ambiente

• getX() e getY()• getHeading(), getGunHeading() e getRadarHeading()• getBattleFieldWidth() e getBattleFieldHeight()

– Disparos• fire(double power) e fireBullet(double power)

– Eventos• ScannedRobotEvent onScannedRobot( ... )• HitByBulletEvent onHitByBullet( ... )• HitRobotEvent onHitRobot( ... )• HitWallEvent onHitWall( ... )

Page 11: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

RoboCode API

• Classe TeamRobot– Herda todos os métodos e eventos definidos

na classe Robot e implementa:• broadcastMessage(Serializable message)• sendMessage(String name, Serializable message)• isTeammate(String name)• getTeammates()• MessageEvent onMessageReceived( ... )

Page 12: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um robô (template)

package nome_pacote;

Import robocode.*;

public class NomeRobo extends Robot {

// definições de constantes e atributos

public void run() {

// inicialização

while ( <condição> ) {

// implementação da lógica do robô

}

}

// eventos (ex: onScannetRobot(ScannedRobotEvent e) { ... }

}

Page 13: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um robô (exemplo)

package sample;

import robocode.*;

public class MyFirstRobot extends Robot

{

public void run() {

while (true) {

ahead(100); turnGunRight(360);

back(100); turnGunRight(360);

}

}

public void onScannedRobot(ScannedRobotEvent e) { fire(1); }

public void onHitByBullet(HitByBulletEvent e) {

turnLeft(90 - e.getBearing());

}

}

Page 14: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um time de robôs (template)

package nome_pacote;

Import robocode.*;

public class NomeRobo extends TeamRobot {// definições de constantes e atributos

public void run() {// inicialização

while ( <condição> ) {// implementação da lógica do robô

}}

// eventos (ex: onScannetRobot(ScannedRobotEvent e) { ... }}

Page 15: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um time de robôs (Exemplo 1)

package sampleteam;

import robocode.*;import java.awt.Color;import java.io.*;

public class MyFirstLeader extends TeamRobot{

public void run() {setColors(Color.red,Color.red,Color.red);try { broadcastMessage(newRobotColors(Color.red, Color.red, Color.red));} catch (IOException e) {}

while(true) {setTurnRadarRight(10000);ahead(100);back(100);}}

Page 16: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um time de robôs (Exemplo 1)

public void onScannedRobot(ScannedRobotEvent e) {if (isTeammate(e.getName())) return;double enemyBearing = this.getHeading() + e.getBearing();double enemyX = getX() + e.getDistance() *

Math.sin(Math.toRadians(enemyBearing));double enemyY = getY() + e.getDistance() *

Math.cos(Math.toRadians(enemyBearing));try {

broadcastMessage(new Point(enemyX,enemyY));} catch (IOException ex) {

System.out.println("Unable to send order: " + ex);}

}

public void onHitByBullet(HitByBulletEvent e) {turnLeft(90 - e.getBearing());

}}

Page 17: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um time de robôs (Exemplo 2)

package sampleteam;

import robocode.*;

public class MyFirstDroid extends TeamRobot implements Droid{

public void run() { System.out.println("MyFirstDroid ready."); }

public void onMessageReceived(MessageEvent e){

if (e.getMessage() instanceof Point){

Point p = (Point)e.getMessage();double dx = p.getX() - this.getX();double dy = p.getY() - this.getY();double theta = Math.toDegrees(Math.atan2(dx,dy));turnGunRight(normalRelativeAngle(theta - getGunHeading()));fire(3);

}

Page 18: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Criando um time de robôs (Exemplo 2)

else if (e.getMessage() instanceof RobotColors){

RobotColors c = (RobotColors)e.getMessage();

setColors(c.getBodyColor(),c.getGunColor(),c.getRadarColor());}

}public double normalRelativeAngle(double angle) {

if (angle > -180 && angle <= 180) return angle;double fixedAngle = angle;while (fixedAngle <= -180) fixedAngle += 360;while (fixedAngle > 180) fixedAngle -= 360;return fixedAngle;

}}

Page 19: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Baixando e Instalando

• Robocode roda em qualquer plataforma que suporte Java 1.3.x ou superior

• O Java pode ser baixado de:– http://www.java.sun.com

• para desenvolvimento, baixar J2SE 1.4• Apenas execução, baixar JRE 1.4

• O instalador do Robocode pode ser baixado de:– http://robocode.alphaworks.ibm.com/home/home.html

Page 20: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Bibliografia

• http://robocode.alphaworks.ibm.com/home/home.html

• http://www-106.ibm.com/developerworks/java/library/j-robocode/

• http://robocode.net/

• http://robocoderepository.com/

• http://robocode.diverman.com/

Page 21: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Apêndice

Links para tópicos da Apresentação

Page 22: Eduardo Carlos Hamerski Jr hamerski@ppgia.pucpr.br 09/05/2002

Performance de Aplicações Java

...

String s = “texto inicial”;

for (int i = 0; i < 1000; i++)

s += “, append”;

...

...

StringBuffer sb = new StringBuffer();

Sb.append(“texto inicial”);

for (int i = 0; i < 1000; i++)

sb.append(“, append”);

String s = sb.toString();

...

Retornar