Este trabalho irá utilizar o software Robocode para fixar conteúdos na área de programação orientada a objetos.
A tarefa será desenvolver um conjunto de robôs com diversas capacidades, variando em complexidade de implementação.
Será necessário instalar o software Robocode, que está disponível em
http://robocode.sourceforge.net/.
As atividades serão desenvolvidas em 3 partes.
- Em uma primeira tarefa, você deve desenvolver os seguintes robôs:
- Caminhador1. Se movimenta 100 pixels a cada rodada, e quando atingir uma parede reverte a direção.
- Caminhador2. Se movimenta até o centro do campo. Quando estiver no centro, iniciar um movimento em círculo de aproximadamente 150 pixels de raio.
- Caminhador3. Se movimenta até o centro do campo, e uma vez no centro escolher randomicamente uma direção entre 0 e 360o e se deslocar sobre esta linha até atingir a parede. Quando atingir a parede, voltar para o centro do campo.
- Seguidor. Segue os movimentos do primeiro inimigo detectado.
- Atirador1. Ficar parado. Rotacionar a torre. Quando encontrar um inimigo, atire nele.
- Atirador2. Ficar parado. Rotacionar a torre. Quando encontrar um inimigo, atire com potência proporcional a distância do seu inimigo.
- A segunda tarefa será desenvolver um robô com capacidade de competição. O seu robô deve ser capaz de competir com os robôs Walls, Corners, Crazy, Fire, Tracker, Trackfire e Spinbot, pré-implementados pelo Robocode. Para isso, você deve projetar as ações desejadas para seu robô relacionadas com:
- Movimento: qual a sua estratégia para movimento do robô?
- Seleção de alvos: como você pretende encontrar os outros robôs?
- Tiro: em que circunstâncias você deve atirar nos outros robôs?
Você deve indicar quais dos robôs podem ser vencidos pelo seu, observando os resultados em 10 rodadas (o Robocode já fornece este resultado).
- A terceira tarefa será indicar quais os conceitos de orientação a objetos foram necessários para a implementação do Robocode. Particularmente, você deve responder as seguintes perguntas:
- Como o Robocode implementa as chamadas a eventos (ex. onHitByBullet(), onHitRobot(), OnHitWall()) ?
- Onde está o código que atualiza os desenhos na tela? Porque você não teve que se preocupar com isso?
- Como foram utilizadas classes abstratas, métodos abstratos e interfaces na implementação?
- Como foram utilizadas Threads na implementação do Robocode? Qual o reflexo na implementação de seu robô?
Este trabalho pode ser desenvolvido por equipes de até dois alunos.
O código deve ser desenvolvido pela equipe. No entanto, admite-se que sejam utilizado trechos de códigos de outros, desde que a origem seja citada e o trecho copiado represente menos de 50% do total. Cópias simples serão avaliadas com grau zero (Plágio e Direito do Autor no Universo Acadêmico (PUCRio)).
Dicas:
- Os métodos ahead(double distance) e back(double distance) avança ou retrocede o robô em uma distância medida em pixels.
- Os métodos turnLeft(double degrees) e turnRight(double degrees) vira o corpo do robô em um certo número de graus.
- Os métodos turnGunLeft(double degrees) e turnGunRight(double degrees) vira a arma do robô em um certo número de graus.
- Os métodos turnRadarLeft(double degrees) e turnRadarRight(double degrees) vira o radar do robô em um certo número de graus.
- A especificação das classes e métodos está disponível em http://robocode.sourceforge.net/docs/robocode/
- Uma série de tutoriais sobre o Robocode pode ser encontrado em http://robowiki.net/wiki/Robocode_Basics