- de crisis y martirio
(ese es el subtítulo porque los subtítulos son geniales)
En este desafío del rey de la colina en Python (sí; no tienes que ir más lejos para saber que no puedes presentarte en Java), debes crear un bot que juegue un juego muy similar al de bienvenida a la mazmorra
Reglas del juego
(ten en cuenta que este no es el juego original)
Hay un mazo, un conjunto de objetos y algunas cartas de recompensa y cartas de muerte. Base HP es 3. El mazo consiste en 13 cartas de monstruos numeradas 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
para denotar sus fortalezas.
Lista de articulos
Pacto demoníaco: Derrota al demonio (monstruo de fuerza 7) y al monstruo debajo de él en la pila de mazmorras. - (solo derrota al demonio si el demonio fue el último en la mazmorra)
Poción de vida: cuando caes a 0 HP, derrota al monstruo y regresa a 3 HP.
Santo Grial: derrota a los monstruos de fuerza par (en el juego, estos son muertos vivientes). Si se produce un monstruo par después de que se haya utilizado el pacto demoníaco, eso actúa primero, y no obtendrás una muerte extra por pacto después de este monstruo.
Daga Vorpal: elige un monstruo antes de entrar en la mazmorra; Este tipo de monstruo es derrotado. Si el monstruo objetivo ocurre después de que se haya usado el pacto demoníaco, eso actúa primero, y no obtendrás una muerte extra por pacto después de este monstruo.
Escudo: Agregue 3 al total de HP antes de espeleología. Esto no afecta el uso de la poción de salud, que siempre devolverá la salud a 3.
Armadura: Agregue 5 al total de HP antes de espeleología. Esto no afecta el uso de la poción de salud, que siempre devolverá la salud a 3.
Las tarjetas de recompensa se utilizan para realizar un seguimiento de quién ha tenido éxito en la mazmorra. Las cartas de muerte rastrean quién ha fallado en el calabozo.
Fase de dibujo
Antes de que comience la fase de extracción, todas las cartas de monstruos se devuelven al mazo, ambos jugadores se restauran a 3 HP, y todos los elementos descartados se restauran de modo que haya uno de cada uno.
El primer jugador decide si roba una carta del mazo, ocultándola del otro jugador. Si es así, deben elegir colocarlo encima de la pila de mazmorras o descartarlo junto con un elemento de su elección. Los artículos y cartas descartados no estarán disponibles para ninguno de los jugadores hasta la próxima ronda.
Después de que el jugador uno toma su turno, el jugador dos hace lo mismo. Los jugadores deciden alternativamente si roban y qué hacer con la carta robada, hasta que alguien decida no robar o un jugador tome la última carta del mazo. Si un jugador decide no robar, o roba la última carta, la fase de robo termina y el otro jugador ahora tiene que ingresar a la mazmorra y comenzar a hacer espeleología.
Fase de espeleología
Si la daga Vorpal no se ha descartado, el jugador de espeleología ahora debe decidir a qué carta aplicarla. No hay que tomar decisiones activas para el resto de esta fase.
El primer jugador toma la carta superior; es decir, la última carta colocada en la mazmorra, y ver su número de fuerza. Si el pacto demoníaco está activo desde el turno anterior, la carta robada se descarta. De lo contrario, los artículos del jugador serán verificados en el orden 'pacto demoníaco', 'santo grial', 'Daga Vorpal'. El primer elemento no descartado capaz de derrotar la carta robada se usará y la carta se descartará. Si se usa el pacto demoníaco, ahora estará activo para la próxima carta. El artículo usado no se descarta.
Si no hay ningún elemento aplicable disponible, la fuerza de la carta se resta de la salud del jugador. Si su salud ya no es positiva, serán restaurados a 3 HP y la poción se descartará si está disponible, de lo contrario, el rastreo de mazmorra termina y toman una carta de muerte.
Si bien el jugador no es derrotado y quedan cartas en la mazmorra, este proceso de robar la carta superior se repite. Al derrotar con éxito todas las cartas en el calabozo, el rastreo del calabozo termina y el jugador de espeleología recoge una carta de recompensa.
Descripción completa del juego
Un juego consiste en una serie de rondas, cada una con una fase de dibujo y luego una fase de espeleología. Al final de cada ronda, un jugador habrá recogido una carta de muerte o una carta de recompensa; Una vez que un jugador acumula 5 de cualquier tipo, el juego termina. Si tienen 5 cartas de muerte, pierden el juego. Si tienen 5 cartas de recompensa, ganan. De cualquier manera, el otro jugador recibe el resultado opuesto. Si ninguno de los jugadores tiene 5 cartas de un tipo, el juego avanza a la siguiente ronda y el jugador que quedó segundo en la ronda anterior ahora va primero y viceversa.
KOTH detalles
Cada bot jugará 400 juegos contra cualquier otro bot de acuerdo con las reglas descritas anteriormente. ¿Qué bot es el jugador uno?
Aquí están los artículos nuevamente:
Pacto demoníaco: Derrota al demonio (monstruo de fuerza 7) y al monstruo debajo de él en la pila de mazmorras. - (solo derrota al demonio si el demonio fue el último en la mazmorra)
Poción de vida: cuando caes a 0 HP, derrota al monstruo y regresa a 3 HP.
Santo Grial: derrota a los monstruos de fuerza par (en el juego, estos son muertos vivientes). Si se produce un monstruo par después de que se haya utilizado el pacto demoníaco, eso actúa primero, y no obtendrás una muerte extra por pacto después de este monstruo.
Daga Vorpal: elige un monstruo antes de entrar en la mazmorra; Este tipo de monstruo es derrotado. Si el monstruo objetivo ocurre después de que se haya usado el pacto demoníaco, eso actúa primero, y no obtendrás una muerte extra por pacto después de este monstruo.
Escudo: Agregue 3 al total de HP antes de espeleología. Esto no afecta el uso de la poción de salud, que siempre devolverá la salud a 3.
Armadura: Agregue 5 al total de HP antes de espeleología. Esto no afecta el uso de la poción de salud, que siempre devolverá la salud a 3.
y la cubierta: 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
.
Debe implementar una clase de bot que no utilice variables de clase, derivadas de la siguiente clase base:
class BasePlayer:
def start_turn(self, last_turn):
raise NotImplementedError
def play(self, card):
raise NotImplementedError
def vorpal_choice(self, last_turn):
raise NotImplementedError
def result(self, bot, result, dungeon, vorped):
raise NotImplementedError
Esta clase base muestra los métodos que su clase necesita implementar, y la cantidad de argumentos tomados por cada uno.
Método Argumento Descripciones
last_turn
invorpal_choice
ystart_turn
es un entero o un valor None. Un valor de 0 a 5 indica que el enemigo descartó la carta robada junto con el ítem indicado por ese valor (ver la lista de ítems más arriba). Un valor de 6 indica que el enemigo colocó la carta en la mazmorra. Un valor None indica que el bot está jugando primero en esta ronda (no es posiblevorpal_choice
). Envorpal_choice
last_turn es probable que sea 7, lo que indica que pasaron ese turno. La única circunstancia en la que no es 7 es cuando el enemigo roba la última carta.card
es un número que representa la fuerza de una de las cartas del mazo como se enumeró anteriormente.
Ahora, los argumentos para result
son un poco más complejos:
bot
indica el bot que entró en la mazmorra. 0 indica que ingresó a la mazmorra y 1 indica que el enemigo ingresó a la mazmorra.result
Indica el éxito del viaje. False indica que el bot de espeleología tuvo éxito, mientras que True indica que fallaron.dungeon
es una lista de cartas / entradas que representan las cartas que estaban en la mazmorra. La mazmorra se ordena por orden; la primera carta colocada en el calabozo es la primera en la lista, y la última carta colocada está al final. No recibirá ninguna información sobre tarjetas descartadas; son secretos del otro bot.vorped
es un número entero que representa elvorpal_choice
hecho por el robot espeleólogo. Sibot==0
, ya lo sabes, pero sibot==1
, puede ser información útil.
Seré honesto, no recuerdo completamente por qué hice que el resultado ganador sea Falso, pero creo que fue una buena idea en ese momento.
Valores de retorno
start_turn
: Devuelve 1 para robar una carta o 0 para pasar.play
: Regrese 0 a 5 para descartar el elemento correspondiente y la carta robada, o 6 para colocar la carta en la mazmorra (consistente con la entrada last_turn, excepto para pasar, que se realiza durante start_turn).vorpal_choice
: Devuelve el número de la carta que deseas eliminar con la daga Vorpal (1 para eliminar 1s, 5 para eliminar 5s). Elegir una carta inexistente te mata (8 es ilegal, 10 es ilegal, 0 es ilegal).result
: Puede devolver cualquier cosa, porque esta es una función informativa para actualizar los datos del bot.
Puedes ver el controlador aquí
Aclaraciones adicionales, o simplemente repitiendo algunos pequeños detalles que quizás haya omitido y que desee saber rápidamente:
Los bots juegan 400 juegos entre ellos bot.
No hay variables de clase.
No apuntar a otros bots específicos
No apuntalar otros bots
Sin reflexiones, como modificar el módulo aleatorio u otros bots.
6 bots máximo (por persona), a menos que sea obvio que todos los bots valen la pena incluirlos en el KOTH (pero probablemente aún no hagas un montón de bots, por favor)
No hay una hora de finalización específica para este KOTH, excepto el final de la recompensa por lo que vale. Solo trata de ganar en cada momento.
Resultados hasta ahora (perdón por ser bastante flojo con estos tipos: P)
1 GrailThief 2732 0.98
2 Steve 2399 0.86
3 DevilWorshipper 1854 0.66
4 RunAway 1336 0.48
5 BoringPlayer 1190 0.42
6 SlapAndFlap 783 0.28
7 DareDevilDumDum 750 0.27
8 RandomMandom 156 0.06
Grailthief "roba" la recompensa. en realidad no, porque se lo ganó. Buen trabajo, Sleafar!
fuente
2. place the item in the dungeon. The item goes in the dungeon (duh)
parece ser un error tipográfico; no hay ningún elemento mencionado en ese punto (acabas de robar una carta del mazo de monstruos). Las reglas probablemente deberían aclararse un poco.or any information known only to one player.
estoy claro otra vez? la mazmorra solo se revela al final, por lo que las cartas robadas por un bot solo son conocidas por un bot. Como bonificación, las cartas descartadas nunca se revelan. si piensas "oh bueno, entonces hay una mejor estrategia probabilística", la predicción del oponente sigue siendo muy importante, por lo que esto también es inválidoRespuestas:
GrialThief
Un viejo y experimentado rastreador de mazmorras. Él sabe que la mayoría de los demás esperan, que el santo grial los salva, por lo tanto, se asegura de que desaparezca.
fuente
DevilWorshipper
Mi primer intento en un desafío KOTH:
Esencialmente, nos deshacemos del pacto y la daga vorpal, esperamos a que el demonio entre en la cubierta y pasa. Cada ronda que el oponente haya robado al demonio, tiene el% de posibilidades de que la última carta que el oponente haya robado sea un demonio para asumir que ya jugaron al demonio.
Avísame si hay algo que hice mal; No me he metido con Python en mucho tiempo, este es mi primer KOTH, y son las 2 am, así que seguramente habrá algo.
EDICIONES:
Sacar la aleatoriedad resulta ser de gran ayuda. Con la aleatoriedad es muy tonto. Además, como se dice en los comentarios a continuación, trata de convocar al demonio o al dragón.
Steve
Steve intenta adivinar si la mazmorra es letal o no. Si él piensa que es, pasa. Aparte de eso, traté de hacer que se deshaga de los elementos de forma inteligente. Solía ajustar su umbral de PASS dependiendo de si murió en el calabozo o si el oponente vivía, pero terminó haciéndolo mucho más tonto, así que me deshice de él.
Todavía no vence a GrailThief en mi máquina, pero al menos se acerca.
fuente
SlapAndFlap
Primera vez en KOTH, así que bofetada fuerte por errores.
Este simplón siempre está tratando de eliminar todos los elementos buenos con monstruos de baja fuerza, mientras mantiene a los poderosos y luego solo obliga al oponente a jugar.
Es mejor que RunAway y DumDum al menos: D
Mi otro bot en respuesta eliminada por algún tiempo, necesito arreglarlo mañana
fuente
RandomMandom
El bot aleatorio obligatorio. Apropiadamente, pierde mucho con los bots predeterminados, lo cual es bueno, porque significa que el juego tiene al menos alguna estrategia.
fuente
DareDevilDumDum
un poco claro nunca retrocede. la única forma en que puedes (consistentemente; RunAway pierde a veces, pero aún supera esto la mayor parte del tiempo) perder con este bot es si no eliminas ningún artículo o eres un supercobarde. Piense en este bot como un recordatorio para eliminar elementos, de lo contrario, incluso esto puede ganar.
Y
Huir
prácticamente quitan la armadura y luego se escapan un tiempo antes del final. como daredevildumdum, no recuerda nada, excepto la cantidad de cartas en el mazo (que tbh no se recordaría en el juego real (solo verificaría)) y si alguien quitó la armadura (en su mayoría igual que antes) )
También porque soy un póster de desafío especial, estos bots no cuentan para mi cuenta de bot, porque son bots de ejemplo que son tontos
fuente
AburridoJugador
Al contrario de RandomMandom, BoringPlayer siempre toma las mismas decisiones. El problema es que parece que es demasiado exitoso para un bot tan simple. Obtiene más de 3800 en mi prueba local.
fuente