Rocket Bots
El año es 3024. La gente se ha convertido en un recurso demasiado escaso para arriesgarse en la guerra, por lo que el combate se ha desplazado a los robots. Tu tarea es construir un bot como ningún otro, cuyos cohetes lloverán destrucción sobre tus enemigos y derribarán todas las amenazas entrantes.
Como se Juega
Bots
El juego tiene lugar en una cuadrícula de 10x15. Su bot está ubicado en el borde inferior y tiene tres ranuras en los puntos 6,7 y 8 de la cuadrícula. Tu oponente se encuentra en la parte superior de la cuadrícula, con tres espacios directamente opuestos al tuyo.
Cohetes
Desde cualquiera de estas ranuras, puedes disparar un cohete, suponiendo que la ranura no haya sido destruida. Un cohete consiste en una lista de direcciones que se le da cuando se crea, y una vez disparado, estas direcciones no se pueden cambiar. Cada turno, el cohete consumirá la parte superior de la lista y se moverá en esa dirección. Los cohetes se mueven simultáneamente. Si dos cohetes terminan en el mismo mosaico, ambos explotarán. Si un cohete se queda sin comandos, explotará. Si un cohete se queda sin combustible, después de 100 movimientos, explotará. Cuando un cohete explota, permanecerá en esa casilla durante 5 turnos, haciendo que también explote cualquier otro cohete que se mueva allí.
Nota: Debido al movimiento simultáneo, dos cohetes pueden cruzarse entre sí sin explotar, siempre que no terminen un turno en la misma casilla.
Objetivo
El objetivo de cada partida es destruir las ranuras de tus oponentes mientras mantienes vivo el tuyo. Se puede disparar un cohete desde cualquier ranura en vivo que tenga, y se le asigna una ruta designada por usted antes de dispararlo. Lanzas un cohete cada segundo turno, lo que significa que los cohetes se moverán dos veces antes de que puedas disparar otro. Un duelo dura 200 turnos, o hasta que se destruyan todas las ranuras de un bot.
Puntuación
Al final del partido, obtienes un punto por cada tragamonedas en vivo que tengas, y un punto por cada tragamonedas de oponentes que destruiste. Esto significa que es un juego de suma cero, y se otorgarán 6 puntos por partido.
Se ejecutará un round robin para que cada bot se enfrente al otro una vez. Si algún bot usa RNG, entonces cada enfrentamiento será de 1000 duelos.
Implementación
El código para la competencia se puede encontrar aquí: https://github.com/Cain93/RocketBots
Cada presentación debe extender la Bot
clase. Debe anular el fireRocket
método. Este método recibe una matriz de Rockets Rocket[][]
, que representa el tablero de juego. Siempre se encuentran en la parte inferior de la parrilla, con ranuras en los puntos [-1][6]
, [-1][7]
, [-1][8]
. En la cuadrícula, los puntos desocupados se representarán con null
. Si existe un cohete en un mosaico, puede identificar a quién pertenece accediendo al dis
campo. "^" es tu cohete y "v" son tus oponentes.
Debe devolver una LinkedList of Integers que proporcione las instrucciones para su cohete. Para moverse hacia arriba, use 0. Para moverse hacia arriba y hacia la derecha, use 1, justo a la derecha, use 2, etc. hasta 7 para arriba y a la izquierda. El cohete se moverá en el orden en que presionas los números enteros. Por ejemplo, el siguiente código hará que el cohete se mueva hacia arriba unas pocas vueltas, zigzaguee unas pocas vueltas y luego detonar.
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 cambiar desde qué ranura disparar el cohete, cambie el curSlot
campo. 0 es su ranura más a la izquierda y 2 es su más a la derecha. Para verificar si una ranura está destruida, use getSlot(int slotNumber)
.
Si un cohete termina un turno en una ranura, esa ranura será destruida. No necesita detonar manualmente el cohete.
Nota: los cohetes se generan en la ubicación de la ranura desde la que se disparó, pero se moverán una vez antes de evaluar las colisiones. Entonces, si disparas un cohete desde la ranura 0, y el primer movimiento es correcto (2), entonces destruirás tu propia ranura central. Sin embargo, arriba y derecha (1) es un movimiento seguro.
Si desea nombrar su bot, anule el name()
método.
Los bots se reconstruirán para cada duelo, por lo que se restablecerán las variables estáticas.
¡Buena suerte!
Que tus cohetes vuelen de verdad y que tus oponentes no sean más que restos de metal ardiendo.
Insinuación:
Detonar cohetes intencionalmente para crear explosiones es una forma más fácil de defender que intentar derribar cohetes oponentes.
Ejemplo 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;
}
}
Puntuaciones
Puntuaciones de 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