Introducción
El juego tiene lugar en un mundo pequeño con diferentes ciudades. Los gobernantes de las ciudades se odian y desean gobernar el mundo. La gente se divide en dos grupos, guerreros y nacidos bajos. Sin embargo, los nacidos bajos pueden elevarse a guerreros. Eres el gobernante de tres de estas ciudades.
Jugabilidad
Cuando comienza el juego, gobiernas tres ciudades. En cada pueblo hay 100 personas. Tienes que dividirlos en caballeros y nacidos bajos.
Entonces comienza el juego real, que se basa en turnos. Un turno se ve así: "Produce" knights
=> execute command of first town
=> execute command of next town
(repetir para todas las ciudades) => try a rebellion
.
- Cada turno, se invocará su programa para cada ciudad que le pertenezca . Puedes atacar una ciudad , apoyar a una ciudad o simplemente esperar . Estas acciones se ejecutarán secuencialmente, no simultáneamente.
- Cada tercer turno, obtienes un caballero por 2 nacidos bajos (23 nacidos bajos => 11 caballeros). La cantidad de nacidos bajos permanece igual.
- Los caballeros dentro de una ciudad tienen una bonificación de defensa de 1.2. Si te atacan, tus caballeros se multiplicarán por este número (por ejemplo
78 knights
, tienes, tendrás93 knights
durante el ataque). Después del ataque, se eliminarán los caballeros adicionales (si82 knights
sobrevives, aún tendrás78 knights
). - En un ataque, cada caballero mata a un enemigo antes de morir. Por ejemplo:
30 knights
ataque100 knights
(sin bonificación de defensa) => 70 caballeros sobreviven. - Puedes capturar una ciudad matando a todos los caballeros dentro de ella . Todos los nacidos bajos te pertenecen ahora y tus caballeros sobrevivientes están estacionados en la ciudad. En la siguiente ronda, puedes gobernar esta ciudad además de todas tus otras ciudades .
- Después de capturar una ciudad, no tendrá una bonificación de defensa durante 2 turnos completos (porque las puertas están rotas). En el tercer turno, las puertas serán reparadas.
- Para evitar que los nacidos bajos se rebelen, necesitas al menos la mitad de los caballeros que los bajos (23 nacidos bajos en una ciudad necesitan al menos 12 caballeros en la misma ciudad). De lo contrario, los nacidos bajos matarán a todos los caballeros y la ciudad se volverá "neutral" (sin un líder, indicado por un ID de jugador
-1
). - Las ciudades neutrales "producirán" caballeros, pero no atacarán ni apoyarán a ninguna otra ciudad.
Sintaxis
El controlador le proporciona entrada a través de argumentos de comando, su programa tiene que salir a través de stdout.
Salida (preparación)
Antes de que comience el juego, el controlador invoca su presentación sin argumentos. Esto significa que tienes que distribuir a tus 100 personas (para cada ciudad) en caballeros y nacidos bajos. Necesita salida KnightCount KnightCount KnightCount
, por ejemplo 95 80 95
.
Entrada
Round;YourPlayerId;YourTownId;PlayerId_TownId_knights_lowborns;PlayerId_TownId_knights_lowborns;...
En la primera ronda, esto será algo así
1;2;2;0_0_100_0;1_1_50_50;2_2_80_20
. Aquí, ves que es la primera ronda, eres el jugador 2 en la ciudad 2. Tienes 80 caballeros y 20 nacidos bajos.
Más adelante en el juego, podría ser algo así 20;2;1;0_0_100_0;2_1_30_50;2_2_40_20
. Todavía eres el jugador 2 (esto nunca cambia), pero capturaste la ciudad 1 (que estás controlando en este momento).
Salida
A TownId NumberOfKnights
o S TownId NumberOfKnights
o W
(para esperar).
Ejemplo: A 2 100
(atacar la ciudad 2 con 100 caballeros) o S 3 2
(apoyar la ciudad 3 con 2 caballeros).
Reglas
- Los bots no deben escribirse para vencer o admitir otros bots específicos.
- Se permite escribir en archivos. Escribe a " yoursubmissionname .txt", la carpeta se vaciará antes de que comience el juego. Otros recursos externos están prohibidos.
- Su envío tiene 1 segundo para responder (por ciudad).
- Proporcione comandos para compilar y ejecutar sus envíos.
Victorioso
El ganador es el que tiene más ciudades después de 100 rondas. Si un jugador captura todas las ciudades, el juego se detiene y gana. Si varios jugadores tienen la misma cantidad de ciudades, la cantidad de caballeros contará, luego la cantidad de nacidos bajos.
Controlador
Puedes encontrar el controlador en github. También contiene 2 samplebots, escritos en Java. Ábralo en Eclipse, coloque los bots compilados en la carpeta raíz y agregue una clase al programa de control (al igual que los robots de muestra).
Resultados
Para los resultados finales, corrí 10 juegos. Este es el promedio:
Ciudades del jugador 1. Liberator 37.5 2. Sehtimianer 8.2 3. SuperProducer 5.4 4. Sleeper 1.4 5. Frankenstein 1.2 6. Mantequilla 0.8 (más caballeros) 7. TheKing 0.8 (menos caballeros) 8. Éxodo 0.6 9. Tortuga 0.5 (más caballeros) 10. AttackOn3 0.5 (menos caballeros) 11. Democracia 0.3 12. CalculatedFail 0.2 13. Revolucionario 0.1
Puedes leer un juego de muestra aquí: juego de muestra en github
A
apoya a otra ciudadB
, el número dado de caballeros simplemente se transfiere deA
aB
, después de lo cual son controlados por el propietario deB
, ¿correcto?