Você está na página 1de 39

Batalhando e Aprendendo com

Robocode

Conhea a ti e ao teu inimigo. - Zun Tzu

Agenda

Objetivo

Ensino de Linguagens

Robs em Java

Robocode

Histrico

Conceitos Bsicos

Robs

Robs Avanados

Times

Batalha entre os presentes

Objetivo

Diverso e Embasamento em Programao


OO
Ferramenta que facilita o aprendizado do
paradigma Orientado a Objetos

O Ensino de Linguagens

Pneus e Tartarugas

Ensino de Linguagens

No incio era como trocar um pneu:

Abre a porta

Acha o pneu furado

Pega o macaco

Levanta o carro

Retira pneu

Pega estepe

Pe estepe

Baixa o carro

Ensino de Linguagens

LOGO: A linguagem da tartaruguinha

Com uma tartaruga controlada por um pequeno


algoritmo, era possvel observar na tela o resultado
da programao.

to spiral :size
if :size > 30 [stop]
fd :size rt 15
spiral :size * 1.02
end
spiral 10

Ensino de Linguagens

Robocode:

Atravs de resultados visuais, possvel observar


as seguintes caractersticas da OO:

Classes
Instncia de classe
Eventos
Sobre-escrita
Envio de mensagens

Pode-se inclusive utilizar de I.A.

Robs em Java

Robs de verdade mesmo, no virtuais :-)

LeJOS: Java em Lego

Projeto Open-Source que possibilitou uso de


Java em controladores RCX.

Tommy

Participou do DARPA Grand Challenge 2005


Usa a tecnologia PRI-MAX que desenvolvida
totalmente em Java pela Perrone Robotics.

Java onde nenhuma outra chegou

Spirit e Opportunity
Robs que esto atualmente em Marte
possuem JVM's embutidas com Real Time
Java.

Robocode

Que comecem os jogos!

Robocode: Uma Histria

Desenvolvido pela alphaWorks por Mathew


Nelson. Iniciado em Setembro/2000.
Atualmente um projeto hospedado no
SourceForge.

Objetivos

Prova da performance de Java para o


desenvolvimento de jogos.
Ambiente de aprendizado das seguintes
tecnologias:

Orientao Objetos

Inteligncia Artificial

Java

Aprender OO torna-se divertido e desafiante.

O Campo de Batalha

Heading

Motor do Robocode

Robocode

Conceitos Bsicos

A Anatomia de um Rob

A Anatomia de um Rob

Veiculo

Canho

Prov movimento e rotao ao rob


Serve para dar tiros nos outros robs (d)

Radar

Utilizado para localizar demais robs na arena

Movimenta-se em conjunto com o canho ou


independentemente.

Restries do Rob

Energia

Utilizado nas operaes do rob

No disparo, pode-se ser definido a quantidade de


energia utilizada

recuperada quando acerta-se outro rob

Calor

Um canho s dispara quando o seu calor estiver


em zero. O calor gerado proporcional a potncia
do disparo.

Comandos do Rob

turnRight(double degree), turnLeft(double


degree)

ahead(double distance), back(double distance)

vira o rob.
move o rob; finalizado caso bata numa parede.

turnGunRight(double degree),
turnGunLeft(double degree)

vira o canho independente do veiculo.

Ajustes de movimento do Rob

setAdjustGunForRobotTurn(boolean flag)

setAdjustRadarForRobotTurn(boolean flag)

se verdadeiro, vira o canho junto com o veculo


se verdadeiro, vira o radar junto com o veculo.

setAdjustRadarForGunTurn(boolean flag)

se verdadeira, vira o radar junto com o canho.

Eventos

onScannedRobot(ScannedRobotEvent)

onHitByBullet(HitByBulletEvent)

chamado quando atingido por uma bala.

onHitRobot(HitRobotEvent)

mtodo chamado quando um rob foi detectado


pelo radar.

chamado quando seu rob esbarram em outro.

onHitWall(HitWallEvent)

chamado quando atinge uma parede.

Obtendo Informaes

getX(), getY()

getHeading(), getGunHeading(),
getRadarHeading()

coordenada corrente do rob

direo corrente

getBattleFieldWidth() and getBattleFieldHeight()

dimenso do campo de batalha.

Meu Primeiro Rob :-)


import robocode.*;
public class Asimov extends Robot {
public void run() {// implementa Runnable!
while (true) {
this.ahead(100);
this.turnRight(90);
}
}
}

Demonstrao

Programando o Asimov

Robs Avanados

Barba, bigode e cabelo ao mesmo tempo

Robs Avanados

Enquanto um rob comum faz apenas uma


coisa de cada vez, no rob avanado voc
primeiro define as aes e depois pede para
que sejam executadas.
Caractersticas:

Mltiplos movimentos simultaneamente.

Pode ser definida toda uma estratgia a cada tique


do relgio.

Pode ser definidos eventos customizados.

Pode ter arquivos de dados.

Blocking vs. Non-Blocking

turnRight()

setTurnRight()

turnLeft()

setTurnLeft()

turnGunRight()

setTurnGunRight()

turnGunLeft()

setTurnGunLeft()

turnRadarRight()

setTurnRadarRight()

turnRadarLeft()

setTurnRadarLeft()

ahead()

setAhead()

back()

setBack()

Meu Segundo Rob :-O


import robocode.*;
public class Asimov2 extends AdvancedRobot {
public void run() {
while (true) {
setAhead(100);
setTurnRight(90);
execute();
}
}
}

Demonstrao

Programando o Asimov Avanado

Equipes

Tropa!!! Atacar!!!

TeamBot e Droid

Existe a possibilidade de criar um time onde


voc possui um Rob lder que envia
comandos aos robs Droids.
Mtodo no lder:

broadcastMessage(Serializable msg)

Mtodo nos droids:

onMessageReceived(MessageEvent event)

Demonstrao

MyFirstTeam e MyFirstDroid

A Nossa Batalha

Mos a obra!!!

Pontuao

Survival: 50 pontos toda vez que um inimigo


morre.
Survival bonus: 10 vezes o nmero de inimigos.
Bullet damage: 1 ponto por ponto de dano no
inimigo.
Bullet bonus: 20% do dano causado a um
inimigo se for voc quem o matou.
Ram damage: 2 pontos por ponto de dano ao
inimigo numa coliso.
Ram bonus: 30% do dano.

Regras do Jogo

Tipo de competio: Melee

Nmero de rounds: 7

Tipo de Rob: Comum ou Avanado

Tamanho do Rob: MegaBot (sem limite)

Links

Robocode Central:

Robocode Repository

http://robocode.sourceforge.net
http://robocoderepository.com

RoboWiki

http://robowiki.net