Su amable vecino, Doctor Tree, acaba de darle tres criaturas mágicas llamadas Codémon. Hay un torneo de batalla en la cercana ciudad de Colorville. ¿Eres el mejor, como nunca nadie lo fue?
Visión de conjunto
Este es un torneo de batalla. Cada jugador controla un equipo de tres monstruos, y el objetivo es noquear (matar) al otro equipo. Hay 100 rondas, con puntos otorgados por victorias y empates. ¡El equipo con más puntos gana!
Monstruos
Un Codémon es una pequeña criatura complicada. Hay cinco tipos (elementos) para elegir, tres estadísticas y tres espacios de movimiento en cada uno.
Tipos
Cada Codémon tiene asignado un tipo. Los cinco tipos son Normal, Psíquico, Fuego, Agua y Hierba. Cada uno tiene sus fortalezas y debilidades. El daño se basa en la siguiente tabla:
Los números son multiplicadores de daño. Por ejemplo, el Fuego que ataca al Agua tiene un modificador de 0.5 (medio daño), mientras que el Fuego que ataca a la Hierba se duplica (2).
Estadísticas
Cada monstruo tiene tres estadísticas que determinan sus habilidades de batalla. El ataque aumenta el daño que hace. La defensa reduce el daño que se necesita. La velocidad le permite moverse antes que aquellos con menor velocidad.
Cada monstruo tiene un valor inicial de 50 para cada estadística, y un máximo de 100. Cuando crees tus monstruos, podrás asignar 80 puntos de estadísticas adicionales (cada uno). Recuerde que ninguna estadística individual puede superar los 100. Por lo tanto, podría tener una distribución 100/80/50, 90/80/60 o 65/65/100, pero 120/50/60 es ilegal. Cualquier equipo con estadísticas ilegales es descalificado. No está obligado a usar los 80 puntos, pero probablemente no debería ir con el mínimo 50/50/50.
También podría considerar HP una estadística, pero cada Codémon tiene un 100 HP no modificable. Cuando HP cae a cero, no pueden seguir luchando. HP se rellena a 100 antes de cada batalla.
Movimientos
Cada monstruo conoce tres movimientos de batalla. Los tres elegidos deben ser distintos, por lo que no hay Punch / Punch / Punch.
Hay 15 movimientos, tres de cada tipo. Cada tipo tiene un ataque directo, un ataque más débil con un efecto y un movimiento de efecto único.
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
se refiere al tipo de movimiento. power
Es su sorprendente poder. uses
indica cuántas veces se puede usar por batalla ( -
es ilimitado). usable
muestra qué tipos puede usar (por ejemplo, Punch no se puede dar a un tipo psíquico, ya que no existe P
). effect
muestra qué efectos tienen los movimientos. Hay un 75% de posibilidades de que cada efecto funcione, excepto Sanar, que siempre funciona.
Para los efectos que cambian las estadísticas de un monstruo, los efectos se pueden apilar . Por ejemplo, usar Weaken dos veces puede reducir el ataque de tu oponente a 0,64 de efectividad. Los efectos que no cambian las estadísticas de un monstruo (Dormir, Quemar, etc.) no se acumulan .
Dormir pone al oponente a dormir, con un 60% de probabilidad de despertarse al comienzo de cada turno. Los monstruos dormidos no tomarán ninguna medida.
Quemar daña al oponente 10 HP al final de cada turno cuando está activo . El veneno funciona de manera similar, pero toma una cantidad cada vez mayor en cada turno. En el primer turno, es 5, y gana 5 cada turno a partir de entonces. Entonces, en el cuarto turno, será dañino para 20. Estos son daños planos, no afectados por el tipo de monstruo o sujetos a bonificaciones.
La confusión puede hacer que un monstruo ataque en sí mismo en lugar de hacer lo que se le dijo que hiciera. Este ataque tiene un poder de 10, y tiene un 30% de probabilidad de suceder en un turno dado.
Para ser claros, los efectos duran hasta el final de la batalla (excepto el sueño, como se señaló anteriormente).
Los movimientos también reciben un aumento del 20% en potencia si los usa un monstruo del tipo correspondiente. Por ejemplo, un monstruo Grass que usa Vine es potenciado, mientras que usando Punch no lo es.
Estadísticas secretas
Las estadísticas y el tipo (pero no los movimientos) de cada monstruo son de conocimiento público. Tus oponentes podrán ver contra qué están luchando para elegir la mejor acción. Sin embargo, también hay bonos disponibles que están ocultos.
Específicamente, después de cada dos batallas, se te dará un punto de estadística de "bonificación" por cada monstruo en tu equipo. Se otorgan puntos a todos los monstruos, vivos o muertos, ganadores o perdedores. Puede asignar esto a cualquiera de las tres estadísticas que elija. No puedes apilarlos en un solo monstruo; cada monstruo recibe uno cada vez. Estos puntos son inmunes al límite de 100. Dado que habrá 100 rondas de batalla, esto significa que puede obtener una estadística única de hasta 149 si le asigna todas sus bonificaciones. Una vez más, el oponente solo verá tus estadísticas "base", por lo que cuanto más te acerques al torneo, más se separará su conocimiento de la verdad.
Batalla
La batalla tiene lugar entre equipos de tres, con uno activo en cada equipo a la vez. Al principio, se te mostrará el equipo del oponente y se te pedirá que elijas qué monstruo será tu primer jugador "activo".
Después de eso, los turnos tienen lugar con los siguientes pasos:
- Interruptor: los cambios obligatorios de monstruos tienen lugar (si corresponde)
- Elige acción de batalla
- Interruptor: cualquier cambio de monstruo opcional (elegido como acción de batalla) tiene lugar
- Comprobación del sueño: posibilidad de despertarse del sueño
- Ataque 1: si puede, el monstruo más rápido usa su movimiento seleccionado
- Ataque 2: si puede, el otro monstruo usa su movimiento seleccionado
- Daño de efecto: aplica daño de quemadura / veneno a los monstruos vivos
"Más rápido" significa el monstruo con la mayor velocidad. Si ambas estadísticas de velocidad son iguales, se elige mediante el lanzamiento de moneda PRNG cada turno.
Al final de cualquier turno donde muera tu monstruo activo, se te pedirá que elijas un nuevo activo. Es posible también optar por cambiar monstruos activos como su movimiento de cualquier turno (siempre que tenga más de una vida). Nuevamente, si cambias como tu movimiento, no harás un movimiento de batalla ese turno.
Los monstruos no se "procesan" cuando están inactivos. Esto significa que no reciben daño por quemaduras / veneno, los contadores de veneno no se acumularán, no se despertarán del sueño, etc. No se eliminan ni cambian los efectos al cambiar . Este no es ese otro juego de lucha de monstruos. Si cambias con el ataque levantado y quemado, todavía estarán allí cuando vuelvas a entrar.
El daño del efecto tiene lugar tanto si matas a tu oponente activo como si no. De esta manera, los miembros de ambos equipos pueden morir en un solo turno.
Cuando un equipo se queda sin monstruos utilizables, pierden. Si ambos equipos se agotan en el mismo turno, es un empate. Si la batalla dura 1000 turnos, es un empate.
La fórmula para determinar el daño es:
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
y effDefense
son las estadísticas efectivas para los monstruos. El ataque efectivo se obtiene agregando Attack y Bonus Attack, luego multiplicando (por 0.8 o 1.25) si algún efecto lo altera. Recuerda que estos efectos pueden acumularse.
El daño solo puede ser 0 cuando el modificador de tipo es 0 (Normal <--> Psíquico) o el Poder del movimiento es 0 (Sanar, Quemar, etc.). De lo contrario, el mínimo se aplica a 1.
Torneo
Los torneos duran 100 rondas. En cada ronda, los equipos se barajan y se emparejan aleatoriamente. Si hay un número impar de equipos, las sobras reciben un adiós (se puntúa como empate). Ganar una batalla le gana al equipo 2 puntos, los empates valen 1 y no pierde nada. ¡El equipo con más puntos al final gana!
Si los equipos están empatados, se realizará un torneo con solo los equipos empatados en el primer lugar para determinar el orden de desempate.
Protocolo
El controlador enviará a su programa uno de los cuatro comandos. El primer carácter determina el tipo de comando, con los siguientes datos si es necesario.
Su programa aceptará el comando como argumento y responderá en STDOUT dentro de un segundo . No te quedes con vida escuchando STDIN, no estará allí. Cada comando generará un nuevo proceso.
Puede escribir datos / estado en el disco. Coloque los archivos en una subcarpeta con el mismo nombre que su equipo. No escriba más de 32 kilobytes de datos, o será descalificado. Los datos persistirán entre rondas, pero se borrarán entre torneos.
Comandos
Datos del equipo
Esto se envía una vez al comienzo del torneo para registrar su equipo. Tu respuesta debe ser constante , no diferente para cada torneo.
Consulta:
T
Respuesta:
name|member0|member1|member2
name
es una cadena con el nombre de tu equipo. Utilice solo alfanuméricos para facilitar el análisis. memberN
es una cadena de miembros, que proporciona los detalles de cada monstruo:
Cadena de miembros:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
Nuevamente, 'nombre' es una cadena, esta vez con el nombre de este monstruo. typeid
es su tipo Los ID de tipo están en el orden que se muestra en el cuadro anterior, con Normal = 0 y Grass = 4.
Los siguientes tres campos son sus estadísticas base. Tenga en cuenta los límites descritos en la sección de estadísticas anterior.
Los últimos tres son los movimientos de tu monstruo. Las ID se muestran en el gráfico de movimiento anterior.
Un ejemplo de respuesta de datos del equipo puede verse así:
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
Cualquier equipo que envíe datos basura, mal formateados o ilegales aquí no participará hasta que se solucione.
Elija activo
Esto se envía al comienzo de cada batalla, y cuando un monstruo muere y necesita ser cambiado.
Consulta:
C#battleState
battleState
muestra el estado de la batalla actual. Ten paciencia conmigo aquí, es feo:
yourTeamState#theirTeamState
Donde se XteamState
ve así:
name:activeSlot|member0state|member1state|member2state
activeSlot
muestra qué monstruo está actualmente activo (0-2). Los estados miembros vienen en dos sabores. Si es tu equipo, te da información adicional. Entonces,
Su miembro Xstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
Su miembro Xstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
es simplemente un identificador entero que puedes usar para hacer un seguimiento de los monstruos si no te gusta usarlo name
.
attack:defense:speed
son tus estadísticas base .
poisonedturns
te dice por cuántos turnos has sido envenenado.
moveCountX
le dice cuántos usos le quedan para cada movimiento. Si es 0, no se puede usar. Para movimientos ilimitados, esto será negativo.
bonus(stat)
es la cantidad de puntos de bonificación que ha asignado a cada estadística.
effectid
es una lista de efectos de tamaño variable que se han aplicado a tu monstruo. Habrá no haber un arrastre :
de la cadena, si existen efectos activos presentes o no. Si hay efectos apilados, se mostrarán como efectos múltiples en la lista.
Los identificadores de efecto son:
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
Respuesta:
memberSlot
La única respuesta requerida es un solo número 0,1,2, que indica qué miembro desea que esté activo. Este debe ser un miembro capaz de luchar. No envíe de vuelta 1
si el miembro 1 está muerto.
Acción de batalla
Cada turno, debes decidir qué hacer.
Consulta:
A#battleState
El battleState
aquí es exactamente como se describe anteriormente.
Respuesta:
Para usar un movimiento, devuelva la ranura en la que se encuentra el movimiento. Por ejemplo, si asigné Punch a la ranura 0, el envío 0
realiza Punch.
Para cambiar a otro miembro, envíe la ranura del miembro más diez . Entonces, para cambiar al miembro 2, envíe 12
.
Cualquier cosa que no esté en [0,1,2,10,11,12] se considera inválida y no dará lugar a ninguna acción tomada este turno.
Estadísticas de bonificación
Después de cada dos batallas, recibes un punto secreto de bonificación por cada miembro del equipo.
Consulta:
B#yourTeamState
El estado de tu equipo es el mismo que se muestra arriba, no me hagas repetirlo.
Respuesta:
stat0:stat1:stat2
Su respuesta representará qué estadística aumentar para cada miembro del equipo. El ataque es 0, la defensa es 1, la velocidad es 2.
Entonces, para aumentar la velocidad del miembro, el ataque del miembro dos y la defensa del miembro tres, respondería con:
2:0:1
Controlador
El controlador se puede encontrar en BitBucket: https: //Geobits@bitbucket.org/Geobits/codemon.git
Simplemente arroje todos los archivos de clase compilados, presentaciones y players.conf en una carpeta y ejecútelos.
Se llama a la clase principal del controlador Tournament
. El uso es:
java Tournament [LOG_LEVEL]
Los niveles de registro de 0-4 dan información creciente. El nivel 0 ejecuta el torneo en silencio y solo da los resultados, mientras que el nivel 3 ofrece comentarios paso a paso. El nivel 4 es la salida de depuración.
Puedes agregar presentaciones al torneo en players.conf
Simplemente agrega la cadena de línea de comando necesaria para ejecutar el programa, una por línea. Las líneas que comienzan con #
son comentarios.
En su publicación, incluya el comando que necesitaré agregar a mi players.conf
y cualquier paso de compilación (si es necesario).
Se incluye un equipo ficticio compuesto por todos los miembros normales con los tres movimientos normales. Eligen movimientos al azar y tienen estadísticas terribles. Diviértete golpeándolos.
Reglas misceláneas
No puede leer ni escribir en ningún recurso externo (excepto en su propia subcarpeta, hasta 32 kB como se indicó anteriormente).
Su equipo necesita entrar en el torneo "a ciegas". Eso significa que no puede analizar la fuente de otras personas para descubrir qué hará un equipo / monstruo específico en una situación dada. Usted puede analizar su oponente se mueve / estadísticas y realizar un seguimiento como los progresos del torneo, pero sin codificar esta información en.
No interfiera con otros procesos / presentaciones. No invocarlos, usar la reflexión para obtener sus datos, etc. No te metas con mi computadora. Solo no lo intentes. Esto queda a mi discreción. Los infractores pueden ser excluidos de futuras entradas.
Los concursantes están limitados a un máximo de dos entradas. Si envía más, solo calificaré los dos primeros. Si desea revocar uno, bórrelo.
Las entradas pueden no existir únicamente para apuntalar otras entradas. Además, no puede intentar descalificar indirectamente a otros concursantes (por ejemplo, usando un nombre de equipo de 27 millones de caracteres para jugadores de DQ que intenten escribir esto en el disco). Cada presentación debe jugar para ganar por mérito propio.
Su programa puede generar un máximo de un proceso secundario a la vez (descendientes totales, no directos). Tanto el proceso principal como el secundario deben finalizar directamente después de dar salida. De cualquier manera, asegúrese de no pasar el tiempo de espera.
El torneo se llevará a cabo en mi computadora con Ubuntu con un procesador Intel i7 3770K.
Resultados
Estos son los resultados de los jugadores actuales. Está muy cerca entre los principales contendientes, y estoy pensando en aumentar el número de rondas hasta 500 (y ajustar el espacio de los puntos de bonificación para que coincida). ¿Alguna objeción, comentario?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Resultados completos de juego por juego en Google Drive
bye
para un número desigual de competidores y se aseguraría de que los pares de partidos sean justos y distribuidos de manera uniforme.
n^2
lugar de hacerlo n
. Con solo los 7 competidores actuales y 100 rondas, son 2100 batallas (frente a 300 como están y 1500 con 500 rondas). Solo empeora a medida que ingresan más entradas. Podría reducir el número de rondas, pero dudo en hacerlo debido a la variabilidad inherente (con respecto a los estados especialmente), y tener un múltiplo de 50 (para puntos de bonificación) es más fácil.