Upload
internet
View
108
Download
2
Embed Size (px)
Citation preview
Eduardo Carlos Hamerski Jr [email protected]
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
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)
Componentes Robocode
• Ambiente
(Campo de batalha)
• Editor de robôs
• Robocode API
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ô
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
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
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
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)
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( ... )
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( ... )
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) { ... }
}
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());
}
}
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) { ... }}
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);}}
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());
}}
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);
}
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;
}}
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
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/
Apêndice
Links para tópicos da Apresentação
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