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 na extremidade do campo, iniciando no sentido horário. Caso encontre um obstáculo, troca o sentido.
- Caminhador2. Se movimenta para um dos vértices do quadrado e após percorre a diagonal até o vértice oposto. Depois se movimenta para um vértice vizinho, repetindo continuamente o padrão de movimento.
- Fugitivo Simples. Liga o radar e rotaciona 360 graus. Caso detecte um inimigo, se movimenta no sentido oposto.
- Atirador/Fugitivo. Liga o radar e rotaciona 360 graus. Caso detecte um inimigo, se movimenta no sentido oposto, enquanto atira nele durante a fuga.
- Fugitivo Avançado. Desenvolva uma estratégia para permitir que seu robô fuja dos inimigos, usando: (a) radar, (b) impacto de tiros e (c) posição/limite do campo.
- 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