Your SlideShare is downloading. ×
Batalhando e Aprendendo com Robocode Conheça a ti e ao teu inimigo. - Zun Tzu
Agenda <ul><li>Objetivo </li></ul><ul><li>Ensino de Linguagens </li></ul><ul><li>Robôs em Java </li></ul><ul><li>Robocode ...
Objetivo <ul><li>Diversão e Embasamento em Programação OO </li></ul><ul><li>Ferramenta que facilita o aprendizado do parad...
O Ensino de Linguagens Pneus e Tartarugas
Ensino de Linguagens <ul><li>No início era como trocar um pneu: </li></ul><ul><ul><li>Abre a porta </li></ul></ul><ul><ul>...
Ensino de Linguagens <ul><li>LOGO: A linguagem da tartaruguinha </li></ul><ul><ul><li>Com uma tartaruga controlada por um ...
Ensino de Linguagens <ul><li>Robocode: </li></ul><ul><ul><li>Através de resultados visuais, é possível observar as seguint...
Robôs em Java Robôs de verdade mesmo, não virtuais :-)
LeJOS: Java em Lego <ul><li>Projeto Open-Source que possibilitou uso de Java em controladores RCX. </li></ul>
Tommy <ul><li>Participou do DARPA Grand Challenge 2005 </li></ul><ul><li>Usa a tecnologia PRI-MAX que é desenvolvida total...
Java onde nenhuma outra chegou <ul><li>Spirit e Opportunity </li></ul><ul><li>Robôs que estão atualmente em Marte possuem ...
Robocode Que comecem os jogos!
Robocode: Uma História <ul><li>Desenvolvido pela alphaWorks por Mathew Nelson. Iniciado em Setembro/2000. </li></ul><ul><l...
Objetivos <ul><li>Prova da performance de Java para o desenvolvimento de jogos. </li></ul><ul><li>Ambiente de aprendizado ...
O Campo de Batalha
Heading
Motor do Robocode
Robocode Conceitos Básicos
A Anatomia de um Robô
A Anatomia de um Robô <ul><li>Veiculo </li></ul><ul><ul><li>Provê movimento e rotação ao robô </li></ul></ul><ul><li>Canhã...
Restrições do Robô <ul><li>Energia </li></ul><ul><ul><li>Utilizado nas operações do robô </li></ul></ul><ul><ul><li>No dis...
Comandos do Robô <ul><li>turnRight(double degree), turnLeft(double degree) </li></ul><ul><ul><li>vira o robô. </li></ul></...
Ajustes de movimento do Robô <ul><li>setAdjustGunForRobotTurn(boolean flag) </li></ul><ul><ul><li>se verdadeiro, vira o ca...
Eventos <ul><li>onScannedRobot(ScannedRobotEvent) </li></ul><ul><ul><li>método chamado quando um robô foi detectado pelo r...
Obtendo Informações <ul><li>getX(), getY() </li></ul><ul><ul><li>coordenada corrente do robô  </li></ul></ul><ul><li>getHe...
Meu Primeiro Robô :-) <ul><li>import robocode.*; </li></ul><ul><li>public class Asimov extends  Robot  { </li></ul><ul><ul...
Demonstração Programando o Asimov
Robôs Avançados Barba, bigode e cabelo ao mesmo tempo
Robôs Avançados <ul><li>Enquanto um robô comum faz apenas uma coisa de cada vez, no robô avançado você primeiro define as ...
Blocking vs. Non-Blocking <ul><li>turnRight() </li></ul><ul><li>turnLeft() </li></ul><ul><li>turnGunRight() </li></ul><ul>...
Meu Segundo Robô :-O <ul><li>import robocode.*; </li></ul><ul><li>public class Asimov2 extends  AdvancedRobot  { </li></ul...
Demonstração Programando o Asimov Avançado
Equipes Tropa!!! Atacar!!!
TeamBot e Droid <ul><li>Existe a possibilidade de criar um time onde você possui um Robô líder que envia comandos aos robô...
Demonstração MyFirstTeam e MyFirstDroid
A Nossa Batalha Mãos a obra!!!
Pontuação <ul><li>Survival: 50 pontos toda vez que um inimigo morre. </li></ul><ul><li>Survival bonus: 10 vezes o número d...
Regras do Jogo <ul><li>Tipo de competição: Melee </li></ul><ul><li>Número de rounds: 7 </li></ul><ul><li>Tipo de Robô: Com...
Links <ul><li>Robocode Central: </li></ul><ul><ul><li>http://robocode.sourceforge.net </li></ul></ul><ul><li>Robocode Repo...
Upcoming SlideShare
Loading in...5
×

Batalhas com Robocode

6,093

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,093
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Batalhas com Robocode"

  1. 1. Batalhando e Aprendendo com Robocode Conheça a ti e ao teu inimigo. - Zun Tzu
  2. 2. Agenda <ul><li>Objetivo </li></ul><ul><li>Ensino de Linguagens </li></ul><ul><li>Robôs em Java </li></ul><ul><li>Robocode </li></ul><ul><ul><li>Histórico </li></ul></ul><ul><ul><li>Conceitos Básicos </li></ul></ul><ul><ul><li>Robôs </li></ul></ul><ul><ul><li>Robôs Avançados </li></ul></ul><ul><ul><li>Times </li></ul></ul><ul><li>Batalha entre os presentes </li></ul>
  3. 3. Objetivo <ul><li>Diversão e Embasamento em Programação OO </li></ul><ul><li>Ferramenta que facilita o aprendizado do paradigma Orientado a Objetos </li></ul>
  4. 4. O Ensino de Linguagens Pneus e Tartarugas
  5. 5. Ensino de Linguagens <ul><li>No início era como trocar um pneu: </li></ul><ul><ul><li>Abre a porta </li></ul></ul><ul><ul><li>Acha o pneu furado </li></ul></ul><ul><ul><li>Pega o macaco </li></ul></ul><ul><ul><li>Levanta o carro </li></ul></ul><ul><ul><li>Retira pneu </li></ul></ul><ul><ul><li>Pega estepe </li></ul></ul><ul><ul><li>Põe estepe </li></ul></ul><ul><ul><li>Baixa o carro </li></ul></ul>
  6. 6. Ensino de Linguagens <ul><li>LOGO: A linguagem da tartaruguinha </li></ul><ul><ul><li>Com uma tartaruga controlada por um pequeno algoritmo, era possível observar na tela o resultado da programação. </li></ul></ul><ul><li>to spiral :size </li></ul><ul><ul><li>if :size > 30 [stop] </li></ul></ul><ul><ul><li>fd :size rt 15 </li></ul></ul><ul><ul><li>spiral :size * 1.02 </li></ul></ul><ul><li>end </li></ul><ul><li>spiral 10 </li></ul>
  7. 7. Ensino de Linguagens <ul><li>Robocode: </li></ul><ul><ul><li>Através de resultados visuais, é possível observar as seguintes características da OO: </li></ul></ul><ul><ul><ul><li>Classes </li></ul></ul></ul><ul><ul><ul><li>Instância de classe </li></ul></ul></ul><ul><ul><ul><li>Eventos </li></ul></ul></ul><ul><ul><ul><li>Sobre-escrita </li></ul></ul></ul><ul><ul><ul><li>Envio de mensagens </li></ul></ul></ul><ul><ul><li>Pode-se inclusive utilizar de I.A. </li></ul></ul>
  8. 8. Robôs em Java Robôs de verdade mesmo, não virtuais :-)
  9. 9. LeJOS: Java em Lego <ul><li>Projeto Open-Source que possibilitou uso de Java em controladores RCX. </li></ul>
  10. 10. Tommy <ul><li>Participou do DARPA Grand Challenge 2005 </li></ul><ul><li>Usa a tecnologia PRI-MAX que é desenvolvida totalmente em Java pela Perrone Robotics. </li></ul>
  11. 11. Java onde nenhuma outra chegou <ul><li>Spirit e Opportunity </li></ul><ul><li>Robôs que estão atualmente em Marte possuem JVM's embutidas com Real Time Java. </li></ul>
  12. 12. Robocode Que comecem os jogos!
  13. 13. Robocode: Uma História <ul><li>Desenvolvido pela alphaWorks por Mathew Nelson. Iniciado em Setembro/2000. </li></ul><ul><li>Atualmente é um projeto hospedado no SourceForge. </li></ul>
  14. 14. Objetivos <ul><li>Prova da performance de Java para o desenvolvimento de jogos. </li></ul><ul><li>Ambiente de aprendizado das seguintes tecnologias: </li></ul><ul><ul><li>Orientação à Objetos </li></ul></ul><ul><ul><li>Inteligência Artificial </li></ul></ul><ul><ul><li>Java </li></ul></ul><ul><li>Aprender OO torna-se divertido e desafiante. </li></ul>
  15. 15. O Campo de Batalha
  16. 16. Heading
  17. 17. Motor do Robocode
  18. 18. Robocode Conceitos Básicos
  19. 19. A Anatomia de um Robô
  20. 20. A Anatomia de um Robô <ul><li>Veiculo </li></ul><ul><ul><li>Provê movimento e rotação ao robô </li></ul></ul><ul><li>Canhão </li></ul><ul><ul><li>Serve para dar tiros nos outros robôs (dããã) </li></ul></ul><ul><li>Radar </li></ul><ul><ul><li>Utilizado para localizar demais robôs na arena </li></ul></ul><ul><ul><li>Movimenta-se em conjunto com o canhão ou independentemente. </li></ul></ul>
  21. 21. Restrições do Robô <ul><li>Energia </li></ul><ul><ul><li>Utilizado nas operações do robô </li></ul></ul><ul><ul><li>No disparo, pode-se ser definido a quantidade de energia utilizada </li></ul></ul><ul><ul><li>É recuperada quando acerta-se outro robô </li></ul></ul><ul><li>Calor </li></ul><ul><ul><li>Um canhão só dispara quando o seu calor estiver em zero. O calor gerado é proporcional a potência do disparo. </li></ul></ul>
  22. 22. Comandos do Robô <ul><li>turnRight(double degree), turnLeft(double degree) </li></ul><ul><ul><li>vira o robô. </li></ul></ul><ul><li>ahead(double distance), back(double distance) </li></ul><ul><ul><li>move o robô; é finalizado caso bata numa parede. </li></ul></ul><ul><li>turnGunRight(double degree), turnGunLeft(double degree) </li></ul><ul><ul><li>vira o canhão independente do veiculo. </li></ul></ul>
  23. 23. Ajustes de movimento do Robô <ul><li>setAdjustGunForRobotTurn(boolean flag) </li></ul><ul><ul><li>se verdadeiro, vira o canhão junto com o veículo </li></ul></ul><ul><li>setAdjustRadarForRobotTurn(boolean flag) </li></ul><ul><ul><li>se verdadeiro, vira o radar junto com o veículo. </li></ul></ul><ul><li>setAdjustRadarForGunTurn(boolean flag) </li></ul><ul><ul><li>se verdadeira, vira o radar junto com o canhão. </li></ul></ul>
  24. 24. Eventos <ul><li>onScannedRobot(ScannedRobotEvent) </li></ul><ul><ul><li>método chamado quando um robô foi detectado pelo radar. </li></ul></ul><ul><li>onHitByBullet(HitByBulletEvent) </li></ul><ul><ul><li>chamado quando atingido por uma bala. </li></ul></ul><ul><li>onHitRobot(HitRobotEvent) </li></ul><ul><ul><li>chamado quando seu robô esbarram em outro. </li></ul></ul><ul><li>onHitWall(HitWallEvent) </li></ul><ul><ul><li>chamado quando atinge uma parede. </li></ul></ul>
  25. 25. Obtendo Informações <ul><li>getX(), getY() </li></ul><ul><ul><li>coordenada corrente do robô </li></ul></ul><ul><li>getHeading(), getGunHeading(), getRadarHeading() </li></ul><ul><ul><li>direção corrente </li></ul></ul><ul><li>getBattleFieldWidth() and getBattleFieldHeight() </li></ul><ul><ul><li>dimensão do campo de batalha. </li></ul></ul>
  26. 26. Meu Primeiro Robô :-) <ul><li>import robocode.*; </li></ul><ul><li>public class Asimov extends Robot { </li></ul><ul><ul><li>public void run() {// implementa Runnable! </li></ul></ul><ul><ul><ul><li>while (true) { </li></ul></ul></ul><ul><ul><ul><ul><li>this.ahead(100); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>this.turnRight(90); </li></ul></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>
  27. 27. Demonstração Programando o Asimov
  28. 28. Robôs Avançados Barba, bigode e cabelo ao mesmo tempo
  29. 29. Robôs Avançados <ul><li>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. </li></ul><ul><li>Características: </li></ul><ul><ul><li>Múltiplos movimentos simultaneamente. </li></ul></ul><ul><ul><li>Pode ser definida toda uma estratégia a cada tique do relógio. </li></ul></ul><ul><ul><li>Pode ser definidos eventos customizados. </li></ul></ul><ul><ul><li>Pode ter arquivos de dados. </li></ul></ul>
  30. 30. Blocking vs. Non-Blocking <ul><li>turnRight() </li></ul><ul><li>turnLeft() </li></ul><ul><li>turnGunRight() </li></ul><ul><li>turnGunLeft() </li></ul><ul><li>turnRadarRight() </li></ul><ul><li>turnRadarLeft() </li></ul><ul><li>ahead() </li></ul><ul><li>back() </li></ul><ul><li>setTurnRight() </li></ul><ul><li>setTurnLeft() </li></ul><ul><li>setTurnGunRight() </li></ul><ul><li>setTurnGunLeft() </li></ul><ul><li>setTurnRadarRight() </li></ul><ul><li>setTurnRadarLeft() </li></ul><ul><li>setAhead() </li></ul><ul><li>setBack() </li></ul>
  31. 31. Meu Segundo Robô :-O <ul><li>import robocode.*; </li></ul><ul><li>public class Asimov2 extends AdvancedRobot { </li></ul><ul><ul><li>public void run() { </li></ul></ul><ul><ul><ul><li>while (true) { </li></ul></ul></ul><ul><ul><ul><ul><li>setAhead(100); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>setTurnRight(90); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>execute() ; </li></ul></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul>
  32. 32. Demonstração Programando o Asimov Avançado
  33. 33. Equipes Tropa!!! Atacar!!!
  34. 34. TeamBot e Droid <ul><li>Existe a possibilidade de criar um time onde você possui um Robô líder que envia comandos aos robôs Droids. </li></ul><ul><li>Método no líder: </li></ul><ul><ul><li>broadcastMessage(Serializable msg) </li></ul></ul><ul><li>Método nos droids: </li></ul><ul><ul><li>onMessageReceived(MessageEvent event) </li></ul></ul>
  35. 35. Demonstração MyFirstTeam e MyFirstDroid
  36. 36. A Nossa Batalha Mãos a obra!!!
  37. 37. Pontuação <ul><li>Survival: 50 pontos toda vez que um inimigo morre. </li></ul><ul><li>Survival bonus: 10 vezes o número de inimigos. </li></ul><ul><li>Bullet damage: 1 ponto por ponto de dano no inimigo. </li></ul><ul><li>Bullet bonus: 20% do dano causado a um inimigo se for você quem o matou. </li></ul><ul><li>Ram damage: 2 pontos por ponto de dano ao inimigo numa colisão. </li></ul><ul><li>Ram bonus: 30% do dano. </li></ul>
  38. 38. Regras do Jogo <ul><li>Tipo de competição: Melee </li></ul><ul><li>Número de rounds: 7 </li></ul><ul><li>Tipo de Robô: Comum ou Avançado </li></ul><ul><li>Tamanho do Robô: MegaBot (sem limite) </li></ul>
  39. 39. Links <ul><li>Robocode Central: </li></ul><ul><ul><li>http://robocode.sourceforge.net </li></ul></ul><ul><li>Robocode Repository </li></ul><ul><ul><li>http://robocoderepository.com </li></ul></ul><ul><li>RoboWiki </li></ul><ul><ul><li>http://robowiki.net </li></ul></ul>

×