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 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 JavaPerformance 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 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 ( ) { // 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 ( ) { // 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: –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

20 Bibliografia

21 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