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
fonte
Respostas:
Defensor
O Defender usa um novo tipo de defesa: os foguetes estão patrulhando na frente dos slots. Isso dá uma enorme vantagem, já que os foguetes vivem por 100 turnos em vez de 5 turnos (como explosões).
fonte
Zigzagoon
Os slots externos vão (um pouco) largamente, então siga em frente e volte para os slots inimigos. O slot do meio dispara em ziguezague no meio.
A cada duas rodadas (3 turnos), entra no modo de defesa e explode alguns foguetes perto dos meus próprios slots. Os foguetes do modo Attack então os rodeiam. Nada muito chique, apenas algo para colocar o concurso em funcionamento.
fonte
o Exterminador do Futuro
Tenho orgulho de apresentar o Terminator !!!
Cada foguete se move para a esquerda / direita do meio e retorna para um slot inimigo. A cada duas voltas, um foguete de defesa é lançado reto e explode perto do slot para protegê-lo.
fonte
HatTrickBot
Eu tinha o DoubleTapBot para o CodeBot 3, que estava acertando duas vezes em um turno, eis o HatTrickBot: acertar todos os três pontos ao mesmo tempo!
Sempre é possível impedir que um foguete atinja se você souber onde ele cairá. Mas acho que não há muitos robôs capazes de proteger seus slots contra um ataque com três foguetes.
By the way, sim, é horrível ver tal outra coisa com a troca repetida. Eu poderia ter criado um var para ativar valores únicos para cada combinação do status dos slots e do turnConter. Mas seria mais difícil de ler (eu teria que manter o significado dos valores em um comentário ... chato!) :)
fonte
Tartaruga
Se eu proteger todas as minhas bases, tenho 3 pontos. Bases só podem ser atacadas em 5 locais se eu melhorar a grade. Foguete dura 5 turnos no campo ...
Este bot usa tudo isso para atingir seu objetivo: sobreviver com pelo menos 50% dos pontos no bolso. Atira 3 foguetes e depois se cobre
fonte
SideShooter
Dispara primeiro pela primeira torre (mais à direita) de uma de duas maneiras diferentes. Em seguida, ele dispara pela última torre (mais à esquerda) de uma de duas maneiras diferentes. Em seguida, ele cria uma "parede" com a segunda torre (média), explodindo foguetes na frente de cada torre. Este processo é repetido.
Se o jogo durar mais de 30 turnos, o SideShooter fica entediado e muda um pouco. Em vez de fazer uma "parede" com a segunda torre (média), ela dispara reta. O resto das torres se comporta da mesma maneira.
fonte
do...while
declaração fazer um loop infinito ...Franco atirador
Sniper primeiro bloqueia seus dois lados e depois começa a atirar em linha reta.
fonte
Três tiros
Temos algumas fotos esquisitas voando. Nenhuma defesa verdadeira, mas o padrão é tal que será difícil conseguir um tiro além desse bizarro granizo de mísseis. (ou essa é a ideia. provavelmente não funcionará).
Nota
fonte
MoreDakka
Dakaka atira em cinco direções sem parar (até as torres serem destruídas por outros mísseis).
fonte
StraightShot
Apenas atire neles.
fonte
Aqui está a minha própria entrada
WallE
Atira alguns foguetes deslocados e constrói paredes nas bordas e no centro. Após 100 turnos, começa a mirar no slot do meio.
fonte