Robot a razzo
L'anno è il 3024. Le persone sono diventate una risorsa troppo scarsa per rischiare in guerra, quindi il combattimento si è spostato sui robot. Il tuo compito è costruire un robot come nessun altro, i cui missili faranno piovere distruzione sui nemici e abbatteranno tutte le minacce in arrivo.
gameplay
Motori di ricerca
Il gioco si svolge su una griglia 10x15. Il bot si trova sul bordo inferiore e ha tre slot nei punti 6,7 e 8 della griglia. Il tuo avversario si trova nella parte superiore della griglia, con tre slot direttamente di fronte al tuo.
Rockets
Da una di queste slot, puoi sparare un razzo, supponendo che lo slot non sia stato distrutto. Un razzo consiste in un elenco di direzioni che gli vengono date al momento della creazione e che una volta lanciate non possono essere cambiate. Ad ogni turno, il razzo consumerà la cima della lista e si muoverà in quella direzione. I razzi si muovono contemporaneamente. Se due razzi finiscono nella stessa tessera, esploderanno entrambi. Se un razzo esaurisce i comandi, esploderà. Se un razzo esaurisce il carburante, dopo 100 mosse esploderà. Quando un razzo esplode, rimarrà in quella tessera per 5 turni, facendo esplodere anche tutti gli altri razzi che si muovono lì.
Nota: a causa del movimento simultaneo, due razzi possono passare l'un l'altro senza esplodere, purché non finiscano entrambi un turno nella stessa tessera.
Obbiettivo
L'obiettivo di ogni partita è quello di distruggere le slot dei tuoi avversari mantenendo vivo il tuo. Un razzo può essere lanciato da qualsiasi slot dal vivo che hai, e gli viene dato un percorso da te designato prima di essere lanciato. Spari un razzo ogni secondo turno, il che significa che i razzi si muoveranno due volte prima di poter sparare un altro. Un duello dura 200 turni o fino a quando uno slot di robot non viene distrutto.
punteggio
Alla fine della partita, ottieni un punto per ogni slot live che hai e un punto per ogni slot avversario che hai distrutto. Ciò significa che si tratta di una partita a somma zero e che verranno assegnati 6 punti per ogni partita.
Verrà eseguito un round robin in modo che ciascun bot si faccia fronte con l'altro una volta. Se qualche bot usa RNG, ogni matchup sarà invece di 1000 duelli.
Implementazione
Il codice per il concorso è disponibile qui: https://github.com/Cain93/RocketBots
Ogni invio dovrebbe estendere la Bot
classe. È necessario sostituire il fireRocket
metodo. Questo metodo riceve una griglia di razzi Rocket[][]
, che rappresenta il tabellone. Si sono sempre situati nella parte inferiore della griglia, con bande orarie negli spot [-1][6]
, [-1][7]
, [-1][8]
. Sulla griglia, saranno rappresentati i punti non occupati con null
. Se esiste un razzo in una tessera, puoi identificare a chi appartiene accedendo al dis
campo. "^" è il tuo razzo e "v" sono i tuoi avversari.
Devi restituire un Elenco di numeri interi che fornisce le istruzioni per il tuo razzo. Per spostarti in alto, usa 0. Per spostarti in alto e a destra, usa 1, a destra, usa 2, ecc. Fino a 7 per su e sinistra. Il razzo si sposterà nell'ordine in cui premi Integer. Ad esempio, il codice seguente farà spostare il razzo verso l'alto di alcuni turni, zig-zag di alcuni turni e quindi far esplodere.
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);
Per cambiare da quale slot sparare il razzo, cambia il curSlot
campo. 0 è il tuo slot più a sinistra e 2 è il tuo più a destra. Per verificare se uno slot è distrutto, utilizzare getSlot(int slotNumber)
.
Se un razzo termina un turno su uno slot, tale slot verrà distrutto. Non è necessario far esplodere manualmente il razzo.
Nota: i razzi si generano nella posizione dello slot da cui sono stati sparati, ma si sposteranno una volta prima di valutare le collisioni. Quindi se spari un razzo dallo slot 0 e la prima mossa è corretta (2), allora distruggerai il tuo slot centrale. Tuttavia, su e destra (1) è una mossa sicura.
Se vuoi dare un nome al tuo bot, sovrascrivi il name()
metodo.
I robot verranno ricostruiti per ogni duello, quindi tutte le variabili statiche verranno ripristinate.
In bocca al lupo!
Possano i tuoi missili volare veri e gli avversari essere nient'altro che frammenti di metallo fumanti.
Suggerimento:
Detonare intenzionalmente i razzi per creare esplosioni è un modo più semplice di difendersi che cercare di abbattere i razzi avversari.
Esempio di Bot
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;
}
}
I punteggi
I punteggi sono 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