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
fuente
Respuestas:
Defensor
El defensor usa un nuevo tipo de defensa: los cohetes patrullan frente a las ranuras. Esto ofrece una gran ventaja, ya que los cohetes viven durante 100 turnos en lugar de 5 turnos (como explosiones).
fuente
Zigzagoon
Las ranuras externas van (ligeramente) de ancho, luego se dirigen hacia adelante y regresan hacia las ranuras enemigas. La ranura del medio dispara un patrón en zigzag en el medio.
Cada dos asaltos (3 turnos), entra en modo de defensa y solo explota algunos cohetes cerca de mis propias máquinas tragamonedas. Los cohetes en modo de ataque luego los rodean. Nada demasiado elegante, solo algo para poner en marcha el concurso.
fuente
Terminator
Estoy orgulloso de presentar Terminator !!!
Cada cohete se mueve hacia la izquierda / derecha desde el centro y regresa a una ranura enemiga. Cada dos turnos, se lanza un cohete de defensa recto y explota cerca de la ranura para protegerlo.
fuente
SombreroTrickBot
Tenía DoubleTapBot para CodeBot 3, que estaba golpeando dos veces en un turno, aquí viene HatTrickBot: ¡Golpeando los 3 puntos al mismo tiempo!
Siempre es posible evitar que un cohete golpee si sabe dónde caerá. Pero no creo que haya muchos bot que puedan proteger sus máquinas tragamonedas contra un ataque de 3 cohetes.
Por cierto, sí, es horrible ver tal otra cosa con el cambio repetido. Podría haber creado una var para encender con valores únicos para cada combinación del estado de las ranuras y el turnConter. Pero sería más difícil de leer (tendría que mantener el significado de los valores en un comentario ... ¡aburrido!) :)
fuente
Tortuga
Si protejo todas mis bases, tengo 3 puntos. Las bases solo se pueden atacar desde 5 ubicaciones si obtengo bien la cuadrícula. El cohete dura 5 turnos en el campo ...
Este bot usa todo esto para cumplir su objetivo: sobrevivir con al menos el 50% de los puntos en el bolsillo. Dispara 3 cohetes, luego se cubre
fuente
SideShooter
Primeros disparos a través de la primera torreta (más a la derecha) en una de dos formas diferentes. Luego, dispara a través de la última torreta (más a la izquierda) en una de dos formas diferentes. Luego forma una "pared" con la segunda torreta (del medio) haciendo estallar cohetes frente a cada torreta. Este proceso se repite.
Si el juego dura más de 30 turnos, SideShooter se aburre y cambia de una manera pequeña. En lugar de hacer una "pared" con la segunda torreta (central), dispara en línea recta. El resto de las torretas se comportan de la misma manera.
fuente
do...while
declaración hacer un bucle infinito ...Francotirador
Sniper primero bloquea sus dos lados y luego comienza a disparar en línea recta.
fuente
Tres disparos
Tenemos algunos disparos extraños volando. No es una verdadera defensa, pero el patrón es tal que será difícil disparar más allá de esta extraña lluvia de misiles. (o esa es la idea. Lo más probable es que no funcione).
Nota
fuente
MásDakka
MoreDakka dispara en cinco direcciones sin parar (hasta que las torretas sean destruidas por otros misiles).
fuente
StraightShot
Solo dispara directamente a ellos.
fuente
Aquí está mi propia entrada
WallE
Dispara algunos cohetes compensados y construye muros en sus bordes y centro. Después de 100 turnos, comienza a apuntar a la ranura del medio.
fuente