Rocket Bots
O ano é 3024. As pessoas se tornaram um recurso muito escasso para arriscar na guerra, então o combate mudou para os robôs. Sua tarefa é construir um bot como nenhum outro, com foguetes que derrubarão a destruição de seus inimigos e abaterão todas as ameaças recebidas.
Jogabilidade
Bots
A jogabilidade ocorre em uma grade de 10x15. Seu bot está localizado na extremidade inferior e possui três slots nos pontos 6,7 e 8 da grade. Seu oponente está localizado no topo da grade, com três slots diretamente opostos aos seus.
Foguetes
De qualquer um desses slots, você pode disparar um foguete, assumindo que o slot não foi destruído. Um foguete consiste em uma lista de direções que são dadas a ele quando criadas e, uma vez disparadas, essas direções não podem ser alteradas. A cada turno, o foguete consumirá o topo da lista e se moverá nessa direção. Foguetes se movem simultaneamente. Se dois foguetes terminarem no mesmo bloco, os dois explodirão. Se um foguete ficar sem comandos, ele explodirá. Se um foguete ficar sem combustível, após 100 movimentos, ele explodirá. Quando um foguete explode, ele permanece nesse ladrilho por 5 turnos, fazendo com que outros foguetes que se movem para lá também explodam.
Nota: Devido ao movimento simultâneo, dois foguetes podem se cruzar sem explodir, desde que ambos não terminem um turno no mesmo bloco.
Objetivo
O objetivo de cada partida é destruir os slots de seus oponentes, mantendo o seu vivo. Um foguete pode ser disparado de qualquer slot ativo que você possui e recebe um caminho designado por você antes de ser disparado. Você dispara um foguete a cada segundo turno, o que significa que os foguetes se moverão duas vezes antes que você possa disparar outro. Um duelo dura 200 turnos, ou até que todos os slots de bots sejam destruídos.
Pontuação
No final da partida, você ganha um ponto para cada slot ao vivo que você possui e um ponto para cada slot que você destruiu. Isso significa que é um jogo de soma zero, e 6 pontos serão concedidos a cada partida.
Um round robin será executado para que cada bot enfrente um ao outro uma vez. Se algum bots usar RNGs, cada confronto será de 1000 duelos.
Implementação
O código para a competição pode ser encontrado aqui: https://github.com/Cain93/RocketBots
Cada submissão deve estender a Bot
aula. Você deve substituir o fireRocket
método Este método recebe uma matriz de foguetes Rocket[][]
,, que representa o tabuleiro de jogo. Você está sempre localizado na parte inferior da grelha, com ranhuras em pontos [-1][6]
, [-1][7]
, [-1][8]
. Na grade, pontos desocupados serão representados com null
. Se um foguete existir em um bloco, você poderá identificar a quem ele pertence acessando o dis
campo. "^" é seu foguete e "v" são seus oponentes.
Você deve retornar um LinkedList de números inteiros que fornece as instruções para seu foguete. Para mover para cima, use 0. Para mover para cima e para a direita, use 1, apenas para a direita, use 2, etc. até 7 para cima e esquerda. O foguete se moverá na ordem em que você pressiona Inteiros. Por exemplo, o código a seguir fará com que o foguete suba algumas voltas, zigue-zague algumas vezes e depois detone.
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
Para alterar de qual slot disparar o foguete, altere o curSlot
campo. 0 é o slot mais à esquerda e 2 é o mais à direita. Para verificar se um slot está destruído, use getSlot(int slotNumber)
.
Se um foguete terminar uma curva em um slot, esse slot será destruído. Você não precisa detonar manualmente o foguete.
Nota: Os foguetes aparecem no local do slot disparado, mas se moverão uma vez antes de as colisões serem avaliadas. Portanto, se você disparar um foguete do slot 0 e o primeiro movimento for certo (2), você destruirá seu próprio slot do meio. No entanto, para cima e para a direita (1) é uma jogada segura.
Se você quiser nomear seu bot, substitua o name()
método
Os robôs serão reconstruídos para cada duelo, para que todas as variáveis estáticas sejam redefinidas.
Boa sorte!
Que seus foguetes voem verdadeiros e seus oponentes não sejam nada além de pedaços de metal fumegantes.
Dica:
Detonar propositalmente foguetes para criar explosões é uma maneira mais fácil de defender do que tentar derrubar foguetes oponentes.
Bot de exemplo
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
Pontuações
Pontuações 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324