SlideShare una empresa de Scribd logo
1 de 21
1
Regis Pires Magalhães
regispiresmag@gmail.com
Build the best, destroy the rest
2
Motivação
“Parte da motivação para escrever o
Robocode foi provar ao mundo que as
sentenças 'Java é lento' e 'Você não pode
escrever jogos em Java' não são mais
verdadeiras. Eu acho que consegui.”
Mathew Nelson – Criador do Robocode
3
Robocode IDE
 Campo de Batalha
 Editor de Robôs
4
Campo de Batalha
5
Anatomia de um Robô
 O robô tem um canhão giratório e acima dele há um radar
giratório.
 O robô, o canhão e o radar podem girar independentemente a
qualquer momento.
 Por padrão, eles estão alinhados de acordo com a direção do
movimento do robô.
 Por padrão, o radar movimenta-se em conjunto com o canhão.
Veículo
Canhão
Radar
6
Restrições de um Robô
➔ Energia
 Utilizada nas operações do Robô;
 No disparo, pode ser definida a quantidade de
energia utilizada;
 É recuperada quando acerta-se outro robô.
➔ Calor
 Um canhão só dispara quando seu calor estiver em
zero. O calor gerado é proporcional à potência do
disparo.
7
Comportamentos de um Robô
 Vários métodos estão disponíveis na classe Robot.
8
Movimentação do Robô
 turnRight(double degree) / turnLeft(double degree)
 Giram o robô de acordo com o grau especificado.
 ahead(double distance) / back(double distance)
 Movem o robô de acordo com a distância especificada em pixels;
 Finalizados quando o robô esbarra numa parede ou em outro
robô.
 turnGunRight(double degree) / turnGunLeft(double
degree)
 Giram o canhão, independente do veículo.
 turnRadarRight(double degree) /
turnRadarLeft(double degree)
 Giram o radar, independente o canhão e do veículo.
9
Movimentação do Robô
 Quando o robô gira, o canhão e o radar também giram, a
não ser que um dos seguintes métodos seja usado:
 setAdjustGunForRobotTurn(boolean flag)
• Se flag for true, gira o canhão junto com o veículo.
 setAdjustRadarForRobotTurn(boolean flag)
• Se flag for true, gira o radar junto com o veículo.
 setAdjustRadarForGunTurn(boolean flag)
• Se flag for true, gira o radar junto com o canhão.
10
Informações sobre o Robô
 getX() / getY()
 Obtém a coordenada atual do robô.
 getHeading() / getGunHeading() /
getRadarHeading()
 Obtém a direção atual do robô, canhão ou radar em graus.
 getBattleFieldWidth() /
getBattleFieldHeight()
 Obtém as dimensões do campo de batalha.
11
Navegação
12
Disparo
 Cada robô inicia com um nível de energia padrão e é
destruído quando seu nível de energia atinge zero.
 Ao fazer um disparo, o robô pode usar até 3
unidades de energia. Quando mais energia usada no
disparo, mais danos causará ao robô atacado.
 fire(double power) / fireBullet(double
power)
 Usados para fazer um disparo com a energia especificada.
 O método fireBullet retorna uma referência ao objeto
robocode.Bullet que pode ser usada em robôs avançados.
13
Eventos
 O radar está sempre ativo e dispara um evento se
detectar a presença algum robô dentro do seu limite
de alcance.
 O criador de um robô pode tratar vários eventos que
podem ocorrer durante a batalha.
 A classe Robot já tem tratamentos padrões para
todos esses eventos. Entretanto, pode-se
sobrescrevê-los.
14
Eventos
 onScannedRobot(ScannedRobotEvent e)
 Método chamado quando um robô for detectado pelo radar.
 onHitByBullet(HitByBulletEvent e)
 Método executado quando o robô é atingido por um disparo.
 onHitRobot(HitRobotEvent e)
 Método executado quando o robô colide com outro robô.
 onHitWall(HitWallEvent e)
 Método executado quando o robô colide com uma parede.
15
Mais documentação
 Para mais documentação, acesse a documentação
Javadoc da API do Robocode que pode ser
acessada do menu Help do campo de batalha ou do
menu Help do editor de robôs.
16
Exemplo de Robô
import robocode.*;
public class Asimov extends Robot {
public void run() {
while(true) {
ahead(100);
turnRight(90);
}
}
}
17
Exemplo de Robô
package dw;
import robocode.*;
public class DWStraight extends Robot {
public void run() {
turnLeft(getHeading());
while(true) {
ahead(1000);
turnRight(90);
}
}
public void onScannedRobot(ScannedRobotEvent e) {
fire(1);
}
public void onHitByBullet(HitByBulletEvent e) {
turnLeft(180);
}
}
18
Funcionamento
 Cada robô é executado em sua própria thread.
 Quem controla todo o sistema é a thread Battle
Manager (gerenciador de batalha).
19
Pseudo-códido do gerenciador de batalha
enquanto (a partida não terminar) faça
início
chamar o subsistema de rendering (geração de imagens)
para desenhar robôs, disparos, explosões
para cada robô faça
início
acordar o robô
esperar o robô fazer uma chamada de bloqueio,
até um tempo máximo de intervalo
fim
limpar a fila de eventos de todos os robôs
mover disparos e gerar eventos na fila de eventos dos
robôs se necessário
mover robôs e gerar eventos na fila de eventos dos
robôs se necessário
fazer a preparação da batalha e gerar eventos na fila
de eventos dos robôs se necessário
esperar pela taxa de quadros se necessário
fim
20
Robôs Avançados
 Enquanto um robô comum faz apenas uma coisa de
cada vez, no robô avançado você primeiro define as
ações e depois pede para que sejam executadas.
 Características:
 Múltiplos movimentos simultaneamente;
 Pode ser definida toda uma estratégia a cada tique de
relógio;
 Podem ser definidos eventos personalizados;
 Pode ter um arquivo de dados.
 Blocking x Non-Blocking
 turnRight() x setTurnRight()
 turnRight() x setTurnRight()
 ...
21
Exemplo de Robô
import robocode.*;
public class Asimov extends AdvancedRobot {
public void run() {
while(true) {
setAhead(100);
setTurnRight(90);
execute();
}
}
}

Más contenido relacionado

La actualidad más candente

Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidorAndré bogas
 
Aula 03 - Analisando objetivos técnicos - Projeto de Redes de Computadores
Aula 03 - Analisando objetivos técnicos - Projeto de Redes de ComputadoresAula 03 - Analisando objetivos técnicos - Projeto de Redes de Computadores
Aula 03 - Analisando objetivos técnicos - Projeto de Redes de ComputadoresDalton Martins
 
Guia De Instalacao Maquina Virtual Utilizando VirtualBox
Guia De Instalacao Maquina Virtual Utilizando VirtualBoxGuia De Instalacao Maquina Virtual Utilizando VirtualBox
Guia De Instalacao Maquina Virtual Utilizando VirtualBoxhome
 
Metodologia agil scrum
Metodologia agil scrumMetodologia agil scrum
Metodologia agil scrumPablo Juan ஃ
 
Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5José Wagner Bungart
 
Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02thomasdacosta
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Sérgio Souza Costa
 
Aula 1 fundamentos de redes de computadores
Aula 1   fundamentos de redes de computadoresAula 1   fundamentos de redes de computadores
Aula 1 fundamentos de redes de computadoreswab030
 
Aula 6 - Redes de Computadores A - Endereçamento IP
Aula 6 - Redes de Computadores A - Endereçamento IPAula 6 - Redes de Computadores A - Endereçamento IP
Aula 6 - Redes de Computadores A - Endereçamento IPFilipo Mór
 
Ferramentas de Gerenciamento de Rede
Ferramentas de Gerenciamento de RedeFerramentas de Gerenciamento de Rede
Ferramentas de Gerenciamento de RedeHelder Lopes
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterDevCamp Campinas
 

La actualidad más candente (20)

Modelo TCP/IP
Modelo TCP/IPModelo TCP/IP
Modelo TCP/IP
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
 
Projeto de redes
Projeto de redesProjeto de redes
Projeto de redes
 
Filtro de conteúdo Proxy
Filtro de conteúdo   ProxyFiltro de conteúdo   Proxy
Filtro de conteúdo Proxy
 
Aula 03 - Analisando objetivos técnicos - Projeto de Redes de Computadores
Aula 03 - Analisando objetivos técnicos - Projeto de Redes de ComputadoresAula 03 - Analisando objetivos técnicos - Projeto de Redes de Computadores
Aula 03 - Analisando objetivos técnicos - Projeto de Redes de Computadores
 
Guia De Instalacao Maquina Virtual Utilizando VirtualBox
Guia De Instalacao Maquina Virtual Utilizando VirtualBoxGuia De Instalacao Maquina Virtual Utilizando VirtualBox
Guia De Instalacao Maquina Virtual Utilizando VirtualBox
 
Linguagem Dart (Google)
Linguagem Dart (Google)Linguagem Dart (Google)
Linguagem Dart (Google)
 
Metodologia agil scrum
Metodologia agil scrumMetodologia agil scrum
Metodologia agil scrum
 
Roteadores e roteamento
Roteadores e roteamentoRoteadores e roteamento
Roteadores e roteamento
 
Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5Projetos Estruturados de Redes - Parte 5
Projetos Estruturados de Redes - Parte 5
 
Arquitetura de Redes de Computadores
 Arquitetura de Redes de Computadores Arquitetura de Redes de Computadores
Arquitetura de Redes de Computadores
 
Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento Engenharia de Software - Conceitos e Modelos de Desenvolvimento
Engenharia de Software - Conceitos e Modelos de Desenvolvimento
 
Rede de computadores
Rede de computadoresRede de computadores
Rede de computadores
 
Aula 1 fundamentos de redes de computadores
Aula 1   fundamentos de redes de computadoresAula 1   fundamentos de redes de computadores
Aula 1 fundamentos de redes de computadores
 
Aula 6 - Redes de Computadores A - Endereçamento IP
Aula 6 - Redes de Computadores A - Endereçamento IPAula 6 - Redes de Computadores A - Endereçamento IP
Aula 6 - Redes de Computadores A - Endereçamento IP
 
Aula 1 semana
Aula 1 semanaAula 1 semana
Aula 1 semana
 
Ferramentas de Gerenciamento de Rede
Ferramentas de Gerenciamento de RedeFerramentas de Gerenciamento de Rede
Ferramentas de Gerenciamento de Rede
 
Erick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em FlutterErick Zanardo - Desenvolvimento de Jogos em Flutter
Erick Zanardo - Desenvolvimento de Jogos em Flutter
 

Destacado (20)

Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
 
Revisitando o Robocode
Revisitando o RobocodeRevisitando o Robocode
Revisitando o Robocode
 
Robocode - Aprendendo a guerrear com java !
Robocode - Aprendendo a guerrear com java !Robocode - Aprendendo a guerrear com java !
Robocode - Aprendendo a guerrear com java !
 
Robocode
RobocodeRobocode
Robocode
 
Kanban
KanbanKanban
Kanban
 
Java Y Robocode
Java Y RobocodeJava Y Robocode
Java Y Robocode
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
 
Java 15 Jar
Java 15 JarJava 15 Jar
Java 15 Jar
 
Pascal Tipos
Pascal TiposPascal Tipos
Pascal Tipos
 
Java 14 Javadoc
Java 14 JavadocJava 14 Javadoc
Java 14 Javadoc
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 

Similar a Robocode

Similar a Robocode (12)

Robocode
RobocodeRobocode
Robocode
 
Robocode 666
Robocode 666Robocode 666
Robocode 666
 
Robocode
RobocodeRobocode
Robocode
 
drools + robocode
drools + robocodedrools + robocode
drools + robocode
 
Robocode
RobocodeRobocode
Robocode
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
Robocode 101
Robocode 101Robocode 101
Robocode 101
 
Combate de Robôs agora se chama Vaporaria (tchau RobotJS)
Combate de Robôs agora se chama Vaporaria (tchau RobotJS)Combate de Robôs agora se chama Vaporaria (tchau RobotJS)
Combate de Robôs agora se chama Vaporaria (tchau RobotJS)
 
Apresentação 2
Apresentação 2Apresentação 2
Apresentação 2
 
Algoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaAlgoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à Robótica
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
06 colisao final
06 colisao final06 colisao final
06 colisao final
 

Más de Regis Magalhães

Más de Regis Magalhães (19)

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
java 00 Introducao
java 00 Introducaojava 00 Introducao
java 00 Introducao
 
POO Plano de Curso
POO Plano de CursoPOO Plano de Curso
POO Plano de Curso
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 

Robocode

  • 2. 2 Motivação “Parte da motivação para escrever o Robocode foi provar ao mundo que as sentenças 'Java é lento' e 'Você não pode escrever jogos em Java' não são mais verdadeiras. Eu acho que consegui.” Mathew Nelson – Criador do Robocode
  • 3. 3 Robocode IDE  Campo de Batalha  Editor de Robôs
  • 5. 5 Anatomia de um Robô  O robô tem um canhão giratório e acima dele há um radar giratório.  O robô, o canhão e o radar podem girar independentemente a qualquer momento.  Por padrão, eles estão alinhados de acordo com a direção do movimento do robô.  Por padrão, o radar movimenta-se em conjunto com o canhão. Veículo Canhão Radar
  • 6. 6 Restrições de um Robô ➔ Energia  Utilizada nas operações do Robô;  No disparo, pode ser definida a quantidade de energia utilizada;  É recuperada quando acerta-se outro robô. ➔ Calor  Um canhão só dispara quando seu calor estiver em zero. O calor gerado é proporcional à potência do disparo.
  • 7. 7 Comportamentos de um Robô  Vários métodos estão disponíveis na classe Robot.
  • 8. 8 Movimentação do Robô  turnRight(double degree) / turnLeft(double degree)  Giram o robô de acordo com o grau especificado.  ahead(double distance) / back(double distance)  Movem o robô de acordo com a distância especificada em pixels;  Finalizados quando o robô esbarra numa parede ou em outro robô.  turnGunRight(double degree) / turnGunLeft(double degree)  Giram o canhão, independente do veículo.  turnRadarRight(double degree) / turnRadarLeft(double degree)  Giram o radar, independente o canhão e do veículo.
  • 9. 9 Movimentação do Robô  Quando o robô gira, o canhão e o radar também giram, a não ser que um dos seguintes métodos seja usado:  setAdjustGunForRobotTurn(boolean flag) • Se flag for true, gira o canhão junto com o veículo.  setAdjustRadarForRobotTurn(boolean flag) • Se flag for true, gira o radar junto com o veículo.  setAdjustRadarForGunTurn(boolean flag) • Se flag for true, gira o radar junto com o canhão.
  • 10. 10 Informações sobre o Robô  getX() / getY()  Obtém a coordenada atual do robô.  getHeading() / getGunHeading() / getRadarHeading()  Obtém a direção atual do robô, canhão ou radar em graus.  getBattleFieldWidth() / getBattleFieldHeight()  Obtém as dimensões do campo de batalha.
  • 12. 12 Disparo  Cada robô inicia com um nível de energia padrão e é destruído quando seu nível de energia atinge zero.  Ao fazer um disparo, o robô pode usar até 3 unidades de energia. Quando mais energia usada no disparo, mais danos causará ao robô atacado.  fire(double power) / fireBullet(double power)  Usados para fazer um disparo com a energia especificada.  O método fireBullet retorna uma referência ao objeto robocode.Bullet que pode ser usada em robôs avançados.
  • 13. 13 Eventos  O radar está sempre ativo e dispara um evento se detectar a presença algum robô dentro do seu limite de alcance.  O criador de um robô pode tratar vários eventos que podem ocorrer durante a batalha.  A classe Robot já tem tratamentos padrões para todos esses eventos. Entretanto, pode-se sobrescrevê-los.
  • 14. 14 Eventos  onScannedRobot(ScannedRobotEvent e)  Método chamado quando um robô for detectado pelo radar.  onHitByBullet(HitByBulletEvent e)  Método executado quando o robô é atingido por um disparo.  onHitRobot(HitRobotEvent e)  Método executado quando o robô colide com outro robô.  onHitWall(HitWallEvent e)  Método executado quando o robô colide com uma parede.
  • 15. 15 Mais documentação  Para mais documentação, acesse a documentação Javadoc da API do Robocode que pode ser acessada do menu Help do campo de batalha ou do menu Help do editor de robôs.
  • 16. 16 Exemplo de Robô import robocode.*; public class Asimov extends Robot { public void run() { while(true) { ahead(100); turnRight(90); } } }
  • 17. 17 Exemplo de Robô package dw; import robocode.*; public class DWStraight extends Robot { public void run() { turnLeft(getHeading()); while(true) { ahead(1000); turnRight(90); } } public void onScannedRobot(ScannedRobotEvent e) { fire(1); } public void onHitByBullet(HitByBulletEvent e) { turnLeft(180); } }
  • 18. 18 Funcionamento  Cada robô é executado em sua própria thread.  Quem controla todo o sistema é a thread Battle Manager (gerenciador de batalha).
  • 19. 19 Pseudo-códido do gerenciador de batalha enquanto (a partida não terminar) faça início chamar o subsistema de rendering (geração de imagens) para desenhar robôs, disparos, explosões para cada robô faça início acordar o robô esperar o robô fazer uma chamada de bloqueio, até um tempo máximo de intervalo fim limpar a fila de eventos de todos os robôs mover disparos e gerar eventos na fila de eventos dos robôs se necessário mover robôs e gerar eventos na fila de eventos dos robôs se necessário fazer a preparação da batalha e gerar eventos na fila de eventos dos robôs se necessário esperar pela taxa de quadros se necessário fim
  • 20. 20 Robôs Avançados  Enquanto um robô comum faz apenas uma coisa de cada vez, no robô avançado você primeiro define as ações e depois pede para que sejam executadas.  Características:  Múltiplos movimentos simultaneamente;  Pode ser definida toda uma estratégia a cada tique de relógio;  Podem ser definidos eventos personalizados;  Pode ter um arquivo de dados.  Blocking x Non-Blocking  turnRight() x setTurnRight()  turnRight() x setTurnRight()  ...
  • 21. 21 Exemplo de Robô import robocode.*; public class Asimov extends AdvancedRobot { public void run() { while(true) { setAhead(100); setTurnRight(90); execute(); } } }