MC46 ROBOCODE - Robôs de Combate em Java 02/06/2014 ROBOCODE http://robocode.sourceforge.net/ Fernando Cardeal e Liojes Carneiro Projeto ROBOCODE Características Importantes Criado em Setembro de 2000 por Mathew Nelson, Engenheiro de Software da AlphaWorks/ IBM; O projeto atualmente fica hospedado na SourceForge. Interessante para ensinar o paradigma de Orientação a Objetos. Divertido para programar seus próprios jogos. O Campo de Batalha Detalhes do Campo de Batalha SECITEC 2013 - IFBA Aprendizagem de Orientação a Objetos: Classes; Objetos – Instâncias de classes; Eventos; Envio de mensagens. Utilização de Inteligência Artificial, se desejado. 1 MC46 ROBOCODE - Robôs de Combate em Java Anatomia de um Robô 02/06/2014 Anatomia do Robô - descrição Veículo – movimenta o robô Canhão – Adivinhe!!! Radar – Localiza outros robôs no campo de batalha. Pode se movimentar em conjunto com o canhão ou de forma independente. Características do Robô Energia: Placar final de uma batalha de 5 rounds Utilizada para operar o robô: movimentar e atirar; Gasta quando se movimenta ou atira; Recuperada quando acerta outro robô; Começa em 100. Quando chega a zero, o robô é eliminado da rodada. Calor: Quando o canhão é disparado ele aquece; Próximo tiro só é possível quando o calor estiver em zero. Quanto maior a potência do tiro, maior o calor gerado. Explicação da pontuação Total Score: total de pontos; Survival: 50 pontos toda vez que um inimigo morre (e o seu não, é claro); Survival Bonus: 10 vezes o número de inimigos; No exemplo: 5 rodadas * 3 inimigos * 10 = 150. Bullet damage: 1 ponto a cada dano no inimigo. Bullet bonus: 20% do dano causado ao inimigo SE FOI VOCÊ que o matou. Ram Damage: 2 pontos a cada dano de colisão no inimigo. Ram bonus: 30% do dano por colisão. SECITEC 2013 - IFBA Criando uma batalha Clicar em Battle New (ou CTRL-N) 2 MC46 ROBOCODE - Robôs de Combate em Java Criando uma batalha Configurações Para configurar a Plataforma Robocode Para visualizar o radar scan Opções da Batalha Tela com todos os robôs disponíveis. Configurando o ROBOCODE 02/06/2014 Para visualizar o efeito do radar procurando os inimigos, selecione VISIBLE SCAN ARCS SECITEC 2013 - IFBA Criando um Robô Clicar em Robot Source Editor (CTRL-E) 3 MC46 ROBOCODE - Robôs de Combate em Java Criando um Robô File New Robot (CTRL N) Criando um robô Digite o nome do robô – sem espaços Programe o seu robô! Só permite salvar após alterar package aula; import robocode.*; //import java.awt.Color; public class Teste extends Robot { public void run() { while(true) { ahead(100); turnGunRight(360); back(100); turnGunRight(360); } } public void onScannedRobot(ScannedRobotEvent e) { fire(2); } public void onHitByBullet(HitByBulletEvent e) { back(10); } public void onHitWall(HitWallEvent e) { back(20); } Criando um robô Digite o nome do pacote (package) para evitar conflitos com outros nomes. Examinando o robô 02/06/2014 } SECITEC 2013 - IFBA 4 MC46 ROBOCODE - Robôs de Combate em Java Primeira vez que cria o pacote Na primeira vez que cria o pacote, o ROBOCODE pede para criar a pasta. Confirme. Para testar o robô Adicione o seu robô e o robô TARGET (alvo) 02/06/2014 Compilando o robô Compiler Compile (CTRL B) Testando o Robô Depois inclua outros Robôs na batalha. Sugestões: Walls, TrackFire e outros. Eventos onScannedRobot(ScannedRobotEvent e) – chamado sempre que outro robô for detectado pelo radar. onHitRobot(HitRobotEvent e) – chamado quando colide com outro robô. onHitByBullet(HitByBulletEvent e) – chamado quando é atingido por uma bala. onHitWall(HitWallEvent e) – chamado quando atinge uma parede. SECITEC 2013 - IFBA 5 MC46 ROBOCODE - Robôs de Combate em Java Comandos para importar os eventos import robocode.HitRobotEvent; import robocode.Robot; import robocode.ScannedRobotEvent; import robocode.HitByBulletEvent; import robocode.WinEvent; import static robocode.util.Utils.normalRelativeAngleDe grees; 02/06/2014 Trocando as cores do robô É possível personalizar as cores: setBodyColor(Color.black); // corpo setGunColor(Color.blue); // canhão setRadarColor(Color.white); // radar setBulletColor(Color.cyan); // bala setScanColor(Color.cyan); // cor do facho do radar import java.awt.*; Comandos de movimento Comandos de tiro e radar ahead(x); x pixels para a frente back(x); x pixels para trás turnRight(90); 90º para a direita ou quanto desejar turnLeft(45); 45º para a esquerda Comandos de Informação Examinando outros robôs getX() e getY() - obtêm a posição do robô getHeading() – direção para onde o robô segue getGunHeading() – direção do canhão getRadarHeading() – direção do radar getBattleFieldWidth() – largura da arena getBattleFieldHeight() – altura da arena SECITEC 2013 - IFBA fire(x); x tiros consecutivos scan(); procure inimigos turnGunRight(w); gire a arma para direita w graus turnGunLeft(w); gire a arma para esquerda w graus É possível abrir os robôs exemplo para ver como funcionam e estudar a forma de utilizar os eventos e métodos vistos. No Editor de Robôs: File Open 6 MC46 ROBOCODE - Robôs de Combate em Java Alguns links interessantes 02/06/2014 PRONTO! Central do Robocode: http://robocode.sourceforge.net/ Robô wiki Segredos dos Mestres do Robocode http://robowiki.net/ Experimente vários robôs; Faça cópias; Altere a estratégia; Teste! Faça o Melhor, destrua os outros! http://www.ibm.com/developerworks/library/j- tipstrats/index.html A Competição Equipes de 1 a 3 pessoas 4 grupos de 3 equipes MicroBot (código de até 750 bytes) 45 minutos para programação do robô Recolhimento dos robôs Confrontos da fase de grupos COMPETIÇÃO Grupos: Sorteio dos grupos Equipes batalham entre si Cada batalha terá apenas 3 rounds Os 2 primeiros de cada grupo avançam Quartas de final e Semifinal 20 minutos para ajustar os robôs Os vencedores de cada batalha avançam Cada batalha terá 3 rounds Final A batalha terá 5 rounds SECITEC 2013 - IFBA 7