Prof. Alexandre Monteiro Baseado na apresentação de Diego Queiroz

Slides:



Advertisements
Apresentações semelhantes
Atividade 5 Objetivos: Conhecer as regras CSS “width”, “margin-left:auto” e “margin-left:right” e verificar que elas não funcionam no IE a menos que coloquemos.
Advertisements

Programação em Java Prof. Maurício Braga
Apostila para o 7º ano Profª Yandra
Eduardo Carlos Hamerski Jr 09/05/2002
Introdução ao JavaScript JavaScript 02. Propriedade onMouseOver Observe o SCRIPT abaixo: link O.
Encontro Construindo um Web Site com o Nvu
Professor Ismael H F Santos –
Introdução a Linguagem JAVA
Uso do Eclipse/SourceForge Paradigmas de Linguagem de Programação
Técnicas de Programação I
Portfólio de matemática
Introdução ao Teste Unitário com JUnit
JAVA: Conceitos Iniciais
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Princípios de Orientação à Objetos
Programação II Prof.: Bruno Rafael de Oliveira Rodrigues.
Programação Avançada Prof. Natalia Castro Fernandes
Linguagem de Programação II Parte IX
Prof. Guilherme Alexandre Monteiro Reinaldo Recife
Interpretador Python.
Linguagem de Programação JAVA
Vetores e movimento em duas dimensões
Computação Gráfica – Visibilidade
Prof. Alexandre Monteiro Recife
Prof. Alexandre Monteiro Recife
Professor: Márcio Amador
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Programação Orientada à Objetos
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Tutorial de Utilização.
PROJETO LEGO MINDSTORMS EV3
Programação I Laboratório I
Prof. Guilherme Alexandre Monteiro Reinaldo Recife
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Como criar uma Classe e.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
PROGRAMAÇÃO INICIANTE EV3 LIÇÃO #3
Build the Best Destroy the Rest!!! Introdução I Torneio Robocode.
Arquitetura de Desenvolvimento Web MVC vs. Three Tiers
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
09/04/2017 Linux Comandos básicos.
Analisador Léxico Prof. Alexandre Monteiro
MINI CURSO J2ME Vinícius Maran SEMINÁRIO REGIONAL DE INFORMÁTICA 2008.
Transações Concorrentes
Análise Léxica Prof. Alexandre Monteiro
Introdução ao aplicativo Lync da Windows Store Lync 2013.
OMNeT++.
1 Características do Projeto Web Prof. Alexandre Monteiro Recife.
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Hibernate Mapeamento Objeto-Relacional Aula Prática I
Idéia tirada do site “ photoshop-dragon.com”
Robocode “Build the best, destroy the rest! ”
Prof. Msc Roberta Andrade
Backup DE DADOS DO USUÁRIO. Cópia de segurança dos dados no computador, alguns fáceis e outros trabalhosos, de acordo com a quantidade de dados. Utilizado.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
1 Trabalho Extra SIG Prof. Guilherme Alexandre Monteiro Reinaldo Recife.
Aglets.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
1 Uso do Eclipse/CVS na cadeira Paradigmas de Linguagem de Programação Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt) Euclides Neto (enan) Prof.:
NA AULA DE HOJE VEREMOS A TRANSIÇÃO ENTRE ACTIVITYS. CRIE UM PROJETO COM O NOME TRANSICAO, A SEGUIR MONTE SUA ACTIVITY COMO A ABAIXO :
CORBA. Configurando IDEs –MICO No WindowsNo Windows –Visual Studio 2005 No LinuxNo Linux –Eclipse CDT.
Aula Prática 1 Aula de Apresentação Monitoria
HTML Prof. Geyson Silva.
Ferramentas para Sistema Web Sistemas de Informação Aula 9 – 08/05/2013.
VELOCIDADE OU ACELERAÇÃO?
Utilizando subversion como controle de versão
1º e 2º ano XII Olimpíadas das Cores Emílio Miotti.
Impulso e quantidade de movimento
Lançamentos e Arremessos
Java Básico Lab Ruddá Beltrão | Cristian Costa.
Implementação Orientada a Objetos – Aula 02 Introdução ao Java Prof. Danielle Martin Universidade de Mogi das Cruzes.
Unity 3D Inteligência Artificial
Transcrição da apresentação:

Prof. Alexandre Monteiro Baseado na apresentação de Diego Queiroz Robocode “Build the best, destroy the rest!” Prof. Alexandre Monteiro Baseado na apresentação de Diego Queiroz

Contatos Prof. Guilherme Alexandre Monteiro Reinaldo Apelido: Alexandre Cordel E-mail/gtalk: alexandrecordel@gmail.com greinaldo@fbv.edu.br Site: http://www.alexandrecordel.com.br/fbv Celular: (81) 9801-1878

Sumário Introdução; Instalando; Como funciona o Robocode; Como criar um robô; Alguns comandos; Alguns métodos; Projeto da disciplina; Exercício.

Introdução O que é o Robocode: Robocode foi criado como um jogo de programação cujo objetivo é desenvolver um tanque de guerra (em Java ou .NET) para combater outros tanques em uma arena. As batalhas são executadas em tempo real e com representação gráfica.

Instalação O download da versão atual está disponível em (ou google robocode, primeiro link) Abra como projeto em uma IDE

Como funciona o Robocode

Robôs, Robôs Everywhere Estrutura: Canhão Radar Corpo

Anatomia de um Robô Um robô consiste de três partes principais: Corpo - Carrega o canhão e o radar e permite mover para frente, para trás e girar o tanque no sentido horário e anti-horário. Canhão - Está montado no corpo do tanque e dispara balas de energia com força variável além de poder girar, também, no sentido horário e anti-horário. Radar - Está montado na arma e é usado para escanear por robôs enquanto o robô se move. Ele pode girar em ambos os sentidos e gera eventos onScannedRobot quando detecta algum robô.

Tipos de Robô Existem 4 tipos básicos de robô: Junior Robot - Usado para propósitos educacionais. Robot - Robô de implementação mais simples, com várias funcionalidades prontas, possui todas as partes principais. AdvancedRobot - Robô que permite desenvolvimento mais complexo, alterando partes implementadas de maneira simples no Robot. Também possui as três partes básicas. Droid - Droids são robôs que não possuem radar, precisando de orientação de outro robô para atirar de forma mais eficiente. Recebem um bônus de energia por não possuírem radar (20 unidades a mais de energia).

One Does Not Simply Win The Battle

Turnos O Robocode é baseado em turnos, porém é possível ajustar a quantidade de turnos por segundo aparentando tempo real. Geralmente ele é executado de 30 a 40 turnos por segundo. Em um turno um Robot pode executar apenas uma ação qualquer. Um AdvancedRobot pode executar várias ações em um turno.

Sistema de Coordenadas O sistema de coordenadas utilizado pelo Robocode é o cartesiano. O sistema de ângulos é orientado ao norte.

Tempo e Distância O tempo medido em ticks e cada robô recebe um tick por turno. A distância é medida em pixels, mas com precisão double, logo é possível mover frações de pixel.

Movimento Robôs aceleram a 1px/turno2 e desaceleram a 2px/turno2. Velocidade é dada por v = at, mas nunca pode exceder 8px/turno.

Rotação A taxa máxima de rotação dos robôs é definida por: (10 − 0.75 abs(velocidade)) graus/turno, ou seja, quanto mais rápido o tanque anda, mais demora para rodar. A taxa máxima de rotação do canhão é de 20 graus/turno. A taxa máxima de rotação do radar é de 45 graus/turno.

Balas O dano causado pelas balas é dado por: 4*firepower. Se o firepower > 1, então um dano extra é causado: 2*(power − 1). A velocidade da bala é dada por: 20 - 3*firepower e não é influenciada pela velocidade do tanque. Quando o canhão dispara, é gerado calor igual a 1 + firepower/5. E se esse valor for maior que 0, o canhão não pode atirar novamente até que esfrie. Todas as armas iniciam com algum calor no início de cada round. A energia recuperada pelo tanque ao atingir um oponente é igual a 3*firepower .

Loop de Processamento do Simulador A ordem em que o Robocode roda é a seguinte: Robocode pinta o estado atual na tela. Todos os robôs executam seus códigos até que tomam algum ação (e então são pausados). O tempo é atualizado (time = time + 1). Todas as balas se movem e checam por colisão e isso inclui balas que acabaram de ser atiradas.

Loop de Processamento do Simulador A ordem em que o Robocode roda é a seguinte: Todos os robôs se movem (canhão, radar, direção, aceleração, velocidade e distância, nessa ordem). Todos os robôs que podem detectar algo através do radar recebem os sinais de radar agora (também recebem mensagens do time, se existirem). Todos os robôs são retirados do pause e podem tomar novas ações. Cada robô processa sua fila de eventos.

Como criar um Robô Robot >> Editor Duas opções: - Criar diretamente pelo editor do robocode. - Usar uma IDE (Eclipse, Netbeans, etc). Criando pelo editor: Robot >> Editor File >> New >> Robot Nome do robô (classe) Nome do pacote

Editor do Robocode

Editor do Robocode - Compile Após o robô pronto é hora de compilar: File >> Save Compiler >> Compile Agora é só brincar com ele . Battle >> New Em Available Robots -> Packages escolha o pacote com nome que foi criado. Selecione o robô criado e um (ou mais) adversários. TONIGHT, WE DINE IN HELL!! START BATTLE! !!

Robocode no Eclipse - Projeto File >> New >> Project >> Java Project Dê o nome do projeto. NEXT!! (ou se virem no build path depois) Libraries >> Add External JARs Pasta robocode >> libs >> robocode.jar + >> Javadoc location: (None) >> Edit... Browser >> Pasta robocode >> javadoc Ok >> Ok >> Finish

Robocode no Eclipse - Projeto Sistemas Inteligentes – IF684 Introdução ao Robocode © 2013 – Arley Ristar

Robocode no Eclipse - Criar Robô New >> Class Superclass: robocode.Robot (Ou AdvancedRobot) Lembram de Thread? Pois é... Criem um run() { } para indicar o que o robô deve ficar executando. Quanto mais “inteligente” teu robô for, melhor. Os métodos que recebem eventos (normalmente iniciados em ‘on’) são ótimos para a criação das regras de combate.

Alguns Comando dos Robôs ahead(100); → Move 100 pixels turnGunRight(180); → Gira a arma 180º back(100); → Move 100 pixels (para trás) turnLeft(90); → Gira o robô em 90 turnRadarRightRadians(0.5) → Já deu pra entender? setFire(Rules.MAX_BULLET_POWER) fire(1) Observem a documentação (ou o ctrl+space mesmo) e brinquem com os comandos.

Alguns métodos para tratar eventos Para criar regras pode-se sobrescrever alguns métodos que são chamados quando ocorre algum evento do tipo que estão recebendo. onHitByBullet → Acertado por uma bala. onScannedRobot → Quando achar um robô no radar. onRoundEnded → Quando acabar um round. Olhem a documentação e criem uma boa estratégia (e que faça sentido).

Usando Robô Criado no Eclipse Dois modos: No robocode: Options >> Preferences >> Development Options >> Add e coloca o caminho até a pasta do projeto.

Usando Robô Criado no Eclipse Copiar o .class (ou um jar) do robô para a pasta robots. Depois disso é só usar como qualquer outro robô . Para quem não quiser usar o editor do robocode nem uma IDE, é só escrever um java (usando algum editor de texto, como o vim) e executar um ‘javac‘ copiando (ou linkando) o class para a pasta robots.

Projeto da Disciplina A competição realizada na disciplina terá duas modalidades: A equipe possui um Robot líder(Primeiro robô registrado) e 4 droids (Decisão centralizada). Equipe possuindo 5 Robots (Decisão descentralizada). O objetivo de cada competição é destruir o time adversário, o sistema de scoring utilizado será o mesmo do robocode.

Exercício Crie um Robô Kamikaze :P. Quando ele detectar um robô ele se move (e o canhão também) em direção a esse robô. Só atire quando achar um robô. Defina o poder de fogo de acordo com a distância do outro robô (Fica a critério de vocês escolher como fazer isso). Quanto mais longe, menor o poder de fogo. Se algum adversário morrer antes dele, print algo e realize algum comando da sua escolha. Fazer isso AGORA!

Exercício 2 Com o exercício anterior completo é hora de aumentar a complexidade (mesmo que não faça tanto sentido). Quando a Energia estiver em menos de 10, faça o robô parar de atirar e mover o canhão e só andar em direção ao adversário. Quando atingir um adversário, se a energia dele for maior que 2 vezes a sua energia, ele perde as esperanças e muda a cor para vermelho, se não continua se movendo em direção ao adversário.