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

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

Eduardo Carlos Hamerski Jr 09/05/2002

Apresentações semelhantes


Apresentação em tema: "Eduardo Carlos Hamerski Jr 09/05/2002"— Transcrição da apresentação:

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

2 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

3 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)

4 Componentes Robocode Ambiente (Campo de batalha) Editor de robôs
Robocode API

5 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ô

6 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

7 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

8 RoboCode API Principais classes do Pacote robocode: Robot TeamRobot
Permite implementar robôs simples TeamRobot Permite implementar robôs mais complexos, com suporte a times e comunicação

9 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)

10 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( ... )

11 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( ... )

12 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) { ... }

13 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());

14 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) { ... }

15 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);

16 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());

17 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); }

18 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;

19 Baixando e Instalando Robocode roda em qualquer plataforma que suporte Java 1.3.x ou superior O Java pode ser baixado de: para desenvolvimento, baixar J2SE 1.4 Apenas execução, baixar JRE 1.4 O instalador do Robocode pode ser baixado de:

20 Bibliografia http://robocode.alphaworks.ibm.com/home/home.html

21 Links para tópicos da Apresentação
Apêndice Links para tópicos da Apresentação

22 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


Carregar ppt "Eduardo Carlos Hamerski Jr 09/05/2002"

Apresentações semelhantes


Anúncios Google