Artigo. Introdução ao Robocode. Versão 1.0 Página 1 de 6



Documentos relacionados
I Semana de Capacitação. Robocode. Build the Best, Destroy the Rest

Curso EFA Tecnológico - Técnico de Informática e Sistemas -

Programação de Computadores e Robocode.

TT3 TUTORIAL DE ROBOCODE

Batalhando e Aprendendo com Robocode. Conheça a ti e ao teu inimigo. - Zun Tzu

Robocode Build the best, destroy the rest!

Material Didático sobre Robocode Tema: Criando Nosso Primeiro Robô

Programação Orientada a Objetos. Prof. André Gustavo Duarte de Almeida www3.ifrn.edu.br/~andrealmeida Robocode

Resumo da Matéria de Linguagem de Programação. Linguagem C

Daruma NFCe Conheça todos os passos para testar a NFCe Daruma

Introdução ao Robocode: Utilizando Java para construir e destruir robôs. Darielson A. de Souza Luis Bruno P. do Nascimento George Max P.

CRIANDO TEMPLATES E LEGENDAS

Instalando o Lazarus e outros sistemas de suporte. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Lógica de Programação

Configurar o Furbot no Eclipse

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

E-BOOK LINK DE OURO. DE: IMPÉRIO DO PTC PARA VOCÊ: CLICADOR Espalhe este ELO juntando-se ao nosso Grupo: IMPÉRIO DO PTC!

Manual de criação de envios no BTG360

MANUAL DE UTILIZAÇÃO

Manual de Inventario do coletor de dados Scan Pal 2. Importação do Arquivo Inventario.ATX

Manual Administrador - Mídia System

Nome N Série: Ferramentas

MANUAL C R M ÍNDICE. Sobre o módulo de CRM Definindo a Campanha... 3

SUMÁRIO TUTORIAL DO HQ. 2 DICAS PEDAGÓGICAS:. 2 DOWNLOAD DA INSTALAÇÃO. 2 PASSO 1 FORMULÁRIO PARA DOWNLOAD. 2 PASSO 2 ESCOLHENDO A VERSÃO.

Dicas para usar melhor o Word 2007

Criando uma mala direta com o Word 2007 em 6 Passos

TUTORIAL PARA CONFIGURAÇÃO DE SEU SITE SITES GRÁTIS

Guia Site Empresarial

MATERIAL DE APRESENTAÇÃO DO SCRATCH

Google Drive. Passos. Configurando o Google Drive

PROCEDIMENTOS PARA A INSTALAÇÃO E UTILIZAÇÃO DO APLICATIVO DE LEILÃO ELETRÔNICO DA CONAB

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

Manual de configuração do sistema

Sistema de Chamados Protega

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

EEP SENAC PELOTAS CENTRO HISTÓRICO PRONATEC/TURMA 2 PROFESSOR: NATANIEL VIEIRA DISCIPLINA: SEGURANÇA DE REDES AVIRA ANTIVIRUS

MANUAL DE INSTALAÇÃO DO SISTEMA BDS PROPOSTA

2 Orientação a objetos na prática

SCPIWeb. SCPIWebDespRec Aplicação Web para Consulta de Despesas e Receitas ( Lei Complementar nº 131 de 27 Maio de 2009 )

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

[MANUAL DE INTEGRAÇÃO PARA SITES DE MEMBROS]

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

1. Instalei o DutotecCAD normalmente no meu computador mas o ícone de inicialização do DutotecCAD não aparece.

Conexão rápida entre dois computadores em uma plataforma Linux

15 4 Operação Avançada do Sistema: Inclusão de Nota Fiscal e seus relacionamentos

Para modelos: LE32H158i, LE42H158i, LE46H158i, LE46H158z

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

TUTORIAL DE INSTALAÇÃO DA MÁQUINA VIRTUAL VIRTUALBOX COM INSTALAÇÃO DA VERSÃO DO SISTEMA OPERACIONAL UBUNTU

Programação de Computadores - I. Profª Beatriz Profº Israel

Procedimentos para Reinstalação do Sisloc

Manual de Instalação SystemFarma AutoCred

Roteiro de instalação da Linha DD

Instalando o WordPress em localhost

Criando sua primeira aplicação JAVA com o Eclipse

MANUAL DE FTP. Instalando, Configurando e Utilizando FTP

1- Requisitos mínimos. 2- Instalando o Acesso Full. 3- Iniciando o Acesso Full pela primeira vez

Manual de Utilização

Comunidade de Suporte e Feedback

COMO INSTALAR O CATÁLOGO

Programação para Dispositivos Móveis

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

Adicionando Caixas de Verificação no seu Programa Java

Projeto ECA na Escola - Plataforma de Educação à Distância

Como instalar uma impressora?

ArcSoft MediaConverter

Gerenciamento de Projetos

ROTEIRO DE INSTALAÇÃO

Manual do usuário. Softcall Java. versão 1.0.5

APOSTILA DE EXEMPLO. (Esta é só uma reprodução parcial do conteúdo)

Procedimentos para Instalação do Sisloc

Melhor do que driblar os vírus de pendrive, é não pegá-los! Mas como fazer isto?

Acessando um Banco de Dados

Manual de utilização

Administração Central. Unidade do Ensino Médio e Técnico Cetec Capacitações São Paulo

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Manual do PolicyKit-kde. Daniel Nicoletti Tradução: Luiz Fernando Ranghetti

FACULDADE DE ADMINISTRAÇÃO E NEGÓCIOS DE SERGIPE

Instalando o J2SE 5.0 JDK no Windows 2000/XP

Instruções Básicas de Instalação - BrOffice.org

- Versão 1.0 Página 1

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Manual de Utilização Utilização do PDFSam

1 UNIT Universidade do Trabalhador Dr. Abel dos Santos Nunes

Manual de padronização para envio de orçamento e pedidos por para CristalTemper.

A VERDADE SOBRE OS SOFTWARES ROBÔS DE LICITAÇÃO

SISTEMAS OPERACIONAIS LIVRES. Professor Carlos Muniz

Podemos também definir o conteúdo dos menus da página inicial. Clique em Menus, Main Menu.

Mostraremos neste artigo um exemplo de como realizar o cadastro de uma Issue em um projeto existente no portal Java.net.

Gerenciamento e Captura de Cheques - Sistec. Manual de Instalação e Importação ÍNDICE 1.INSTALAÇÃO Instalando o programa

Associação Educacional Dom Bosco Curso de Engenharia 1º ano

CAPTAÇÃO DE PEDIDOS DO REVENDEDOR

MANUAL TISS Versão

Manual Captura S_Line

CONFIGURAÇÃO MINIMA EXIGIDA:

INTRODUÇÃO AO WINDOWS

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

O nome ANT é uma sigla para another neat tool (mais uma ferramenta organizada), segundo seu autor James Duncan Davidson.

Transcrição:

Página 1 de 6 Quem não se surpreendeu ao saber que a nossa tão querida linguagem Java estaria a 55.760.000 Km da Terra em um rover (robô geólogo de exploração) vasculhando os desertos de Marte! Bem, você não terá controle sobre ele, mas poderá programar seu próprio robô em Java e duelar com outros em um incrível jogo, o Robocode. Neste artigo você irá conhecer um pouco sobre ele, com instalar e a criar seu robô. Um pouco de história O jogo foi criado pelo projeto AlphaWorks com o objetivo de ajudar pessoas a aprender Java e tornar isto divertido, o que realmente conseguiram fazer. O projeto AlphaWorks desenvolvido pela IBM, tem como objetivo trazer uma oportunidade para desenvolvedores no mundo todo experimentarem as novas tecnologias, estas tem sua origem em oito laboratórios de pesquisa espalhados pelo mundo. Depois com desenvolvedores, times de marketing e entre outros, elas são divulgadas. Após isto as tecnologias começam a chegar ao público com a disponibilização de download na internet, porém a chave para o sucesso vem com a alta motivação para IBM Research, a comunidade de desenvolvedores e grupos de produtos IBM produzirem material sobre tal assunto. Finalizando para se obter um resultado mais concreto estas tecnologias são combinadas com oportunidades. Neste ponto surgiu o Robocode. Com todo este processo o AlphaWorks criou produtos como XML Parser for Java, WebASjdbc, Jinsight (uma ferramenta para visualizar e analisar e execução de programas Java), e o Bean Machine, também conhecido como The Beanery, um ferramenta de ajuda na criação de JavaBeans, onde se pode adicionar novas capacidades e então visualizar o novo código fonte. Entre as características estão a criação de propriedades, classes BeanInfo, editores de propriedades sob medida ; o Bean Machine ainda provem um bom modo de se aprender as capacidades dos Beans através da produção de um código fácil de se ler. Instalando e conhecendo o jogo O Robocode foi criado por Mathew Nelson, o jogo é todo desenvolvido e Java, assim como os robôs que você pode programar, os quais implementam todos os recursos da linguagem de forma muito bem organizada, Mathew realmente esta de parabéns. Como o jogo é todo feito em Java para jogar você precisará ter em seu computador uma JVM que suporte Java tm 2 versão 1.3 ou superior e mais isto: Pentium II - 400, ou equivalente (Robocode deve rodar em computadores menos potentes, mas devagar) 64MB de RAM possibilidade de 32, mas sem garantias. Aproximadamente 10MB de espaço livre em disco. O jogo pode ser adquirido gratuitamente em www.alphaworks.ibm.com/robocode, com o nome de robocodesetup.jar. Depois de baixar o arquivo, descompacte-o: java jar robocode-setup.jar Após isto você está pronto para jogar, é só executar o arquivo robocode.jar. Dentro do jogo existem quatro telas que são indispensáveis. A primeira fica no menu Battle e New, onde você visualiza os robôs disponíveis (Robots) e escolhe os que irão duelar (Selected Robots), também se escolhe o número de batalhas e outras opções. Agora, se você quiser duelar com outros robôs precisará importa-los para o jogo, indo em Robot e Import downloaded robot, localize o arquivo.jar do robô e clique em Ok, se por acaso quando for iniciar uma nova batalha não achar o robô, aperte F5 para atualizar a lista. Essim como você importou outros robôs pode exportar o seu. O jogo faz isto empacotando a(s) classe(s) já compiladas (.class) em um arquivo.jar (Java Archive). Para fazer isto selecione Package robot for upload, selecione o robô que deseja ser empacotado, clique em Next. Irá aparecer uns campos para serem preenchidos com informações referentes ao seu robô, em seguida clique em Next, selecione o diretório para colocar o robô compactado, Next mais uma vez e finalize clicando em Package!. Agora só nos falta a mais importante, ou pelo menos indispensável, o editor, localizada em Robot e Editor. Se você possui algum outro editor java pode usa-lo, mas lembre se de configurar o ClASSPATH de acordo com o do robocode. Conhecendo o robô Existem três tipos de robôs, os que estendem a classe Robot, os que estendem AdvancedRobot e os que estendem Robot e implementam Droid. Sobre os terceiro caso irei falar mais adiante nos times, agora vamos nos concentrar na classe Robot, que não tem muita diferença em relação a AdvancedRobot, somente menos agilidade nos movimentos e alguns outros recursos.

Página 2 de 6 O nosso robô possui três partes, a base, a arma e o radar: Estas partes estão ligadas entre si, e quando uma se move a superior se move junto, porém isto pode ser ajustado. A arma e o radar se movem 360º em qualquer direção, bem como a base. Quando a velocidade com que um robô se move, é determinada pelo próprio jogo baseada na distância, isto também vale quando ele gira para os lados e quando move a arma ou o radar. Métodos básicos na classe Robot Uma observação presente na API do robocode: Heading ângulo absoluto em graus com 0 apontando para o topo da tela, positivo no sentido horário. 0 <= heading < 360. Bearing ângulo relativo a algum objeto da direção do robô, positivo no sentido horário. -180 < bearing <= 180

Página 3 de 6 Método Tipo de Retorno Descrição setcolors(color robotcolor, Color guncolor, Ajusta cor da base, da arma e do radar Color, radarcolor) run() O método principal de cada robô, sobrescreva-o com as ações básicas de seu robô ahead() Anda para frente back() Anda para trás turnright(double degrees) Gira o robô para a direita em graus turnleft(double degrees) Gira o robô para a esquerda em graus turnradarright(double degrees) Gira o radar para a direita turnradarleft(double degrees) Gira o radar para a esquerda turngunright(double degrees) Gira a arma para a direita turngunleft(double degrees) Gira a arma para a esquerda fire(double power) Atira uma bala, com força de 1 a 3 scan() Procura por outros robôs, normalmente chamado pelo próprio jogo getx() double Retorna a posição X gety() double Retorna a posição Y getenergy() double Retorna a sua energia getothers() int Retorna o número de oponentes na arena getvelocity() double Retorna a velocidade do robô getheading() double Retorna a direção que o robô esta apontando getgunheading() double Retorna a direção que a arma esta apontando getradarheading() double Retorna a direção que o radar esta apontando getgunheat() double Se você atira muito com sua arma ela fica muito quente, então para poder atirar novamente você deve esperar que ela de uma esfriada, este método retorna o calor da arma, se for igual a 0, pode atirar Sobre o método fire(double power), se você atingir um alvo fará dano de 4 * power e ganha 3 * power de energia, se power for maior que 1 você fará 2 * (power - 1) a mais. Quero fazer uma observação sobre os métodos para movimentar seu robô. Se você utiliza o turnright(90) ele vira em 90º para a direita, mas se usar turnrught(-90) e vira 90º para a esquerda! O mesmo acontece com os métodos back(), ahead() e com a arma e o radar. Lembra-se que eu falei que as partes do robô não precisam se mover junto com sua base, ai é que muda, por padrão o robô começa com todos como false. setadjustradarforgunturn(boolean newadjus tradarforgunturn) setadjustradarforrobotturn(boolean newadj ustradarforrobotturn) setadjustgunforrobotturn(boolean newadjus tgunforrobotturn) A classe Robot também possui alguns eventos: o radar não se move se a arma girar o radar não se move se o robô girar a arma não se move se o robô girar Todos estes métodos têm como argumento uma classe específica para o evento. Se quiser saber mais sobre elas, ou qualquer outra classe relacionada ao jogo, veja a API que vem junto com o jogo.

Página 4 de 6 Evento onwin(winevent event) onscannedrobot(scannedrobotevent event) onrobotdeath(robotdeathevent event) onhitwall(hitwallevent event) onhitrobot(hitrobotevent event) onhitbybullet(hitbybulletevent event) ondeath(deathevent event) onbulletmissed(bulletmissedevent event) onbullethitbullet(bullethitbulletevent event) onbullethit(bullethitevent event) Disparado quando... você ganha o round o radar encontra um robô outro robô morrer você colidir com a parede você colidir com outro robô for atingido você morrer você perde uma bala, atingir a parede duas balas se chocam você acerta um robô Métodos básicos na classe AdvancedRobot Os métodos para mover o robô são quase os mesmos, a diferença é que começam com setxxx(), como turnright() ficaria setturnright() e ahead() ficaria setahead().na prática a diferença para girar seu robô seria como a curva é feita, com o primeiro o robô para de andar para fazer a curva, mas no segundo faz isto andando, porém a curva fica mais aberta, ai depende de você decidir qual fica melhor para o seu robô. addcustomevent() permite criar seu próprios eventos, a partir de um objeto Condition, veja o exemplo da criação de um, onde a condição é quando a energia for igual a 20. Condition c = new Condition("perigo") public boolean test() return (getenergy() == 20); ; ; Agora nos falta adicionarmos um novo evento com esta condição. addcustomevent(c); Para capturar o evento usamos o oncustomevent(customevent evt). Observe, do objeto CustomEvent, pegamos um objeto Condition, e então pegamos o nome da condição, para decidir qual é quando temos mais de uma e tratá-la corretamente. public oncustomevent(customevent event) if ( event.getcondition().getname().equals("perigo") ) // imprime uma mensagem de aviso no console System.out.println("Cuidado, você esta morrendo"); execute() executa ações pendentes ou continua executando as que estão em processo, você irá usa-lo muito com métodos getxxx() e setxxx(), veja o evento onwin, a seguir. seteventpriority(string eventclass, int priority) serve para situações onde dois eventos são disparados ao mesmo tempo, como um onscannedrobot e um onhitbybullet, e você precisa decidir de qual o jogo ria tratar primeiro. Ele recebe dois argumentos, uma String para o evento ScannedRobotEvent, CumtomEvent,... e a prioridade do evento, que vai de 0 a 99. Criando um robô O robô que vou mostrar é bem simples, quando acha um inimigo ele o segue ou atira, dependendo de sua distância, parece que ele não faz nada, mas verão como ele pode ser uma pedra no sapato se aperfeiçoado um pouco. Vamos começar criando a estrutura básica do robô.

Página 5 de 6 // o nome do pacote não pode exceder 16 caracteres package org.rsjug.robocode; import robocode.*; // caso queira mudar a cor de seu robô... import java.awt.color; public class Vlade extends AdvancedRobot public run() public onscannedrobot(scannedrobotevent event) public onwin(winevent event) Para aqueles que não conhecem Vlade, viveu em um castelo na Transilvânia, e é uma das teorias que tenta desvendar a existência de Drácula. Vlade era conhecido pela sua habilidade de empalar pessoas. O povo do local conta que certa vez soldados iriam invadir a cidade, passando pela montanha de seu castelo, mas ele cobriu-a toda com homens empalados, assim quando os soldados virão seus amigos desta forma, voltaram como galinhas assustadas. Como virão um bom robô não precisa ter muitos métodos ou ser complexo, o segredo é conhecer bem a API e como ele se comporta! No método run() vamos mudar a cor do nosso robô e definir seu comportamento básico, que é declarado no loop while, recebendo true como parâmetro, para sempre ser executado. public run() setcolors(color.black, Color.BLACK, Color.ORANGE); while (true) seetturngunright(double.positive_infinity ); Pedimos para a arma girar e não o radar, pois se encontrarmos alguma coisa, fica mais fácil só manda-la atirar direto do que primeiro gira-la até a posição do radar, lembrando que quando se move uma parte, a superior se move junto. Agora que já definimos um comportamento para nosso robô, vamos dizer a ele o que fazer quando avistar um inimigo. Bem, ele primeiro avalia a distância, se for maior que 100, ele corre até o alvo, senão atira com força 3 se a distância for até 40, senão atira com 1. public onscannedrobot(scannedrobotevent event) // se a distancia for maior que 100 if (event.getdistance() > 100) // se vira na direçao do robô e corre! setturnright(event.getbearing()); setahead(double.positive_infinity ); else // atira if (event.getdistance() <= 40) fire(3); else fire(1);

Página 6 de 6 Se quiser deixá-lo mais agressivo, mande-o correr na direção do outro robô e atire de qualquer distância, você gasta mais balas, mas tem um melhor ataque. Vamos a comemoração! public onwin(winevent event) setadjustradarforgunturn(true); setadjustgunforrobotturn(true); while (true) setturnleft(double.positive_infinity ); setturngunright(double.positive_infinity ); setturnradarright(double.positive_infinity ); // se lembra do que falei sobre métodos setxx()? execute(); Times Bem, se você acha fácil programar um só robô, tente um time todo; isso mesmo, um time com um líder e droids, robôs sem radar comandados pelo líder e com 20 a mais de energia. Os droids sabem como atira pelo líder, ele localiza os inimigos e lhes diz suas posições, claro, com um pouco de trigonometria hehehe, pensaram que ia se ver livres dela. Neste artigo não vou me aprofundar, desta forma, se quiser criar seu time, recomendo que olhe o que vem com o jogo e visite os links da bibliografia, são ótimos. Bibliografia http://robocode.net/ http://www.alphaworks.ibm.com/robocode http://robowiki.dyndns.org/ http://groups.yahoo.com/group/robocode/ http://www.ecs.soton.ac.uk/~awo101/robocode.html http://www.robocoderepository.com Sobre o Autor Além de um estudante dedicado Matheus Martin (matheus_martin@hotmail.com) é entusiasta da linguagem Java, atualmente se dedica a plataforma J2SE, sonha com a programação para equipamentos aeroespaciais e é escoteiro até a medula. Versão do Artigo: 1.0, 16/02/2004