SlideShare uma empresa Scribd logo
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();
}
}
}

Mais conteúdo relacionado

Mais procurados

Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
Professor Samuel Ribeiro
 
HTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no htmlHTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no html
Tiago Luiz Ribeiro da Silva
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
Elaine Cecília Gatto
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
Chris Ohk
 
Clean code
Clean codeClean code
Clean code
Henrique Smoco
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
Daniel Brandão
 
Comandos CMD
Comandos CMDComandos CMD
Comandos CMD
Joao Andre Picao
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
Mateus Padua
 
Introdução ao HTML
Introdução ao HTMLIntrodução ao HTML
Introdução ao HTML
Vinícius Roggério da Rocha
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHP
Lorranna Machado
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
Jorge Ávila Miranda
 
Aula 8 - Plano de Teste.pptx
Aula 8 - Plano de Teste.pptxAula 8 - Plano de Teste.pptx
Aula 8 - Plano de Teste.pptx
AlexandreLisboadaSil
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
Rogerio R. Lima Cisi
 
PowerShell
PowerShellPowerShell
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
Professor José de Assis
 
Gestão de segurança da informação para concursos-questões CESPE 04
Gestão de segurança da informação para concursos-questões CESPE 04Gestão de segurança da informação para concursos-questões CESPE 04
Gestão de segurança da informação para concursos-questões CESPE 04
Fernando Palma
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
Jorge Ávila Miranda
 
Funções em C
Funções em CFunções em C
Funções em C
Elaine Cecília Gatto
 
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
Chris Ohk
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
Antonio Oliveira
 

Mais procurados (20)

Algoritmo - tipos de dados
Algoritmo - tipos de dadosAlgoritmo - tipos de dados
Algoritmo - tipos de dados
 
HTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no htmlHTML - Aula 01 - Estrutura básica e tags básicas no html
HTML - Aula 01 - Estrutura básica e tags básicas no html
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
Clean code
Clean codeClean code
Clean code
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Comandos CMD
Comandos CMDComandos CMD
Comandos CMD
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Introdução ao HTML
Introdução ao HTMLIntrodução ao HTML
Introdução ao HTML
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHP
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
Aula 8 - Plano de Teste.pptx
Aula 8 - Plano de Teste.pptxAula 8 - Plano de Teste.pptx
Aula 8 - Plano de Teste.pptx
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
PowerShell
PowerShellPowerShell
PowerShell
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Gestão de segurança da informação para concursos-questões CESPE 04
Gestão de segurança da informação para concursos-questões CESPE 04Gestão de segurança da informação para concursos-questões CESPE 04
Gestão de segurança da informação para concursos-questões CESPE 04
 
Aula01-JavaScript
Aula01-JavaScriptAula01-JavaScript
Aula01-JavaScript
 
Funções em C
Funções em CFunções em C
Funções em C
 
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 

Destaque

Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
Glaucio Scheibel
 
Revisitando o Robocode
Revisitando o RobocodeRevisitando o Robocode
Revisitando o Robocode
Peter Jandl Junior
 
Robocode - Aprendendo a guerrear com java !
Robocode - Aprendendo a guerrear com java !Robocode - Aprendendo a guerrear com java !
Robocode - Aprendendo a guerrear com java !
Pedro Cardoso
 
Robocode
RobocodeRobocode
Kanban
KanbanKanban
Java Y Robocode
Java Y RobocodeJava Y Robocode
Java Y Robocode
Raul Espinola
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
Regis Magalhães
 
Java 15 Jar
Java 15 JarJava 15 Jar
Java 15 Jar
Regis Magalhães
 
Pascal Tipos
Pascal TiposPascal Tipos
Pascal Tipos
Regis Magalhães
 
Java 14 Javadoc
Java 14 JavadocJava 14 Javadoc
Java 14 Javadoc
Regis Magalhães
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
Regis Magalhães
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
Regis Magalhães
 
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
Regis Magalhães
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
Regis Magalhães
 
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
Regis Magalhães
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
Regis Magalhães
 
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
Regis Magalhães
 

Destaque (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
 

Semelhante a Robocode

Robocode
RobocodeRobocode
Robocode 666
Robocode 666Robocode 666
Robocode 666
Peter Jandl Junior
 
Robocode
RobocodeRobocode
drools + robocode
drools + robocodedrools + robocode
drools + robocode
Eduardo Oliveira
 
Robocode
RobocodeRobocode
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
jonathanblacknight
 
Robocode 101
Robocode 101Robocode 101
Robocode 101
Peter Jandl Junior
 
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)
Hamilton Lima
 
Apresentação 2
Apresentação 2Apresentação 2
Apresentação 2
Anderson Luís Furlan
 
Algoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à RobóticaAlgoritmos de Percurso Aplicados à Robótica
Algoritmos de Percurso Aplicados à Robótica
Lucas Oliveira
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
Laís Lima
 
06 colisao final
06 colisao final06 colisao final
06 colisao final
David Henrique
 

Semelhante 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
 

Mais de Regis Magalhães

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
Regis Magalhães
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
Regis Magalhães
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
Regis Magalhães
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
Regis Magalhães
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
Regis Magalhães
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
Regis Magalhães
 
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
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
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
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
Regis Magalhães
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
Regis Magalhães
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
Regis Magalhães
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
Regis Magalhães
 
java 00 Introducao
java 00 Introducaojava 00 Introducao
java 00 Introducao
Regis Magalhães
 
POO Plano de Curso
POO Plano de CursoPOO Plano de Curso
POO Plano de Curso
Regis Magalhães
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
Regis Magalhães
 

Mais 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
 

Último

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 

Último (8)

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 

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